diff options
Diffstat (limited to 'src/compat')
-rw-r--r-- | src/compat/Makefile.am | 2 | ||||
-rw-r--r-- | src/compat/Makefile.in | 8 | ||||
-rw-r--r-- | src/compat/compat-basename.c | 15 | ||||
-rw-r--r-- | src/compat/compat-daemon.c | 79 | ||||
-rw-r--r-- | src/compat/compat-dirname.c | 151 | ||||
-rw-r--r-- | src/compat/compat-gettimeofday.c | 98 | ||||
-rw-r--r-- | src/compat/compat-inet_ntop.c | 42 | ||||
-rw-r--r-- | src/compat/compat-inet_pton.c | 42 | ||||
-rw-r--r-- | src/compat/compat-versionhelpers.h | 51 | ||||
-rw-r--r-- | src/compat/compat.h | 14 |
10 files changed, 281 insertions, 221 deletions
diff --git a/src/compat/Makefile.am b/src/compat/Makefile.am index 0a9d1c2..444a8f8 100644 --- a/src/compat/Makefile.am +++ b/src/compat/Makefile.am @@ -5,7 +5,7 @@ # packet encryption, packet authentication, and # packet compression. # -# Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net> +# Copyright (C) 2002-2017 OpenVPN Technologies, Inc. <sales@openvpn.net> # Copyright (C) 2006-2012 Alon Bar-Lev <alon.barlev@gmail.com> # diff --git a/src/compat/Makefile.in b/src/compat/Makefile.in index 9232d31..e9d589f 100644 --- a/src/compat/Makefile.in +++ b/src/compat/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.14.1 from Makefile.am. +# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. @@ -21,7 +21,7 @@ # packet encryption, packet authentication, and # packet compression. # -# Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net> +# Copyright (C) 2002-2017 OpenVPN Technologies, Inc. <sales@openvpn.net> # Copyright (C) 2006-2012 Alon Bar-Lev <alon.barlev@gmail.com> # @@ -438,14 +438,14 @@ distclean-compile: @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< diff --git a/src/compat/compat-basename.c b/src/compat/compat-basename.c index a057691..b7b5c43 100644 --- a/src/compat/compat-basename.c +++ b/src/compat/compat-basename.c @@ -37,14 +37,15 @@ * This version is extended to handle both / and \ in path names */ char * -basename (char *filename) +basename(char *filename) { - char *p = strrchr (filename, '/'); - if (!p) { - /* If NULL, check for \ instead ... might be Windows a path */ - p = strrchr (filename, '\\'); - } - return p ? p + 1 : (char *) filename; + char *p = strrchr(filename, '/'); + if (!p) + { + /* If NULL, check for \ instead ... might be Windows a path */ + p = strrchr(filename, '\\'); + } + return p ? p + 1 : (char *) filename; } #endif /* HAVE_BASENAME */ diff --git a/src/compat/compat-daemon.c b/src/compat/compat-daemon.c index dde96a2..5093942 100644 --- a/src/compat/compat-daemon.c +++ b/src/compat/compat-daemon.c @@ -58,43 +58,52 @@ int daemon(int nochdir, int noclose) { #if defined(HAVE_FORK) && defined(HAVE_SETSID) - switch (fork()) { - case -1: - return (-1); - case 0: - break; - default: - exit(0); - } - - if (setsid() == -1) - return (-1); - - if (!nochdir) - chdir("/"); - - if (!noclose) { + switch (fork()) { + case -1: + return (-1); + + case 0: + break; + + default: + exit(0); + } + + if (setsid() == -1) + { + return (-1); + } + + if (!nochdir) + { + chdir("/"); + } + + if (!noclose) + { #if defined(HAVE_DUP) && defined(HAVE_DUP2) - int fd; - if ((fd = open ("/dev/null", O_RDWR, 0)) != -1) { - dup2 (fd, 0); - dup2 (fd, 1); - dup2 (fd, 2); - if (fd > 2) { - close (fd); - } - } -#endif - } - - return 0; -#else - (void)nochdir; - (void)noclose; - errno = EFAULT; - return -1; + int fd; + if ((fd = open("/dev/null", O_RDWR, 0)) != -1) + { + dup2(fd, 0); + dup2(fd, 1); + dup2(fd, 2); + if (fd > 2) + { + close(fd); + } + } #endif + } + + return 0; +#else /* if defined(HAVE_FORK) && defined(HAVE_SETSID) */ + (void)nochdir; + (void)noclose; + errno = EFAULT; + return -1; +#endif /* if defined(HAVE_FORK) && defined(HAVE_SETSID) */ } -#endif +#endif /* ifndef HAVE_DAEMON */ diff --git a/src/compat/compat-dirname.c b/src/compat/compat-dirname.c index 8878595..7687108 100644 --- a/src/compat/compat-dirname.c +++ b/src/compat/compat-dirname.c @@ -41,79 +41,102 @@ static const char * __memrchr(const char *str, int c, size_t n) { - const char *end = str; - - end += n - 1; /* Go to the end of the string */ - while (end >= str) { - if(c == *end) - return end; - else - end--; - } - return NULL; + const char *end = str; + + end += n - 1; /* Go to the end of the string */ + while (end >= str) { + if (c == *end) + { + return end; + } + else + { + end--; + } + } + return NULL; } /* Modified version based on glibc-2.14.1 by Ulrich Drepper <drepper@akkadia.org> * This version is extended to handle both / and \ in path names. */ char * -dirname (char *path) +dirname(char *path) { - static const char dot[] = "."; - char *last_slash; - char separator = '/'; - - /* Find last '/'. */ - last_slash = path != NULL ? strrchr (path, '/') : NULL; - /* If NULL, check for \ instead ... might be Windows a path */ - if (!last_slash) { - last_slash = path != NULL ? strrchr (path, '\\') : NULL; - separator = last_slash ? '\\' : '/'; /* Change the separator if \ was found */ - } - - if (last_slash != NULL && last_slash != path && last_slash[1] == '\0') { - /* Determine whether all remaining characters are slashes. */ - char *runp; - - for (runp = last_slash; runp != path; --runp) - if (runp[-1] != separator) - break; - - /* The '/' is the last character, we have to look further. */ - if (runp != path) - last_slash = (char *) __memrchr (path, separator, runp - path); + static const char dot[] = "."; + char *last_slash; + char separator = '/'; + + /* Find last '/'. */ + last_slash = path != NULL ? strrchr(path, '/') : NULL; + /* If NULL, check for \ instead ... might be Windows a path */ + if (!last_slash) + { + last_slash = path != NULL ? strrchr(path, '\\') : NULL; + separator = last_slash ? '\\' : '/'; /* Change the separator if \ was found */ + } + + if (last_slash != NULL && last_slash != path && last_slash[1] == '\0') + { + /* Determine whether all remaining characters are slashes. */ + char *runp; + + for (runp = last_slash; runp != path; --runp) + if (runp[-1] != separator) + { + break; + } + + /* The '/' is the last character, we have to look further. */ + if (runp != path) + { + last_slash = (char *) __memrchr(path, separator, runp - path); + } + } + + if (last_slash != NULL) + { + /* Determine whether all remaining characters are slashes. */ + char *runp; + + for (runp = last_slash; runp != path; --runp) + if (runp[-1] != separator) + { + break; + } + + /* Terminate the path. */ + if (runp == path) + { + /* The last slash is the first character in the string. We have to + * return "/". As a special case we have to return "//" if there + * are exactly two slashes at the beginning of the string. See + * XBD 4.10 Path Name Resolution for more information. */ + if (last_slash == path + 1) + { + ++last_slash; + } + else + { + last_slash = path + 1; + } + } + else + { + last_slash = runp; + } + + last_slash[0] = '\0'; + } + else + { + /* This assignment is ill-designed but the XPG specs require to + * return a string containing "." in any case no directory part is + * found and so a static and constant string is required. */ + path = (char *) dot; } - if (last_slash != NULL) { - /* Determine whether all remaining characters are slashes. */ - char *runp; - - for (runp = last_slash; runp != path; --runp) - if (runp[-1] != separator) - break; - - /* Terminate the path. */ - if (runp == path) { - /* The last slash is the first character in the string. We have to - return "/". As a special case we have to return "//" if there - are exactly two slashes at the beginning of the string. See - XBD 4.10 Path Name Resolution for more information. */ - if (last_slash == path + 1) - ++last_slash; - else - last_slash = path + 1; - } - else - last_slash = runp; - - last_slash[0] = '\0'; - } else - /* This assignment is ill-designed but the XPG specs require to - return a string containing "." in any case no directory part is - found and so a static and constant string is required. */ - path = (char *) dot; - - return path; + return path; } #endif /* HAVE_DIRNAME */ diff --git a/src/compat/compat-gettimeofday.c b/src/compat/compat-gettimeofday.c index 19feaae..d53e360 100644 --- a/src/compat/compat-gettimeofday.c +++ b/src/compat/compat-gettimeofday.c @@ -5,7 +5,7 @@ * packet encryption, packet authentication, and * packet compression. * - * Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net> + * Copyright (C) 2002-2017 OpenVPN Technologies, Inc. <sales@openvpn.net> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 @@ -48,12 +48,12 @@ static unsigned int last_msec = 0; static int bt_last = 0; static void -gettimeofday_calibrate (void) +gettimeofday_calibrate(void) { - const time_t t = time(NULL); - const DWORD gtc = GetTickCount(); - gtc_base = t - gtc/1000; - gtc_last = gtc; + const time_t t = time(NULL); + const DWORD gtc = GetTickCount(); + gtc_base = t - gtc/1000; + gtc_last = gtc; } /* @@ -62,68 +62,72 @@ gettimeofday_calibrate (void) * more processor cycles than GetTickCount. */ int -gettimeofday (struct timeval *tv, void *tz) +gettimeofday(struct timeval *tv, void *tz) { - const DWORD gtc = GetTickCount(); - int bt = 0; - time_t sec; - unsigned int msec; - const int backtrack_hold_seconds = 10; + const DWORD gtc = GetTickCount(); + int bt = 0; + time_t sec; + unsigned int msec; + const int backtrack_hold_seconds = 10; - (void)tz; + (void)tz; - /* recalibrate at the dreaded 49.7 day mark */ - if (!gtc_base || gtc < gtc_last) - gettimeofday_calibrate (); - gtc_last = gtc; + /* recalibrate at the dreaded 49.7 day mark */ + if (!gtc_base || gtc < gtc_last) + { + gettimeofday_calibrate(); + } + gtc_last = gtc; - sec = gtc_base + gtc / 1000; - msec = gtc % 1000; + sec = gtc_base + gtc / 1000; + msec = gtc % 1000; - if (sec == last_sec) + if (sec == last_sec) { - if (msec < last_msec) - { - msec = last_msec; - bt = 1; - } + if (msec < last_msec) + { + msec = last_msec; + bt = 1; + } } - else if (sec < last_sec) + else if (sec < last_sec) { - /* We try to dampen out backtracks of less than backtrack_hold_seconds. - Larger backtracks will be passed through and dealt with by the - TIME_BACKTRACK_PROTECTION code (if enabled) */ - if (sec > last_sec - backtrack_hold_seconds) - { - sec = last_sec; - msec = last_msec; - } - bt = 1; + /* We try to dampen out backtracks of less than backtrack_hold_seconds. + * Larger backtracks will be passed through and dealt with by the + * TIME_BACKTRACK_PROTECTION code (if enabled) */ + if (sec > last_sec - backtrack_hold_seconds) + { + sec = last_sec; + msec = last_msec; + } + bt = 1; } - tv->tv_sec = (long)last_sec = (long)sec; - tv->tv_usec = (last_msec = msec) * 1000; + tv->tv_sec = (long)last_sec = (long)sec; + tv->tv_usec = (last_msec = msec) * 1000; - if (bt && !bt_last) - gettimeofday_calibrate (); - bt_last = bt; + if (bt && !bt_last) + { + gettimeofday_calibrate(); + } + bt_last = bt; - return 0; + return 0; } -#else +#else /* ifdef _WIN32 */ #ifdef HAVE_TIME_H #include <time.h> #endif int -gettimeofday (struct timeval *tv, void *tz) +gettimeofday(struct timeval *tv, void *tz) { - (void)tz; - tv->tv_sec = time(NULL); - tv->tv_usec = 0; - return 0; + (void)tz; + tv->tv_sec = time(NULL); + tv->tv_usec = 0; + return 0; } #endif /* _WIN32 */ diff --git a/src/compat/compat-inet_ntop.c b/src/compat/compat-inet_ntop.c index 786c973..dd7abb5 100644 --- a/src/compat/compat-inet_ntop.c +++ b/src/compat/compat-inet_ntop.c @@ -46,31 +46,33 @@ const char * inet_ntop(int af, const void *src, char *dst, socklen_t size) { - struct sockaddr_storage ss; - unsigned long s = size; + struct sockaddr_storage ss; + unsigned long s = size; - ZeroMemory(&ss, sizeof(ss)); - ss.ss_family = af; + ZeroMemory(&ss, sizeof(ss)); + ss.ss_family = af; - switch(af) { - case AF_INET: - ((struct sockaddr_in *)&ss)->sin_addr = *(struct in_addr *)src; - break; - case AF_INET6: - ((struct sockaddr_in6 *)&ss)->sin6_addr = *(struct in6_addr *)src; - break; - default: - return NULL; - } - /* cannot direclty use &size because of strict aliasing rules */ - return (WSAAddressToString((struct sockaddr *)&ss, sizeof(ss), NULL, dst, &s) == 0)? - dst : NULL; + switch (af) { + case AF_INET: + ((struct sockaddr_in *)&ss)->sin_addr = *(struct in_addr *)src; + break; + + case AF_INET6: + ((struct sockaddr_in6 *)&ss)->sin6_addr = *(struct in6_addr *)src; + break; + + default: + return NULL; + } + /* cannot direclty use &size because of strict aliasing rules */ + return (WSAAddressToString((struct sockaddr *)&ss, sizeof(ss), NULL, dst, &s) == 0) ? + dst : NULL; } -#else +#else /* ifdef _WIN32 */ #error no emulation for inet_ntop -#endif +#endif /* ifdef _WIN32 */ -#endif +#endif /* ifndef HAVE_INET_NTOP */ diff --git a/src/compat/compat-inet_pton.c b/src/compat/compat-inet_pton.c index 5965f0d..1e41fa2 100644 --- a/src/compat/compat-inet_pton.c +++ b/src/compat/compat-inet_pton.c @@ -48,32 +48,34 @@ int inet_pton(int af, const char *src, void *dst) { - struct sockaddr_storage ss; - int size = sizeof(ss); - char src_copy[INET6_ADDRSTRLEN+1]; + struct sockaddr_storage ss; + int size = sizeof(ss); + char src_copy[INET6_ADDRSTRLEN+1]; - ZeroMemory(&ss, sizeof(ss)); - /* stupid non-const API */ - strncpy (src_copy, src, INET6_ADDRSTRLEN+1); - src_copy[INET6_ADDRSTRLEN] = 0; + ZeroMemory(&ss, sizeof(ss)); + /* stupid non-const API */ + strncpy(src_copy, src, INET6_ADDRSTRLEN+1); + src_copy[INET6_ADDRSTRLEN] = 0; - if (WSAStringToAddress(src_copy, af, NULL, (struct sockaddr *)&ss, &size) == 0) { - switch(af) { - case AF_INET: - *(struct in_addr *)dst = ((struct sockaddr_in *)&ss)->sin_addr; - return 1; - case AF_INET6: - *(struct in6_addr *)dst = ((struct sockaddr_in6 *)&ss)->sin6_addr; - return 1; + if (WSAStringToAddress(src_copy, af, NULL, (struct sockaddr *)&ss, &size) == 0) + { + switch (af) { + case AF_INET: + *(struct in_addr *)dst = ((struct sockaddr_in *)&ss)->sin_addr; + return 1; + + case AF_INET6: + *(struct in6_addr *)dst = ((struct sockaddr_in6 *)&ss)->sin6_addr; + return 1; + } } - } - return 0; + return 0; } -#else +#else /* ifdef _WIN32 */ #error no emulation for inet_ntop -#endif +#endif /* ifdef _WIN32 */ -#endif +#endif /* ifndef HAVE_INET_PTON */ diff --git a/src/compat/compat-versionhelpers.h b/src/compat/compat-versionhelpers.h index f634091..a793056 100644 --- a/src/compat/compat-versionhelpers.h +++ b/src/compat/compat-versionhelpers.h @@ -18,64 +18,77 @@ #define _WIN32_WINNT_WINBLUE 0x0603 -VERSIONHELPERAPI IsWindowsVersionOrGreater(WORD major, WORD minor, WORD servpack) +VERSIONHELPERAPI +IsWindowsVersionOrGreater(WORD major, WORD minor, WORD servpack) { OSVERSIONINFOEXW vi = {sizeof(vi),major,minor,0,0,{0},servpack}; return VerifyVersionInfoW(&vi, VER_MAJORVERSION|VER_MINORVERSION|VER_SERVICEPACKMAJOR, - VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, - VER_MAJORVERSION,VER_GREATER_EQUAL), - VER_MINORVERSION,VER_GREATER_EQUAL), - VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL)); + VerSetConditionMask(VerSetConditionMask(VerSetConditionMask(0, + VER_MAJORVERSION,VER_GREATER_EQUAL), + VER_MINORVERSION,VER_GREATER_EQUAL), + VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL)); } -VERSIONHELPERAPI IsWindowsXPOrGreater(void) { +VERSIONHELPERAPI +IsWindowsXPOrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 0); } -VERSIONHELPERAPI IsWindowsXPSP1OrGreater(void) { +VERSIONHELPERAPI +IsWindowsXPSP1OrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 1); } -VERSIONHELPERAPI IsWindowsXPSP2OrGreater(void) { +VERSIONHELPERAPI +IsWindowsXPSP2OrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 2); } -VERSIONHELPERAPI IsWindowsXPSP3OrGreater(void) { +VERSIONHELPERAPI +IsWindowsXPSP3OrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINXP), LOBYTE(_WIN32_WINNT_WINXP), 3); } -VERSIONHELPERAPI IsWindowsVistaOrGreater(void) { +VERSIONHELPERAPI +IsWindowsVistaOrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0); } -VERSIONHELPERAPI IsWindowsVistaSP1OrGreater(void) { +VERSIONHELPERAPI +IsWindowsVistaSP1OrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 1); } -VERSIONHELPERAPI IsWindowsVistaSP2OrGreater(void) { +VERSIONHELPERAPI +IsWindowsVistaSP2OrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 2); } -VERSIONHELPERAPI IsWindows7OrGreater(void) { +VERSIONHELPERAPI +IsWindows7OrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 0); } -VERSIONHELPERAPI IsWindows7SP1OrGreater(void) { +VERSIONHELPERAPI +IsWindows7SP1OrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN7), LOBYTE(_WIN32_WINNT_WIN7), 1); } -VERSIONHELPERAPI IsWindows8OrGreater(void) { +VERSIONHELPERAPI +IsWindows8OrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN8), LOBYTE(_WIN32_WINNT_WIN8), 0); } -VERSIONHELPERAPI IsWindows8Point1OrGreater(void) { +VERSIONHELPERAPI +IsWindows8Point1OrGreater(void) { return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WINBLUE), LOBYTE(_WIN32_WINNT_WINBLUE), 0); } -VERSIONHELPERAPI IsWindowsServer(void) { +VERSIONHELPERAPI +IsWindowsServer(void) { OSVERSIONINFOEXW vi = {sizeof(vi),0,0,0,0,{0},0,0,0,VER_NT_WORKSTATION}; return !VerifyVersionInfoW(&vi, VER_PRODUCT_TYPE, VerSetConditionMask(0, VER_PRODUCT_TYPE, VER_EQUAL)); } -#endif -#endif +#endif /* if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && !defined(__WIDL__) */ +#endif /* ifndef _INC_VERSIONHELPERS */ diff --git a/src/compat/compat.h b/src/compat/compat.h index 021573e..75bfaed 100644 --- a/src/compat/compat.h +++ b/src/compat/compat.h @@ -42,27 +42,33 @@ #endif #ifndef HAVE_DIRNAME -char * dirname(char *str); +char *dirname(char *str); + #endif /* HAVE_DIRNAME */ #ifndef HAVE_BASENAME -char * basename(char *str); +char *basename(char *str); + #endif /* HAVE_BASENAME */ #ifndef HAVE_GETTIMEOFDAY -int gettimeofday (struct timeval *tv, void *tz); +int gettimeofday(struct timeval *tv, void *tz); + #endif #ifndef HAVE_DAEMON int daemon(int nochdir, int noclose); + #endif #ifndef HAVE_INET_NTOP -const char * inet_ntop(int af, const void *src, char *dst, socklen_t size); +const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); + #endif #ifndef HAVE_INET_PTON int inet_pton(int af, const char *src, void *dst); + #endif #endif /* COMPAT_H */ |