this practice came from very early, before internal/syscall.h defined macros that could accept pointer arguments directly and handle them correctly. aside from being ugly and unnecessary, it looks like it will be problematic when we add support for 32-bit ABIs on archs where registers (and syscall arguments) are 64-bit, e.g. x32 and mips n32.
13 lines
361 B
C
13 lines
361 B
C
#include <time.h>
|
|
#include <limits.h>
|
|
#include "pthread_impl.h"
|
|
|
|
int timer_settime(timer_t t, int flags, const struct itimerspec *restrict val, struct itimerspec *restrict old)
|
|
{
|
|
if ((intptr_t)t < 0) {
|
|
pthread_t td = (void *)((uintptr_t)t << 1);
|
|
t = (void *)(uintptr_t)(td->timer_id & INT_MAX);
|
|
}
|
|
return syscall(SYS_timer_settime, t, flags, val, old);
|
|
}
|