Commit ad1f7851 authored by Christopher Dykes's avatar Christopher Dykes Committed by Facebook Github Bot 1

Listen to the Windows docs in portability/SysTime.cpp

Summary:As-per the documenation of FILETIME:

"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."

Reviewed By: yfeldblum

Differential Revision: D2989434

fb-gh-sync-id: cf57d569a785e0eb7225b346730bf2ed4c50dc55
shipit-source-id: cf57d569a785e0eb7225b346730bf2ed4c50dc55
parent 3a152643
...@@ -26,8 +26,13 @@ int gettimeofday(timeval* tv, timezone*) { ...@@ -26,8 +26,13 @@ int gettimeofday(timeval* tv, timezone*) {
if (tv) { if (tv) {
FILETIME ft; FILETIME ft;
ULARGE_INTEGER lft;
GetSystemTimeAsFileTime(&ft); GetSystemTimeAsFileTime(&ft);
uint64_t ns = *(uint64_t*)&ft; // As per the docs of FILETIME, don't just do an indirect
// pointer cast, to avoid alignment faults.
lft.HighPart = ft.dwHighDateTime;
lft.LowPart = ft.dwLowDateTime;
uint64_t ns = lft.QuadPart;
tv->tv_usec = (long)((ns / 10ULL) % 1000000ULL); tv->tv_usec = (long)((ns / 10ULL) % 1000000ULL);
tv->tv_sec = (long)((ns - posixWinFtOffset) / 10000000ULL); tv->tv_sec = (long)((ns - posixWinFtOffset) / 10000000ULL);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment