diff options
Diffstat (limited to 'libc/sysdeps/linux/common/settimeofday.c')
-rw-r--r-- | libc/sysdeps/linux/common/settimeofday.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/libc/sysdeps/linux/common/settimeofday.c b/libc/sysdeps/linux/common/settimeofday.c index 7e508aea0..e6b396e15 100644 --- a/libc/sysdeps/linux/common/settimeofday.c +++ b/libc/sysdeps/linux/common/settimeofday.c @@ -8,12 +8,36 @@ */ #include <sys/syscall.h> -#include <sys/time.h> #ifdef __USE_BSD +# include <sys/time.h> +# ifdef __NR_settimeofday +_syscall2(int, settimeofday, const struct timeval *, tv, + const struct timezone *, tz) +# elif defined __USE_SVID && defined __NR_stime +# define __need_NULL +# include <stddef.h> +# include <errno.h> +# include <time.h> +int settimeofday(const struct timeval *tv, const struct timezone *tz) +{ + time_t when; + if (tv == NULL) { + __set_errno(EINVAL); + return -1; + } -_syscall2(int, settimeofday, const struct timeval *, tv, - const struct timezone *, tz) + if (tz != NULL || tv->tv_usec % 1000000 != 0) { + __set_errno(ENOSYS); + return -1; + } + + when = tv->tv_sec + (tv->tv_usec / 1000000); + return stime(&when); +} +# endif +# if defined __NR_settimeofday || (defined __USE_SVID && defined __NR_stime) libc_hidden_def(settimeofday) +# endif #endif |