diff options
-rw-r--r-- | SConstruct | 2 | ||||
-rw-r--r-- | os_compat.c | 18 |
2 files changed, 16 insertions, 4 deletions
@@ -758,7 +758,7 @@ else: # check function after libraries, because some function require libraries # for example clock_gettime() require librt on Linux glibc < 2.17 - for f in ("daemon", "strlcpy", "strlcat", "clock_gettime", "strptime", "gmtime_r", "inet_ntop", "fcntl"): + for f in ("daemon", "strlcpy", "strlcat", "clock_gettime", "strptime", "gmtime_r", "inet_ntop", "fcntl", "fork"): if config.CheckFunc(f): confdefs.append("#define HAVE_%s 1\n" % f.upper()) else: diff --git a/os_compat.c b/os_compat.c index dafbb7a4..790aaf94 100644 --- a/os_compat.c +++ b/os_compat.c @@ -45,10 +45,10 @@ int clock_gettime(clockid_t clk_id, struct timespec *ts) /* End of clock_gettime section */ #ifndef HAVE_DAEMON -#ifndef HAVE_WINSOCK2_H -/* No daemon() provided for Windows as not currently needed */ /* Simulate Linux/BSD daemon() on platforms that don't have it */ +#ifdef HAVE_FORK + #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> @@ -91,7 +91,19 @@ int os_daemon(int nochdir, int noclose) /* coverity[leaked_handle] Intentional handle duplication */ return 0; } -#endif /* HAVE_WINSOCK2_H */ +#else /* !HAVE_FORK */ + +#include <errno.h> + +int os_daemon(int nochdir, int noclose) +{ + (void) nochdir; (void) noclose; + errno = EINVAL; + return -1; +} + +#endif /* !HAVE_FORK */ + #else /* HAVE_DAEMON */ #ifdef __linux__ |