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