diff options
| author | Michael Tuexen <tuexen@fh-muenster.de> | 2020-06-14 12:52:46 +0200 |
|---|---|---|
| committer | Michael Tuexen <tuexen@fh-muenster.de> | 2020-06-14 12:52:46 +0200 |
| commit | ee4199c91c0f15cceaaf566b1a91455d35b7ec00 (patch) | |
| tree | 1f4343bb5562b485fc5065b1bb583a60f387b566 /programs | |
| parent | eddbc5b58cd9932dada5f9548aff0ab651851a18 (diff) | |
Improve gettimeofday() on Windows (if it compiles).
Diffstat (limited to 'programs')
| -rw-r--r-- | programs/programs_helper.c | 19 |
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 |
