From cb1403d842a2fdbe6109eaf48acb7a494f30784d Mon Sep 17 00:00:00 2001 From: Fred Wright Date: Sun, 22 Jan 2017 00:11:34 -0800 Subject: 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 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. --- os_compat.h | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 os_compat.h (limited to 'os_compat.h') 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 + +#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 +size_t strlcat(char *dst, const char *src, size_t size); + +#endif /* !HAVE_STRLCAT */ + +#ifndef HAVE_STRLCPY + +#include +size_t strlcpy(char *dst, const char *src, size_t size); + +#endif /* !HAVE_STRLCPY */ + +# ifdef __cplusplus +} +# endif + +#endif /* _GPSD_OS_COMPAT_H_ */ -- cgit v1.2.1