chiark / gitweb /
Merge branches 'idx/verh' and 'idx/qmqpc'
[qmail] / wait_pid.c
CommitLineData
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
8int 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 */
22static int oldpid = 0;
23static int oldwstat; /* defined if(oldpid) */
24
25int 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