Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions win32/time.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

/*****************************************************************************
* *
* DH_TIME.C *
Expand Down Expand Up @@ -37,10 +36,21 @@ int getfilesystemtime(struct timeval *time_Info)
{
FILETIME ft;
__int64 ff;
ULARGE_INTEGER convFromft;

GetSystemTimeAsFileTime(&ft); /* 100 ns blocks since 01-Jan-1641 */
/* resolution seems to be 0.01 sec */
ff = *(__int64*)(&ft);
/* ff = *(__int64*)(&ft); */
/*
Do not cast a pointer to a FILETIME structure to either a
ULARGE_INTEGER* or __int64* value because it can cause alignment faults on 64-bit Windows.

via http://technet.microsoft.com/en-us/library/ms724284(v=vs.85).aspx
*/
convFromft.HighPart = ft.dwHighDateTime;
convFromft.LowPart = ft.dwLowDateTime;
ff = convFromft.QuadPart;

time_Info->tv_sec = (int)(ff/(__int64)10000000-(__int64)11644473600);
time_Info->tv_usec = (int)(ff % 10000000)/10;
return 0;
Expand Down