#include #include "logmsg.h" #include "wait.h" #include "sig.h" #include "exit.h" #define WHO "bouncesaying" int main(int argc,char **argv) { 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]); }