From 558c01338b0b635632e70af6ec8a484ca70b0328 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 29 Jul 2019 20:57:05 -0400 Subject: setitimer, getitimer: decouple time_t from long these functions have no new time64 syscall, so the existence of a time64 syscall cannot be used as the condition for the new code. instead, assume the syscall takes timevals as longs, which is true everywhere but x32, and interface with the kernel through long[4] objects. rather than adding new hacks to special-case x32 here, just add x32-specific source files since a trivial syscall wrapper suffices there. the new code paths added in this commit are statically unreachable on all current archs, but will become reachable when 32-bit archs get 64-bit time_t. --- src/signal/getitimer.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/signal/getitimer.c') diff --git a/src/signal/getitimer.c b/src/signal/getitimer.c index 8a8046a7..36d1eb9d 100644 --- a/src/signal/getitimer.c +++ b/src/signal/getitimer.c @@ -3,5 +3,16 @@ int getitimer(int which, struct itimerval *old) { + if (sizeof(time_t) > sizeof(long)) { + long old32[4]; + int r = __syscall(SYS_getitimer, which, old32); + if (!r) { + old->it_interval.tv_sec = old32[0]; + old->it_interval.tv_usec = old32[1]; + old->it_value.tv_sec = old32[2]; + old->it_value.tv_usec = old32[3]; + } + return __syscall_ret(r); + } return syscall(SYS_getitimer, which, old); } -- cgit v1.2.1