compat: provide a win32 specific version of timespec_get
authorSteve Lhomme <robux4@ycbcr.xyz>
Tue, 15 May 2018 12:35:52 +0000 (14:35 +0200)
committerSteve Lhomme <robux4@ycbcr.xyz>
Tue, 15 May 2018 16:34:30 +0000 (18:34 +0200)
On mingw64 clock_gettime() is defined in winpthread which we don't want to use.

This implementation is based on the winpthread internal processing.

compat/timespec_get.c

index 350e912..fb9adca 100644 (file)
 # include <config.h>
 #endif
 
+#ifdef _WIN32
+#include <windows.h>
+
+int timespec_get(struct timespec *ts, int base)
+{
+    FILETIME ft;
+    ULARGE_INTEGER s;
+    ULONGLONG t;
+
+    if (base != TIME_UTC)
+        return 0;
+
+    GetSystemTimeAsFileTime(&ft);
+    s.LowPart = ft.dwLowDateTime;
+    s.HighPart = ft.dwHighDateTime;
+    t = s.QuadPart - 116444736000000000ULL;
+    ts->tv_sec = t / 10000000;
+    ts->tv_nsec = ((int) (t % 10000000)) * 100;
+    return base;
+}
+#else /* !_WIN32 */
+
 #include <time.h>
 #include <unistd.h> /* _POSIX_TIMERS */
 #ifndef _POSIX_TIMERS
@@ -58,3 +80,4 @@ int timespec_get(struct timespec *ts, int base)
     }
     return base;
 }
+#endif /* !_WIN32 */