summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/kit/time.h19
-rw-r--r--source/kit_test/shared.inl.h17
2 files changed, 34 insertions, 2 deletions
diff --git a/source/kit/time.h b/source/kit/time.h
index cf0f070..e6dcb4a 100644
--- a/source/kit/time.h
+++ b/source/kit/time.h
@@ -17,7 +17,24 @@
# endif
# include <Windows.h>
-static int timespec_get(struct timespec *ts, int base) { }
+static int timespec_get(struct timespec *ts, int base) {
+ if (ts == NULL || base != TIME_UTC)
+ return 0;
+
+ FILETIME ft;
+ ULARGE_INTEGER date;
+ LONGLONG ticks;
+
+ GetSystemTimeAsFileTime(&ft);
+ date.HighPart = ft.dwHighDateTime;
+ date.LowPart = ft.dwLowDateTime;
+ ticks = (LONGLONG) (date.QuadPart -
+ _TIMESPEC_IMPL_UNIX_EPOCH_IN_TICKS);
+ ts->tv_sec = ticks / _TIMESPEC_IMPL_TICKS_PER_SECONDS;
+ ts->tv_nsec = (ticks % _TIMESPEC_IMPL_TICKS_PER_SECONDS) * 100;
+
+ return base;
+}
#endif
#endif
diff --git a/source/kit_test/shared.inl.h b/source/kit_test/shared.inl.h
index 34ccb07..b96897c 100644
--- a/source/kit_test/shared.inl.h
+++ b/source/kit_test/shared.inl.h
@@ -22,7 +22,22 @@
# endif
# include <Windows.h>
-static int timespec_get(struct timespec *ts, int base) { }
+static int timespec_get(struct timespec *ts, int base) {
+ if (ts == NULL || base != TIME_UTC)
+ return 0;
+ FILETIME ft;
+ ULARGE_INTEGER date;
+ LONGLONG ticks;
+
+ GetSystemTimeAsFileTime(&ft);
+ date.HighPart = ft.dwHighDateTime;
+ date.LowPart = ft.dwLowDateTime;
+ ticks = (LONGLONG) (date.QuadPart -
+ _TIMESPEC_IMPL_UNIX_EPOCH_IN_TICKS);
+ ts->tv_sec = ticks / _TIMESPEC_IMPL_TICKS_PER_SECONDS;
+ ts->tv_nsec = (ticks % _TIMESPEC_IMPL_TICKS_PER_SECONDS) * 100;
+ return base;
+}
# endif
#endif // kit/time.h