#include #include "exit.h" #include "logmsg.h" #include "wait.h" #define WHO "bouncesaying" int main(int argc, char **argv) { (void)argc; int pid; int wstat; if (!argv[1]) logmsg(WHO, 100, USAGE, "bouncesaying error [ program [ arg ... ] ]"); if (argv[2]) { pid = fork(); if (pid == -1) logmsg(WHO, 111, FATAL, "unable to fork: "); if (pid == 0) { execvp(argv[2], argv + 2); if (errno) _exit(111); _exit(100); } if (wait_pid(&wstat, pid) == -1) logmsg(WHO, 111, FATAL, "wait failed"); if (wait_crashed(wstat)) logmsg(WHO, 111, FATAL, "child crashed"); switch (wait_exitcode(wstat)) { case 0: break; case 111: logmsg(WHO, 111, FATAL, "temporary child error"); default: _exit(0); } } logmsg(WHO, 100, LOG, argv[1]); }