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