1 /* Public domain. */ 2 3 #include <sys/types.h> 4 #include <sys/wait.h> 5 #include "error.h" 6 #include "haswaitp.h" 7 8 #ifdef HASWAITPID 9 wait_pid(wstat,pid)10int wait_pid(wstat,pid) int *wstat; int pid; 11 { 12 int r; 13 14 do 15 r = waitpid(pid,wstat,0); 16 while ((r == -1) && (errno == error_intr)); 17 return r; 18 } 19 20 #else 21 22 /* XXX untested */ 23 /* XXX breaks down with more than two children */ 24 static int oldpid = 0; 25 static int oldwstat; /* defined if(oldpid) */ 26 wait_pid(wstat,pid)27int wait_pid(wstat,pid) int *wstat; int pid; 28 { 29 int r; 30 31 if (pid == oldpid) { *wstat = oldwstat; oldpid = 0; return pid; } 32 33 do { 34 r = wait(wstat); 35 if ((r != pid) && (r != -1)) { oldwstat = *wstat; oldpid = r; continue; } 36 } 37 while ((r == -1) && (errno == error_intr)); 38 return r; 39 } 40 41 #endif 42