summaryrefslogtreecommitdiff
path: root/os_compat.h
diff options
context:
space:
mode:
authorFred Wright <fw@fwright.net>2017-01-22 00:11:34 -0800
committerFred Wright <fw@fwright.net>2017-01-22 14:02:55 -0800
commitcb1403d842a2fdbe6109eaf48acb7a494f30784d (patch)
treeeacc95e6c39338950688aa5473c84619ebeeb555 /os_compat.h
parent0fbb94143ec4a5baf569b09937b28d4339cc8a00 (diff)
downloadgpsd-cb1403d842a2fdbe6109eaf48acb7a494f30784d.tar.gz
Initial creation of os_compat.h.
This creates a header for os_compat.c, and moves the related prototypes into it from gpsd_config.h (as created by SConstruct), after adding references to it to gpsd.h (via gpsd.h-tail) and a few other sources that need it but don't include gpsd.h. It also removes includes of <time.h> in the places where they were only needed for the code now removed from gpsd_config.h. TESTED: Ran "scons build-all check" on OSX 10.9 (with strlcat/strlcpy but no clock_gettime), OSX 10.12 (with strlcat/strlcpy and clock_gettime), and Ubuntu 14 (with clock_gettime but no strlcat/strlcpy). Also verified that fallback versions were not being included where unnecessary.
Diffstat (limited to 'os_compat.h')
-rw-r--r--os_compat.h67
1 files changed, 67 insertions, 0 deletions
diff --git a/os_compat.h b/os_compat.h
new file mode 100644
index 00000000..4dbe9de3
--- /dev/null
+++ b/os_compat.h
@@ -0,0 +1,67 @@
+/*
+ * This file is Copyright (c) 2017 by the GPSD project
+ * BSD terms apply: see the file COPYING in the distribution root for details.
+ *
+ * This is the header for os_compat.c, which contains functions dealing with
+ * compatibility issues across OSes.
+ */
+#ifndef _GPSD_OS_COMPAT_H_
+#define _GPSD_OS_COMPAT_H_
+
+/* Determine which of these functions we need */
+#include "gpsd_config.h"
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+#ifndef HAVE_CLOCK_GETTIME
+
+#include <time.h>
+
+#ifndef CLOCKID_T_DEFINED
+typedef int clockid_t;
+#define CLOCKID_T_DEFINED
+#endif /* !CLOCKID_T_DEFINED */
+
+/*
+ * OS X 10.5 and later use _STRUCT_TIMESPEC (like other OSes)
+ * 10.4 uses _TIMESPEC
+ * 10.3 and earlier use _TIMESPEC_DECLARED
+ */
+#if !defined(_STRUCT_TIMESPEC) && \
+ !defined(_TIMESPEC) && \
+ !defined(_TIMESPEC_DECLARED) && \
+ !defined(__timespec_defined)
+#define _STRUCT_TIMESPEC
+struct timespec {
+ time_t tv_sec;
+ long tv_nsec;
+};
+#endif /* !_STRUCT_TIMESPEC ... */
+
+/* OS X does not have clock_gettime */
+#define CLOCK_REALTIME 0
+int clock_gettime(clockid_t, struct timespec *);
+
+#endif /* !HAVE_CLOCK_GETTIME */
+
+#ifndef HAVE_STRLCAT
+
+#include <string.h>
+size_t strlcat(char *dst, const char *src, size_t size);
+
+#endif /* !HAVE_STRLCAT */
+
+#ifndef HAVE_STRLCPY
+
+#include <string.h>
+size_t strlcpy(char *dst, const char *src, size_t size);
+
+#endif /* !HAVE_STRLCPY */
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif /* _GPSD_OS_COMPAT_H_ */