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