diff options
Diffstat (limited to 'tools/regression/p1003_1b/main.c')
| -rw-r--r-- | tools/regression/p1003_1b/main.c | 79 | 
1 files changed, 79 insertions, 0 deletions
| diff --git a/tools/regression/p1003_1b/main.c b/tools/regression/p1003_1b/main.c new file mode 100644 index 000000000000..7333b64bd455 --- /dev/null +++ b/tools/regression/p1003_1b/main.c @@ -0,0 +1,79 @@ + +#include <sys/param.h> + +#include <stdio.h> +#include <string.h> + +int fifo(int argc, char *argv[]); +int memlock(int argc, char *argv[]); +int p26(int argc, char *argv[]); +int sched(int argc, char *argv[]); +int yield(int argc, char *argv[]); + +static struct { +	const char *t; +	int (*f)(int, char *[]); +	int works; +} tab[] = { +	{ "fifo", fifo, 1 }, +	{ "memlock", memlock, 0 }, +	{ "p26", p26, 1 }, +	{ "sched", sched, 1 }, +	{ "yield", yield, 1 }, +}; + +static int usage(int argc, char *argv[]) +{ +	int i; +	if (argc > 1) +		fprintf(stderr, "%s is unknown\n", argv[1]); + +	fprintf(stderr, "usage: %s [-a] or one of [", argv[0]); +	for (i = 0; i < (sizeof(tab) / sizeof(tab[0])); i++) +		fprintf(stderr, "%s%s", (i)? " | " : "", tab[i].t); +	fprintf(stderr, "]\n"); + +	return -1; +} + +int main(int argc, char *argv[]) +{ +	int i; + +	if (argc == 2 && strcmp(argv[1], "-a") == 0) { +#if 1 +		fprintf(stderr, +			"-a should but doesn't really work" +			" (my notes say \"because things detach\");\n" +			"meanwhile do these individual tests and look" +			" for a non-zero exit code:\n"); +		for (i = 0; i < nitems(tab); i++) +			if (tab[i].works) +				fprintf(stderr, "p1003_1b %s\n", tab[i].t); +		return -1; +#else +		{ +			int r; +			for (i = 0; i < nitems(tab); i++) { +				if (tab[i].works) { +					if ( (r = +					(*tab[i].f)(argc - 1, argv + 1)) ) { +						fprintf(stderr, +						"%s failed\n", tab[i].t); +						return r; +					} +				} +			} +			return 0; +		} +#endif +	} +	 +	if (argc > 1) { +		for (i = 0; i < nitems(tab); i++) +			if (strcmp(tab[i].t, argv[1]) == 0) +				return (*tab[i].f)(argc - 1, argv + 1); +	} + +	return usage(argc, argv); +} | 
