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