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