bouncesaying.c
changeset 0 068428edee47
equal deleted inserted replaced
-1:000000000000 0:068428edee47
       
     1 #include "fork.h"
       
     2 #include "strerr.h"
       
     3 #include "error.h"
       
     4 #include "wait.h"
       
     5 #include "sig.h"
       
     6 #include "exit.h"
       
     7 
       
     8 #define FATAL "bouncesaying: fatal: "
       
     9 
       
    10 void main(argc,argv)
       
    11 int argc;
       
    12 char **argv;
       
    13 {
       
    14   int pid;
       
    15   int wstat;
       
    16 
       
    17   if (!argv[1])
       
    18     strerr_die1x(100,"bouncesaying: usage: bouncesaying error [ program [ arg ... ] ]");
       
    19 
       
    20   if (argv[2]) {
       
    21     pid = fork();
       
    22     if (pid == -1)
       
    23       strerr_die2sys(111,FATAL,"unable to fork: ");
       
    24     if (pid == 0) {
       
    25       execvp(argv[2],argv + 2);
       
    26       if (error_temp(errno)) _exit(111);
       
    27       _exit(100);
       
    28     }
       
    29     if (wait_pid(&wstat,pid) == -1)
       
    30       strerr_die2x(111,FATAL,"wait failed");
       
    31     if (wait_crashed(wstat))
       
    32       strerr_die2x(111,FATAL,"child crashed");
       
    33     switch(wait_exitcode(wstat)) {
       
    34       case 0: break;
       
    35       case 111: strerr_die2x(111,FATAL,"temporary child error");
       
    36       default: _exit(0);
       
    37     }
       
    38   }
       
    39 
       
    40   strerr_die1x(100,argv[1]);
       
    41 }