Abstract out the conversion of system time to an lldiv_t in decimicroseconds.
diff --git a/util.c b/util.c
index 9c8a5ff..2fbe7c0 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;
}