X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/5a788adec19043d4d93c4fa2713f9f633bfd35ab..52d7d78865a5478cffdc0e51ff0f1e7a6aee373e:/lib/compat.c diff --git a/lib/compat.c b/lib/compat.c index f4913489..1bf46b9c 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 @@ -54,7 +72,7 @@ #ifndef HAVE_MEMMOVE void *memmove(void *dest, const void *src, size_t n) { - memcpy(dest, src, n); + bcopy((char *) src, (char *) dest, n); return dest; } #endif