diff options
Diffstat (limited to 'sysdeps/unix/sysv/linux/ntp_gettime.c')
-rw-r--r-- | sysdeps/unix/sysv/linux/ntp_gettime.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/sysdeps/unix/sysv/linux/ntp_gettime.c b/sysdeps/unix/sysv/linux/ntp_gettime.c index c8d6a19..8ce5d13 100644 --- a/sysdeps/unix/sysv/linux/ntp_gettime.c +++ b/sysdeps/unix/sysv/linux/ntp_gettime.c @@ -17,6 +17,7 @@ #define ntp_gettime ntp_gettime_redirect +#include <time.h> #include <sys/timex.h> #undef ntp_gettime @@ -25,17 +26,36 @@ # define modes mode #endif +/* clock_adjtime64 with CLOCK_REALTIME does not trigger EINVAL, + ENODEV, or EOPNOTSUPP. It might still trigger EPERM. */ int -ntp_gettime (struct ntptimeval *ntv) +__ntp_gettime64 (struct __ntptimeval64 *ntv) { - struct timex tntx; + struct __timex64 tntx; int result; tntx.modes = 0; - result = __adjtimex (&tntx); + result = __clock_adjtime64 (CLOCK_REALTIME, &tntx); ntv->time = tntx.time; ntv->maxerror = tntx.maxerror; ntv->esterror = tntx.esterror; return result; } + +#if __TIMESIZE != 64 +libc_hidden_def (__ntp_gettime64) + +int +__ntp_gettime (struct ntptimeval *ntv) +{ + struct __ntptimeval64 ntv64; + int result; + + result = __ntp_gettime64 (&ntv64); + *ntv = valid_ntptimeval64_to_ntptimeval (ntv64); + + return result; +} +#endif +strong_alias (__ntp_gettime, ntp_gettime) |