xref: /netbsd-src/external/gpl2/lvm2/dist/test/not.c (revision 7c604eea85b4f330dc75ffe65e947f4d73758aa0)
1*7c604eeaShaad /*	$NetBSD: not.c,v 1.1.1.2 2009/12/02 00:25:58 haad Exp $	*/
2bec4d750Shaad 
3bec4d750Shaad #include <unistd.h>
4bec4d750Shaad #include <stdio.h>
5bec4d750Shaad #include <stdarg.h>
6bec4d750Shaad #include <sys/types.h>
7bec4d750Shaad #include <sys/wait.h>
8bec4d750Shaad 
main(int args,char ** argv)9bec4d750Shaad int main(int args, char **argv) {
10bec4d750Shaad 	pid_t pid;
11bec4d750Shaad 	int status;
12bec4d750Shaad 	int FAILURE = 6;
13bec4d750Shaad 
14bec4d750Shaad 	if (args < 2) {
15bec4d750Shaad 		fprintf(stderr, "Need args\n");
16bec4d750Shaad 		return FAILURE;
17bec4d750Shaad 	}
18bec4d750Shaad 
19bec4d750Shaad 	pid = fork();
20bec4d750Shaad 	if (pid == -1) {
21bec4d750Shaad 		fprintf(stderr, "Could not fork\n");
22bec4d750Shaad 		return FAILURE;
23bec4d750Shaad 	} else if (pid == 0) { 	/* child */
24bec4d750Shaad 		execvp(argv[1], &argv[1]);
25bec4d750Shaad 		/* should not be accessible */
26bec4d750Shaad 		return FAILURE;
27bec4d750Shaad 	} else {		/* parent */
28bec4d750Shaad 		waitpid(pid, &status, 0);
29bec4d750Shaad 		if (!WIFEXITED(status)) {
30*7c604eeaShaad 			if (WIFSIGNALED(status))
31*7c604eeaShaad 				fprintf(stderr,
32*7c604eeaShaad 					"Process %d died of signal %d.\n",
33*7c604eeaShaad 					pid, WTERMSIG(status));
34bec4d750Shaad 			/* did not exit correctly */
35bec4d750Shaad 			return FAILURE;
36bec4d750Shaad 		}
37bec4d750Shaad 		/* return the opposite */
38bec4d750Shaad 		return !WEXITSTATUS(status);
39bec4d750Shaad 	}
40bec4d750Shaad 	/* not accessible */
41bec4d750Shaad 	return FAILURE;
42bec4d750Shaad }
43