Commit: d9810af45ae9e3cbd2c97543b5dfa2d7c93e81c1 Author: slayercat <llz916...@yahoo.com.cn> Wed, 23 May 2012 20:30:16 +0800 Committer: Xinchen Hui <larue...@php.net> Thu, 7 Jun 2012 14:28:05 +0800 Parents: c1ac3252288c2eeb0b9278458ad15e19912a945a Branches: PHP-5.3
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=d9810af45ae9e3cbd2c97543b5dfa2d7c93e81c1 Log: based on microsoft's description,the direct convert from FILETIME struct to __int64 is unsafe. via http://technet.microsoft.com/en-us/library/ms724284(v=vs.85).aspx "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." Changed paths: M win32/time.c Diff: diff --git a/win32/time.c b/win32/time.c index a376fd6..8b847b0 100644 --- a/win32/time.c +++ b/win32/time.c @@ -1,4 +1,3 @@ - /***************************************************************************** * * * DH_TIME.C * @@ -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; -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php