From ffe479736c4f18e3aeed17cc63ddff0a460b244f Mon Sep 17 00:00:00 2001 From: slayercat Date: Mon, 21 May 2012 21:33:45 -0700 Subject: [PATCH 1/3] via http://technet.microsoft.com/zh-cn/library/ms724284%28v=vs.85%29.aspx,microsoft --- win32/time.c | 1 - 1 file changed, 1 deletion(-) diff --git a/win32/time.c b/win32/time.c index a376fd61be0a..67f0143eb703 100644 --- a/win32/time.c +++ b/win32/time.c @@ -1,4 +1,3 @@ - /***************************************************************************** * * * DH_TIME.C * From a7ebe5f7b607c873dd226728d0f59cce389a3f1c Mon Sep 17 00:00:00 2001 From: slayercat Date: Tue, 22 May 2012 12:45:57 +0800 Subject: [PATCH 2/3] getfilesystemtime might cause alignment faults 64-bit Windows --- win32/time.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/win32/time.c b/win32/time.c index 67f0143eb703..d3de07fcbfa3 100644 --- a/win32/time.c +++ b/win32/time.c @@ -32,19 +32,31 @@ #include #include "php_win32_globals.h" + 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); + /* + 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/zh-cn/library/ms724284%28v=vs.85%29.aspx + */ + //ff = *(__int64*)(&ft); + 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; } + PHPAPI int gettimeofday(struct timeval *time_Info, struct timezone *timezone_Info) From e71a548fd98acf4a3a06d4006522c92fc08deb4b Mon Sep 17 00:00:00 2001 From: slayercat Date: Tue, 22 May 2012 12:46:44 +0800 Subject: [PATCH 3/3] Update win32/time.c --- win32/time.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win32/time.c b/win32/time.c index d3de07fcbfa3..5426c62830c4 100644 --- a/win32/time.c +++ b/win32/time.c @@ -46,7 +46,7 @@ ULARGE_INTEGER convFromft; via http://technet.microsoft.com/zh-cn/library/ms724284%28v=vs.85%29.aspx */ - //ff = *(__int64*)(&ft); + convFromft.HighPart=ft.dwHighDateTime; convFromft.LowPart=ft.dwLowDateTime; ff=convFromft.QuadPart;