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