xref: /dflybsd-src/contrib/lvm2/dist/test/not.c (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino /*	$NetBSD: not.c,v 1.1.1.2 2009/12/02 00:25:58 haad Exp $	*/
286d7f5d3SJohn Marino 
386d7f5d3SJohn Marino #include <unistd.h>
486d7f5d3SJohn Marino #include <stdio.h>
586d7f5d3SJohn Marino #include <stdarg.h>
686d7f5d3SJohn Marino #include <sys/types.h>
786d7f5d3SJohn Marino #include <sys/wait.h>
886d7f5d3SJohn Marino 
main(int args,char ** argv)986d7f5d3SJohn Marino int main(int args, char **argv) {
1086d7f5d3SJohn Marino 	pid_t pid;
1186d7f5d3SJohn Marino 	int status;
1286d7f5d3SJohn Marino 	int FAILURE = 6;
1386d7f5d3SJohn Marino 
1486d7f5d3SJohn Marino 	if (args < 2) {
1586d7f5d3SJohn Marino 		fprintf(stderr, "Need args\n");
1686d7f5d3SJohn Marino 		return FAILURE;
1786d7f5d3SJohn Marino 	}
1886d7f5d3SJohn Marino 
1986d7f5d3SJohn Marino 	pid = fork();
2086d7f5d3SJohn Marino 	if (pid == -1) {
2186d7f5d3SJohn Marino 		fprintf(stderr, "Could not fork\n");
2286d7f5d3SJohn Marino 		return FAILURE;
2386d7f5d3SJohn Marino 	} else if (pid == 0) { 	/* child */
2486d7f5d3SJohn Marino 		execvp(argv[1], &argv[1]);
2586d7f5d3SJohn Marino 		/* should not be accessible */
2686d7f5d3SJohn Marino 		return FAILURE;
2786d7f5d3SJohn Marino 	} else {		/* parent */
2886d7f5d3SJohn Marino 		waitpid(pid, &status, 0);
2986d7f5d3SJohn Marino 		if (!WIFEXITED(status)) {
3086d7f5d3SJohn Marino 			if (WIFSIGNALED(status))
3186d7f5d3SJohn Marino 				fprintf(stderr,
3286d7f5d3SJohn Marino 					"Process %d died of signal %d.\n",
3386d7f5d3SJohn Marino 					pid, WTERMSIG(status));
3486d7f5d3SJohn Marino 			/* did not exit correctly */
3586d7f5d3SJohn Marino 			return FAILURE;
3686d7f5d3SJohn Marino 		}
3786d7f5d3SJohn Marino 		/* return the opposite */
3886d7f5d3SJohn Marino 		return !WEXITSTATUS(status);
3986d7f5d3SJohn Marino 	}
4086d7f5d3SJohn Marino 	/* not accessible */
4186d7f5d3SJohn Marino 	return FAILURE;
4286d7f5d3SJohn Marino }
43