summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SConstruct2
-rw-r--r--os_compat.c18
2 files changed, 16 insertions, 4 deletions
diff --git a/SConstruct b/SConstruct
index 9f36905c..e593fa72 100644
--- a/SConstruct
+++ b/SConstruct
@@ -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__