OLD | NEW |
1 #define _GNU_SOURCE | 1 #define _GNU_SOURCE |
2 #include <sys/time.h> | 2 #include <sys/time.h> |
3 #include <sys/timex.h> | 3 #include <sys/timex.h> |
4 #include <errno.h> | 4 #include <errno.h> |
5 #include "syscall.h" | 5 #include "syscall.h" |
6 | 6 |
7 int adjtime(const struct timeval *in, struct timeval *out) | 7 int adjtime(const struct timeval* in, struct timeval* out) { |
8 { | 8 struct timex tx = {0}; |
9 » struct timex tx = { 0 }; | 9 if (in) { |
10 » if (in) { | 10 if (in->tv_sec > 1000 || in->tv_usec > 1000000000) { |
11 » » if (in->tv_sec > 1000 || in->tv_usec > 1000000000) { | 11 errno = EINVAL; |
12 » » » errno = EINVAL; | 12 return -1; |
13 » » » return -1; | 13 } |
14 » » } | 14 tx.offset = in->tv_sec * 1000000 + in->tv_usec; |
15 » » tx.offset = in->tv_sec*1000000 + in->tv_usec; | 15 tx.modes = ADJ_OFFSET_SINGLESHOT; |
16 » » tx.modes = ADJ_OFFSET_SINGLESHOT; | 16 } |
17 » } | 17 if (syscall(SYS_adjtimex, &tx) < 0) |
18 » if (syscall(SYS_adjtimex, &tx) < 0) return -1; | 18 return -1; |
19 » if (out) { | 19 if (out) { |
20 » » out->tv_sec = tx.offset / 1000000; | 20 out->tv_sec = tx.offset / 1000000; |
21 » » if ((out->tv_usec = tx.offset % 1000000) < 0) { | 21 if ((out->tv_usec = tx.offset % 1000000) < 0) { |
22 » » » out->tv_sec--; | 22 out->tv_sec--; |
23 » » » out->tv_usec += 1000000; | 23 out->tv_usec += 1000000; |
24 » » } | 24 } |
25 » } | 25 } |
26 » return 0; | 26 return 0; |
27 } | 27 } |
OLD | NEW |