X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/5a788adec19043d4d93c4fa2713f9f633bfd35ab..1347d5126a4d89718544d976f64943dfa93dd8c4:/lib/compat.c diff --git a/lib/compat.c b/lib/compat.c index f4913489..8580fdb9 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 @@ -127,3 +145,19 @@ return ret; } #endif + +#ifndef HAVE_INET_ATON + int inet_aton(const char *cp, struct in_addr *inp) +{ + if (strcmp(cp, "255.255.255.255") == 0) { + inp->s_addr = (unsigned) -1; + return 1; + } + + inp->s_addr = inet_addr(cp); + if (inp->s_addr == (unsigned) -1) { + return 0; + } + return 1; +} +#endif