X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/5a788adec19043d4d93c4fa2713f9f633bfd35ab..23c5aef18e5a6faba538ff06f83e09835af637d7:/lib/compat.c diff --git a/lib/compat.c b/lib/compat.c index f4913489..9b411cda 100644 --- a/lib/compat.c +++ b/lib/compat.c @@ -46,7 +46,25 @@ #ifndef HAVE_WAITPID pid_t waitpid(pid_t pid, int *statptr, int options) { +#ifdef HAVE_WAIT4 return wait4(pid, statptr, options, NULL); +#else + /* If wait4 is also not available, try wait3 for SVR3 variants */ + /* Less ideal because can't actually request a specific pid */ + /* At least the WNOHANG option is supported */ + /* Code borrowed from apache fragment written by dwd@bell-labs.com */ + int tmp_pid, dummystat;; + if (kill(pid, 0) == -1) { + errno = ECHILD; + return -1; + } + if (statptr == NULL) + statptr = &dummystat; + while (((tmp_pid = wait3(statptr, options, 0)) != pid) && + (tmp_pid != -1) && (tmp_pid != 0) && (pid != -1)) + ; + return tmp_pid; +#endif } #endif