[PATCH 2/4] kernel32: Simplify TIME_CompTimeZoneID() by passing time as LONGLONG.

Huw Davies huw at codeweavers.com
Wed May 15 05:45:50 CDT 2019


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/kernel32/time.c | 52 ++++++++++++++++++++------------------------
 1 file changed, 24 insertions(+), 28 deletions(-)

diff --git a/dlls/kernel32/time.c b/dlls/kernel32/time.c
index e7f5f0e326..8805c81aaa 100644
--- a/dlls/kernel32/time.c
+++ b/dlls/kernel32/time.c
@@ -146,7 +146,7 @@ static int TIME_DayLightCompareDate( const SYSTEMTIME *date,
  *
  *  PARAMS
  *      pTZinfo     [in] The time zone data.
- *      lpFileTime  [in] The system or local time.
+ *      time        [in] The system or local time.
  *      islocal     [in] it is local time.
  *
  *  RETURNS
@@ -156,14 +156,13 @@ static int TIME_DayLightCompareDate( const SYSTEMTIME *date,
  *      TIME_ZONE_ID_DAYLIGHT   Current time is daylight savings time
  */
 static DWORD TIME_CompTimeZoneID ( const TIME_ZONE_INFORMATION *pTZinfo,
-    FILETIME *lpFileTime, BOOL islocal )
+                                   LONGLONG time, BOOL islocal )
 {
     int ret, year;
     BOOL beforeStandardDate, afterDaylightDate;
     DWORD retval = TIME_ZONE_ID_INVALID;
-    LONGLONG llTime = 0; /* initialized to prevent gcc complaining */
     SYSTEMTIME SysTime;
-    FILETIME ftTemp;
+    FILETIME ft;
 
     if (pTZinfo->DaylightDate.wMonth != 0)
     {
@@ -181,20 +180,17 @@ static DWORD TIME_CompTimeZoneID ( const TIME_ZONE_INFORMATION *pTZinfo,
             return TIME_ZONE_ID_INVALID;
         }
 
-        if (!islocal) {
-            llTime = filetime_to_longlong( lpFileTime );
-            llTime -= pTZinfo->Bias * (LONGLONG)600000000;
-            longlong_to_filetime( llTime, &ftTemp );
-            lpFileTime = &ftTemp;
-        }
+        if (!islocal)
+            time -= pTZinfo->Bias * (LONGLONG)600000000;
 
-        FileTimeToSystemTime(lpFileTime, &SysTime);
+        longlong_to_filetime( time, &ft );
+        FileTimeToSystemTime( &ft, &SysTime );
         year = SysTime.wYear;
 
         if (!islocal) {
-            llTime -= pTZinfo->DaylightBias * (LONGLONG)600000000;
-            longlong_to_filetime( llTime, &ftTemp );
-            FileTimeToSystemTime(lpFileTime, &SysTime);
+            time -= pTZinfo->DaylightBias * (LONGLONG)600000000;
+            longlong_to_filetime( time, &ft );
+            FileTimeToSystemTime( &ft, &SysTime );
         }
 
         /* check for daylight savings */
@@ -208,14 +204,13 @@ static DWORD TIME_CompTimeZoneID ( const TIME_ZONE_INFORMATION *pTZinfo,
             beforeStandardDate = SysTime.wYear < year;
 
         if (!islocal) {
-            llTime -= ( pTZinfo->StandardBias - pTZinfo->DaylightBias )
-                * (LONGLONG)600000000;
-            longlong_to_filetime( llTime, &ftTemp );
-            FileTimeToSystemTime(lpFileTime, &SysTime);
+            time -= ( pTZinfo->StandardBias - pTZinfo->DaylightBias ) * (LONGLONG)600000000;
+            longlong_to_filetime( time, &ft );
+            FileTimeToSystemTime( &ft, &SysTime );
         }
 
         if(year == SysTime.wYear) {
-            ret = TIME_DayLightCompareDate( &SysTime, &pTZinfo->DaylightDate);
+            ret = TIME_DayLightCompareDate( &SysTime, &pTZinfo->DaylightDate );
             if (ret == -2)
                 return TIME_ZONE_ID_INVALID;
 
@@ -224,7 +219,7 @@ static DWORD TIME_CompTimeZoneID ( const TIME_ZONE_INFORMATION *pTZinfo,
             afterDaylightDate = SysTime.wYear > year;
 
         retval = TIME_ZONE_ID_STANDARD;
-        if( pTZinfo->DaylightDate.wMonth <  pTZinfo->StandardDate.wMonth ) {
+        if( pTZinfo->DaylightDate.wMonth < pTZinfo->StandardDate.wMonth ) {
             /* Northern hemisphere */
             if( beforeStandardDate && afterDaylightDate )
                 retval = TIME_ZONE_ID_DAYLIGHT;
@@ -254,9 +249,10 @@ static DWORD TIME_CompTimeZoneID ( const TIME_ZONE_INFORMATION *pTZinfo,
  */
 static DWORD TIME_ZoneID( const TIME_ZONE_INFORMATION *pTzi )
 {
-    FILETIME ftTime;
-    GetSystemTimeAsFileTime( &ftTime);
-    return TIME_CompTimeZoneID( pTzi, &ftTime, FALSE);
+    LARGE_INTEGER now;
+
+    NtQuerySystemTime( &now );
+    return TIME_CompTimeZoneID( pTzi, now.QuadPart, FALSE );
 }
 
 /***********************************************************************
@@ -266,7 +262,7 @@ static DWORD TIME_ZoneID( const TIME_ZONE_INFORMATION *pTzi )
  *
  * PARAMS
  *  pTZinfo    [in]  The time zone data.
- *  lpFileTime [in]  The system or local time.
+ *  time       [in]  The system or local time.
  *  islocal    [in]  It is local time.
  *  pBias      [out] The calculated bias in minutes.
  *
@@ -274,10 +270,10 @@ static DWORD TIME_ZoneID( const TIME_ZONE_INFORMATION *pTzi )
  *  TRUE when the time zone bias was calculated.
  */
 static BOOL TIME_GetTimezoneBias( const TIME_ZONE_INFORMATION *pTZinfo,
-    FILETIME *lpFileTime, BOOL islocal, LONG *pBias )
+                                  LONGLONG time, BOOL islocal, LONG *pBias )
 {
     LONG bias = pTZinfo->Bias;
-    DWORD tzid = TIME_CompTimeZoneID( pTZinfo, lpFileTime, islocal);
+    DWORD tzid = TIME_CompTimeZoneID( pTZinfo, time, islocal );
 
     if( tzid == TIME_ZONE_ID_INVALID)
         return FALSE;
@@ -700,7 +696,7 @@ BOOL WINAPI SystemTimeToTzSpecificLocalTime(
     if (!SystemTimeToFileTime(lpUniversalTime, &ft))
         return FALSE;
     llTime = filetime_to_longlong( &ft );
-    if (!TIME_GetTimezoneBias(&tzinfo, &ft, FALSE, &lBias))
+    if (!TIME_GetTimezoneBias(&tzinfo, llTime, FALSE, &lBias))
         return FALSE;
     /* convert minutes to 100-nanoseconds-ticks */
     llTime -= (LONGLONG)lBias * 600000000;
@@ -745,7 +741,7 @@ BOOL WINAPI TzSpecificLocalTimeToSystemTime(
     if (!SystemTimeToFileTime(lpLocalTime, &ft))
         return FALSE;
     t = filetime_to_longlong( &ft );
-    if (!TIME_GetTimezoneBias(&tzinfo, &ft, TRUE, &lBias))
+    if (!TIME_GetTimezoneBias(&tzinfo, t, TRUE, &lBias))
         return FALSE;
     /* convert minutes to 100-nanoseconds-ticks */
     t += (LONGLONG)lBias * 600000000;
-- 
2.17.1




More information about the wine-devel mailing list