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