author | Rich Felker <dalias@aerifal.cx> | 2019年07月31日 00:26:16 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2019年08月02日 00:08:23 -0400 |
commit | 72f50245d018af0c31b38dec83c557a4e5dd1ea8 (patch) | |
tree | 1ccfc1efb5564d4240d3feb542a89d0e2e93b70c | |
parent | 2b4fd6f75b4fa66d28cddcf165ad48e8fda486d1 (diff) | |
download | musl-72f50245d018af0c31b38dec83c557a4e5dd1ea8.tar.gz |
-rw-r--r-- | src/time/clock_gettime.c | 19 |
diff --git a/src/time/clock_gettime.c b/src/time/clock_gettime.c index 8fd1b8f5..46083759 100644 --- a/src/time/clock_gettime.c +++ b/src/time/clock_gettime.c @@ -40,6 +40,24 @@ int __clock_gettime(clockid_t clk, struct timespec *ts) } #endif +#ifdef SYS_clock_gettime64 + if (sizeof(time_t) > 4) + r = __syscall(SYS_clock_gettime64, clk, ts); + if (SYS_clock_gettime == SYS_clock_gettime64 || r!=-ENOSYS) + return __syscall_ret(r); + long ts32[2]; + r = __syscall(SYS_clock_gettime, clk, ts32); + if (r==-ENOSYS && clk==CLOCK_REALTIME) { + r = __syscall(SYS_gettimeofday, ts32, 0); + ts32[1] *= 1000; + } + if (!r) { + ts->tv_sec = ts32[0]; + ts->tv_nsec = ts32[1]; + return r; + } + return __syscall_ret(r); +#else r = __syscall(SYS_clock_gettime, clk, ts); if (r == -ENOSYS) { if (clk == CLOCK_REALTIME) { @@ -50,6 +68,7 @@ int __clock_gettime(clockid_t clk, struct timespec *ts) r = -EINVAL; } return __syscall_ret(r); +#endif } weak_alias(__clock_gettime, clock_gettime); |