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