Browse Source

Abstract out the conversion of system time to an lldiv_t in decimicroseconds.

Con Kolivas 12 years ago
parent
commit
f965108b0e
1 changed files with 12 additions and 3 deletions
  1. 12 3
      util.c

+ 12 - 3
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;
 }