|
|
|
@ -21,6 +21,37 @@ Copyright 1990 Regents of the University of California. All rights reserved. |
|
|
|
*/ |
|
|
|
#undef BOOLEAN |
|
|
|
#include <windows.h> |
|
|
|
#ifndef HAVE_GETTIMEOFDAY |
|
|
|
#include <winsock2.h> |
|
|
|
#include <stdint.h> // portable: uint64_t MSVC: __int64 |
|
|
|
|
|
|
|
/*/ MSVC defines this in winsock2.h!? |
|
|
|
typedef struct timeval { |
|
|
|
long tv_sec; |
|
|
|
long tv_usec; |
|
|
|
} timeval; |
|
|
|
*/ |
|
|
|
int gettimeofday(struct timeval * tp, void * unused) |
|
|
|
{ |
|
|
|
// Note: some broken versions only have 8 trailing zero's, the correct epoch has 9 trailing zero's |
|
|
|
// This magic number is the number of 100 nanosecond intervals since January 1, 1601 (UTC) |
|
|
|
// until 00:00:00 January 1, 1970 |
|
|
|
static const uint64_t EPOCH = ((uint64_t) 116444736000000000ULL); |
|
|
|
|
|
|
|
SYSTEMTIME system_time; |
|
|
|
FILETIME file_time; |
|
|
|
uint64_t time; |
|
|
|
|
|
|
|
GetSystemTime( &system_time ); |
|
|
|
SystemTimeToFileTime( &system_time, &file_time ); |
|
|
|
time = ((uint64_t)file_time.dwLowDateTime ) ; |
|
|
|
time += ((uint64_t)file_time.dwHighDateTime) << 32; |
|
|
|
|
|
|
|
tp->tv_sec = (long) ((time - EPOCH) / 10000000L); |
|
|
|
tp->tv_usec = (long) (system_time.wMilliseconds * 1000); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|