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