Index: fusl/src/linux/adjtime.c |
diff --git a/fusl/src/linux/adjtime.c b/fusl/src/linux/adjtime.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fa8af9f021773f575989fb34b872699434cfe4cf |
--- /dev/null |
+++ b/fusl/src/linux/adjtime.c |
@@ -0,0 +1,27 @@ |
+#define _GNU_SOURCE |
+#include <sys/time.h> |
+#include <sys/timex.h> |
+#include <errno.h> |
+#include "syscall.h" |
+ |
+int adjtime(const struct timeval *in, struct timeval *out) |
+{ |
+ struct timex tx = { 0 }; |
+ if (in) { |
+ if (in->tv_sec > 1000 || in->tv_usec > 1000000000) { |
+ errno = EINVAL; |
+ return -1; |
+ } |
+ tx.offset = in->tv_sec*1000000 + in->tv_usec; |
+ tx.modes = ADJ_OFFSET_SINGLESHOT; |
+ } |
+ if (syscall(SYS_adjtimex, &tx) < 0) return -1; |
+ if (out) { |
+ out->tv_sec = tx.offset / 1000000; |
+ if ((out->tv_usec = tx.offset % 1000000) < 0) { |
+ out->tv_sec--; |
+ out->tv_usec += 1000000; |
+ } |
+ } |
+ return 0; |
+} |