debian/rules: Use `git' potty wrapper.
[qmail] / wait_pid.c
1 #include <sys/types.h>
2 #include <sys/wait.h>
3 #include "error.h"
4 #include "haswaitp.h"
5
6 #ifdef HASWAITPID
7
8 int wait_pid(wstat,pid) int *wstat; int pid;
9 {
10 int r;
11
12 do
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 {
32 r = wait(wstat);
33 if ((r != pid) && (r != -1)) { oldwstat = *wstat; oldpid = r; continue; }
34 }
35 while ((r == -1) && (errno == error_intr));
36 return r;
37 }
38
39 #endif