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

Reply via email to