github.com/afumu/libc@v0.0.6/musl/src/time/clock_settime.c (about)

     1  #include <time.h>
     2  #include <errno.h>
     3  #include "syscall.h"
     4  
     5  #define IS32BIT(x) !((x)+0x80000000ULL>>32)
     6  
     7  int clock_settime(clockid_t clk, const struct timespec *ts)
     8  {
     9  #ifdef SYS_clock_settime64
    10  	time_t s = ts->tv_sec;
    11  	long ns = ts->tv_nsec;
    12  	int r = -ENOSYS;
    13  	if (SYS_clock_settime == SYS_clock_settime64 || !IS32BIT(s))
    14  		r = __syscall(SYS_clock_settime64, clk,
    15  			((long long[]){s, ns}));
    16  	if (SYS_clock_settime == SYS_clock_settime64 || r!=-ENOSYS)
    17  		return __syscall_ret(r);
    18  	if (!IS32BIT(s))
    19  		return __syscall_ret(-ENOTSUP);
    20  	return syscall(SYS_clock_settime, clk, ((long[]){s, ns}));
    21  #else
    22  	return syscall(SYS_clock_settime, clk, ts);
    23  #endif
    24  }