X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Fcompat%2Ftime.hpp;fp=src%2Fcommon%2Fcompat%2Ftime.hpp;h=37f472a4aad1378d95542fde0f258132b76c368c;hb=7532fa3bd22e403958f46cd35c824f490d93292d;hp=0000000000000000000000000000000000000000;hpb=985aea182b618c85c51651f224abedfe367c75ee;p=lttng-tools.git diff --git a/src/common/compat/time.hpp b/src/common/compat/time.hpp new file mode 100644 index 000000000..37f472a4a --- /dev/null +++ b/src/common/compat/time.hpp @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2016 Michael Jeanson + * + * SPDX-License-Identifier: MIT + * + */ + +#ifndef _COMPAT_TIME_H +#define _COMPAT_TIME_H + +#include + +#ifdef __APPLE__ + +typedef uint64_t timer_t; + +#include +#include +#include + +#undef NSEC_PER_SEC +#undef NSEC_PER_MSEC +#undef NSEC_PER_USEC +#undef USEC_PER_SEC + +#endif /* __APPLE__ */ + +/* macOS/OS X 10.12 (Sierra) and up provide clock_gettime() */ +#if defined(__APPLE__) && !defined(LTTNG_HAVE_CLOCK_GETTIME) + +typedef int clockid_t; +#define CLOCK_REALTIME CALENDAR_CLOCK +#define CLOCK_MONOTONIC SYSTEM_CLOCK + +static inline +int lttng_clock_gettime(clockid_t clk_id, struct timespec *tp) +{ + int ret = 0; + clock_serv_t clock; + mach_timespec_t now; + + if (clk_id != CLOCK_REALTIME && clk_id != CLOCK_MONOTONIC) { + ret = -1; + errno = EINVAL; + goto end; + } + + host_get_clock_service(mach_host_self(), clk_id, &clock); + + ret = clock_get_time(clock, &now); + if (ret != KERN_SUCCESS) { + ret = -1; + goto deallocate; + } + + tp->tv_sec = now.tv_sec; + tp->tv_nsec = now.tv_nsec; + +deallocate: + mach_port_deallocate(mach_task_self(), clock); +end: + return ret; +} + +#else /* __APPLE__ && !LTTNG_HAVE_CLOCK_GETTIME */ + +static inline +int lttng_clock_gettime(clockid_t clk_id, struct timespec *tp) +{ + return clock_gettime(clk_id, tp); +} + +#endif /* __APPLE__ && !LTTNG_HAVE_CLOCK_GETTIME */ + +#endif /* _COMPAT_TIME_H */