#include #include "wait.h" #include "logmsg.h" #include "exit.h" #define WHO "except" int main(int argc, char **argv) { int pid; int wstat; if (!argv[1]) logmsg(WHO,100,USAGE,"except program [ arg ... ]"); pid = fork(); if (pid == -1) logmsg(WHO,111,FATAL,"unable to fork: "); if (pid == 0) { execvp(argv[1],argv + 1); 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: _exit(100); case 111: logmsg(WHO,111,FATAL,"temporary child error"); default: _exit(0); } }