summaryrefslogtreecommitdiff
path: root/programs
diff options
context:
space:
mode:
authorMichael Tuexen <tuexen@fh-muenster.de>2020-06-14 12:52:46 +0200
committerMichael Tuexen <tuexen@fh-muenster.de>2020-06-14 12:52:46 +0200
commitee4199c91c0f15cceaaf566b1a91455d35b7ec00 (patch)
tree1f4343bb5562b485fc5065b1bb583a60f387b566 /programs
parenteddbc5b58cd9932dada5f9548aff0ab651851a18 (diff)
Improve gettimeofday() on Windows (if it compiles).
Diffstat (limited to 'programs')
-rw-r--r--programs/programs_helper.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/programs/programs_helper.c b/programs/programs_helper.c
index 72f239b..bbcd2d8 100644
--- a/programs/programs_helper.c
+++ b/programs/programs_helper.c
@@ -23,11 +23,20 @@
static void
gettimeofday(struct timeval *tv, void *ignore)
{
- struct timeb tb;
-
- ftime(&tb);
- tv->tv_sec = (long)tb.time;
- tv->tv_usec = (long)(tb.millitm) * 1000L;
+ FILETIME file_time;
+ ULARGE_INTEGER ularge;
+
+ GetSystemTimeAsFileTime(&file_time);
+ ularge.LowPart = file_time.dwLowDateTime;
+ ularge.HighPart = file_time.dwHighDateTime;
+ /* Change base from Jan 1 1601 00:00:00 to Jan 1 1970 00:00:00 */
+ ularge.QuadPart -= 116444736000000000UI64;
+ /*
+ * ularge.QuadPart is now the number of 100-nanosecond intervals
+ * since Jan 1 1970 00:00:00.
+ */
+ tv->tv_sec = (long)(ularge.QuadPart / 10000000UI64);
+ tv->tv_usec = (long)((ularge.QuadPart % 10000000UI64) / 10UI64);
}
#endif