From: David Dykstra Date: Wed, 3 Feb 1999 15:11:40 +0000 (+0000) Subject: Add alternate implementation of waitpid() for systems that have wait4 but X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/commitdiff_plain/e68f34816f462dea879082b69eb1df7cfb1b0c0f Add alternate implementation of waitpid() for systems that have wait4 but not wait3, in particular Amdahl's SVR2-based UTS 2.1.2. The code comes from apache, but I contributed it to apache in the first place. --- diff --git a/configure.in b/configure.in index 79aab779..25bf768c 100644 --- a/configure.in +++ b/configure.in @@ -49,7 +49,7 @@ fi AC_FUNC_MEMCMP AC_FUNC_UTIME_NULL -AC_CHECK_FUNCS(waitpid getcwd strdup strerror chown chmod mknod) +AC_CHECK_FUNCS(waitpid wait4 getcwd strdup strerror chown chmod mknod) AC_CHECK_FUNCS(fchmod fstat strchr readlink link utime utimes strftime) AC_CHECK_FUNCS(memmove getopt_long lchown vsnprintf snprintf setsid glob strpbrk) AC_CHECK_FUNCS(strlcat strlcpy) 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