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:
Bryan Christianson 2020-03-13 08:33:00 +13:00 committed by Miroslav Lichvar
parent 552d3b53b1
commit 3eab329042

View file

@ -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)
{