summaryrefslogtreecommitdiff
path: root/os_compat.h
diff options
context:
space:
mode:
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_ */