diff options
author | Fred Wright <fw@fwright.net> | 2017-02-19 16:14:37 -0800 |
---|---|---|
committer | Fred Wright <fw@fwright.net> | 2017-02-19 18:38:21 -0800 |
commit | 9d126a4eda9c3efdd593e63adfd5d2f7dddae18c (patch) | |
tree | e456c474eee8cd05831b682de863c22db6f958ca | |
parent | bb66fc3b0987a8a9f9b2cee48be2cd195612ad40 (diff) | |
download | gpsd-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.
-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__ |