157257Sdufault/* $FreeBSD$ */ 2287297Srodrigc 3287297Srodrigc#include <sys/param.h> 4287297Srodrigc 557257Sdufault#include <stdio.h> 6283018Sngie#include <string.h> 757257Sdufault 857257Sdufaultint fifo(int argc, char *argv[]); 957257Sdufaultint memlock(int argc, char *argv[]); 1057257Sdufaultint p26(int argc, char *argv[]); 1157257Sdufaultint sched(int argc, char *argv[]); 1257257Sdufaultint yield(int argc, char *argv[]); 1357257Sdufault 1457257Sdufaultstatic struct { 1557257Sdufault const char *t; 1657257Sdufault int (*f)(int, char *[]); 1757257Sdufault int works; 1857257Sdufault} tab[] = { 1957257Sdufault { "fifo", fifo, 1 }, 2057257Sdufault { "memlock", memlock, 0 }, 2157257Sdufault { "p26", p26, 1 }, 2257257Sdufault { "sched", sched, 1 }, 2357257Sdufault { "yield", yield, 1 }, 2457257Sdufault}; 2557257Sdufault 2657257Sdufaultstatic int usage(int argc, char *argv[]) 2757257Sdufault{ 2857257Sdufault int i; 2957257Sdufault if (argc > 1) 3057257Sdufault fprintf(stderr, "%s is unknown\n", argv[1]); 3157257Sdufault 3257257Sdufault fprintf(stderr, "usage: %s [-a] or one of [", argv[0]); 3357257Sdufault for (i = 0; i < (sizeof(tab) / sizeof(tab[0])); i++) 3457257Sdufault fprintf(stderr, "%s%s", (i)? " | " : "", tab[i].t); 3557257Sdufault fprintf(stderr, "]\n"); 3657257Sdufault 3757257Sdufault return -1; 3857257Sdufault} 3957257Sdufault 4057257Sdufaultint main(int argc, char *argv[]) 4157257Sdufault{ 4257257Sdufault int i; 4357257Sdufault 4457257Sdufault if (argc == 2 && strcmp(argv[1], "-a") == 0) { 4557257Sdufault#if 1 4657257Sdufault fprintf(stderr, 4757257Sdufault "-a should but doesn't really work" 4857257Sdufault " (my notes say \"because things detach\");\n" 4957257Sdufault "meanwhile do these individual tests and look" 5057257Sdufault " for a non-zero exit code:\n"); 51287297Srodrigc for (i = 0; i < nitems(tab); i++) 5257257Sdufault if (tab[i].works) 5357257Sdufault fprintf(stderr, "p1003_1b %s\n", tab[i].t); 5457257Sdufault return -1; 5557257Sdufault#else 5657257Sdufault { 5757257Sdufault int r; 58287297Srodrigc for (i = 0; i < nitems(tab); i++) { 5957257Sdufault if (tab[i].works) { 6057257Sdufault if ( (r = 6157257Sdufault (*tab[i].f)(argc - 1, argv + 1)) ) { 6257257Sdufault fprintf(stderr, 6357257Sdufault "%s failed\n", tab[i].t); 6457257Sdufault return r; 6557257Sdufault } 6657257Sdufault } 6757257Sdufault } 6857257Sdufault return 0; 6957257Sdufault } 7057257Sdufault#endif 7157257Sdufault } 7257257Sdufault 7357257Sdufault if (argc > 1) { 74287297Srodrigc for (i = 0; i < nitems(tab); i++) 7557257Sdufault if (strcmp(tab[i].t, argv[1]) == 0) 7657257Sdufault return (*tab[i].f)(argc - 1, argv + 1); 7757257Sdufault } 7857257Sdufault 7957257Sdufault return usage(argc, argv); 8057257Sdufault} 81