diff --git a/util.c b/util.c index 9c8a5fff..2fbe7c08 100644 --- a/util.c +++ b/util.c @@ -944,18 +944,27 @@ void cgtime(struct timeval *tv) #else /* Windows start time is since 1601 lol so convert it to unix epoch 1970. */ #define EPOCHFILETIME (116444736000000000LL) -void cgtime(struct timeval *tv) + +/* Return the system time as an lldiv_t in decimicroseconds. */ +static void decius_time(lldiv_t *lidiv) { FILETIME ft; LARGE_INTEGER li; - lldiv_t lidiv; GetSystemTimeAsFileTime(&ft); li.LowPart = ft.dwLowDateTime; li.HighPart = ft.dwHighDateTime; li.QuadPart -= EPOCHFILETIME; + /* SystemTime is in decimicroseconds so divide by an unusual number */ - lidiv = lldiv(li.QuadPart, 10000000); + *lidiv = lldiv(li.QuadPart, 10000000); +} + +void cgtime(struct timeval *tv) +{ + lldiv_t lidiv; + + decius_time(&lidiv); tv->tv_sec = lidiv.quot; tv->tv_usec = lidiv.rem / 10; }