sys_macosx: don't require clock_gettime()
Earlier versions of macOS do not provide clock_gettime(). This patch checks for clock_gettime() at run-time and falls back to gettimeofday() if the symbol is not present.
This commit is contained in:
parent
552d3b53b1
commit
3eab329042
1 changed files with 33 additions and 0 deletions
33
sys_macosx.c
33
sys_macosx.c
|
@ -451,6 +451,39 @@ legacy_MacOSX_Finalise(void)
|
|||
|
||||
/* ================================================== */
|
||||
|
||||
#if HAVE_CLOCK_GETTIME
|
||||
int
|
||||
clock_gettime(clockid_t clock_id, struct timespec *ts)
|
||||
{
|
||||
/* Check that the system clock_gettime symbol is actually present before
|
||||
attempting to call it. The symbol is available in macOS 10.12
|
||||
and later. */
|
||||
|
||||
static int init = 0;
|
||||
static int (*sys_clock_gettime)(clockid_t, struct timespec *) = NULL;
|
||||
int ret = 0;
|
||||
|
||||
if (!init) {
|
||||
sys_clock_gettime = dlsym(RTLD_NEXT, "clock_gettime");
|
||||
init = 1;
|
||||
}
|
||||
|
||||
if (sys_clock_gettime != NULL) {
|
||||
ret = sys_clock_gettime(clock_id, ts);
|
||||
} else {
|
||||
struct timeval tv;
|
||||
|
||||
if (gettimeofday(&tv, NULL) < 0)
|
||||
LOG_FATAL("gettimeofday() failed : %s", strerror(errno));
|
||||
|
||||
UTI_TimevalToTimespec(&tv, ts);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* ================================================== */
|
||||
|
||||
void
|
||||
SYS_MacOSX_Initialise(void)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue