xref: /freebsd/tools/regression/p1003_1b/main.c (revision 60caf0c9c2848b8389cc3159bbc219dd408a2496)
1e5f1b1b1SPeter Dufault /* $FreeBSD$ */
2*60caf0c9SCraig Rodrigues 
3*60caf0c9SCraig Rodrigues #include <sys/param.h>
4*60caf0c9SCraig Rodrigues 
5e5f1b1b1SPeter Dufault #include <stdio.h>
65956adf2SEnji Cooper #include <string.h>
7e5f1b1b1SPeter Dufault 
8e5f1b1b1SPeter Dufault int fifo(int argc, char *argv[]);
9e5f1b1b1SPeter Dufault int memlock(int argc, char *argv[]);
10e5f1b1b1SPeter Dufault int p26(int argc, char *argv[]);
11e5f1b1b1SPeter Dufault int sched(int argc, char *argv[]);
12e5f1b1b1SPeter Dufault int yield(int argc, char *argv[]);
13e5f1b1b1SPeter Dufault 
14e5f1b1b1SPeter Dufault static struct {
15e5f1b1b1SPeter Dufault 	const char *t;
16e5f1b1b1SPeter Dufault 	int (*f)(int, char *[]);
17e5f1b1b1SPeter Dufault 	int works;
18e5f1b1b1SPeter Dufault } tab[] = {
19e5f1b1b1SPeter Dufault 	{ "fifo", fifo, 1 },
20e5f1b1b1SPeter Dufault 	{ "memlock", memlock, 0 },
21e5f1b1b1SPeter Dufault 	{ "p26", p26, 1 },
22e5f1b1b1SPeter Dufault 	{ "sched", sched, 1 },
23e5f1b1b1SPeter Dufault 	{ "yield", yield, 1 },
24e5f1b1b1SPeter Dufault };
25e5f1b1b1SPeter Dufault 
26e5f1b1b1SPeter Dufault static int usage(int argc, char *argv[])
27e5f1b1b1SPeter Dufault {
28e5f1b1b1SPeter Dufault 	int i;
29e5f1b1b1SPeter Dufault 	if (argc > 1)
30e5f1b1b1SPeter Dufault 		fprintf(stderr, "%s is unknown\n", argv[1]);
31e5f1b1b1SPeter Dufault 
32e5f1b1b1SPeter Dufault 	fprintf(stderr, "usage: %s [-a] or one of [", argv[0]);
33e5f1b1b1SPeter Dufault 	for (i = 0; i < (sizeof(tab) / sizeof(tab[0])); i++)
34e5f1b1b1SPeter Dufault 		fprintf(stderr, "%s%s", (i)? " | " : "", tab[i].t);
35e5f1b1b1SPeter Dufault 	fprintf(stderr, "]\n");
36e5f1b1b1SPeter Dufault 
37e5f1b1b1SPeter Dufault 	return -1;
38e5f1b1b1SPeter Dufault }
39e5f1b1b1SPeter Dufault 
40e5f1b1b1SPeter Dufault int main(int argc, char *argv[])
41e5f1b1b1SPeter Dufault {
42e5f1b1b1SPeter Dufault 	int i;
43e5f1b1b1SPeter Dufault 
44e5f1b1b1SPeter Dufault 	if (argc == 2 && strcmp(argv[1], "-a") == 0) {
45e5f1b1b1SPeter Dufault #if 1
46e5f1b1b1SPeter Dufault 		fprintf(stderr,
47e5f1b1b1SPeter Dufault 			"-a should but doesn't really work"
48e5f1b1b1SPeter Dufault 			" (my notes say \"because things detach\");\n"
49e5f1b1b1SPeter Dufault 			"meanwhile do these individual tests and look"
50e5f1b1b1SPeter Dufault 			" for a non-zero exit code:\n");
51*60caf0c9SCraig Rodrigues 		for (i = 0; i < nitems(tab); i++)
52e5f1b1b1SPeter Dufault 			if (tab[i].works)
53e5f1b1b1SPeter Dufault 				fprintf(stderr, "p1003_1b %s\n", tab[i].t);
54e5f1b1b1SPeter Dufault 		return -1;
55e5f1b1b1SPeter Dufault #else
56e5f1b1b1SPeter Dufault 		{
57e5f1b1b1SPeter Dufault 			int r;
58*60caf0c9SCraig Rodrigues 			for (i = 0; i < nitems(tab); i++) {
59e5f1b1b1SPeter Dufault 				if (tab[i].works) {
60e5f1b1b1SPeter Dufault 					if ( (r =
61e5f1b1b1SPeter Dufault 					(*tab[i].f)(argc - 1, argv + 1)) ) {
62e5f1b1b1SPeter Dufault 						fprintf(stderr,
63e5f1b1b1SPeter Dufault 						"%s failed\n", tab[i].t);
64e5f1b1b1SPeter Dufault 						return r;
65e5f1b1b1SPeter Dufault 					}
66e5f1b1b1SPeter Dufault 				}
67e5f1b1b1SPeter Dufault 			}
68e5f1b1b1SPeter Dufault 			return 0;
69e5f1b1b1SPeter Dufault 		}
70e5f1b1b1SPeter Dufault #endif
71e5f1b1b1SPeter Dufault 	}
72e5f1b1b1SPeter Dufault 
73e5f1b1b1SPeter Dufault 	if (argc > 1) {
74*60caf0c9SCraig Rodrigues 		for (i = 0; i < nitems(tab); i++)
75e5f1b1b1SPeter Dufault 			if (strcmp(tab[i].t, argv[1]) == 0)
76e5f1b1b1SPeter Dufault 				return (*tab[i].f)(argc - 1, argv + 1);
77e5f1b1b1SPeter Dufault 	}
78e5f1b1b1SPeter Dufault 
79e5f1b1b1SPeter Dufault 	return usage(argc, argv);
80e5f1b1b1SPeter Dufault }
81