summaryrefslogtreecommitdiff
path: root/os_compat.c
diff options
context:
space:
mode:
authorFred Wright <fw@fwright.net>2017-02-19 16:14:37 -0800
committerFred Wright <fw@fwright.net>2017-02-19 18:38:21 -0800
commit9d126a4eda9c3efdd593e63adfd5d2f7dddae18c (patch)
treee456c474eee8cd05831b682de863c22db6f958ca /os_compat.c
parentbb66fc3b0987a8a9f9b2cee48be2cd195612ad40 (diff)
downloadgpsd-9d126a4eda9c3efdd593e63adfd5d2f7dddae18c.tar.gz
Cleans up os_daemon() in Windows case.
This provides an always-failing os_daemon() for platforms (e.g., Windows) that can't provide a real daemon() call. This is more consistent than simply omitting the function. It also bases the condition on the lack of fork(), rather than the presence of winsock2.h. TESTED: Ran "scons build-all check" on OSX, Linux, FreeBSD, OpenBSD, and NetBSD. Verified that HAVE_FORK is set in all cases.
Diffstat (limited to 'os_compat.c')
-rw-r--r--os_compat.c18
1 files changed, 15 insertions, 3 deletions
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__