mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-03 16:55:07 -05:00
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:
committed by
Miroslav Lichvar
parent
552d3b53b1
commit
3eab329042
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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user