From d8e2a43712ded92856809a247abf0825e68c2307 Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Thu, 22 Aug 2013 12:55:09 +1000 Subject: [PATCH] Abstract out the conversion of system time to an lldiv_t in decimicroseconds. --- util.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) 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; }