diff options
author | Fred Wright <fw@fwright.net> | 2017-01-22 00:11:34 -0800 |
---|---|---|
committer | Fred Wright <fw@fwright.net> | 2017-01-22 14:02:55 -0800 |
commit | cb1403d842a2fdbe6109eaf48acb7a494f30784d (patch) | |
tree | eacc95e6c39338950688aa5473c84619ebeeb555 /os_compat.h | |
parent | 0fbb94143ec4a5baf569b09937b28d4339cc8a00 (diff) | |
download | gpsd-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.h | 67 |
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_ */ |