msvcrt: correct use of GetTimeZoneInformation

Rein Klazes rklazes at xs4all.nl
Sun Oct 24 11:58:28 CDT 2004


Hi,

Changelog:
	msvcrt	: time.c
	msvcrt/tests	: time.c
	Correctly use the returned value from GetTimeZoneInformation

Rein.
-- 
Rein Klazes
rklazes at xs4all.nl
-------------- next part --------------
--- wine/dlls/msvcrt/time.c	2004-10-22 09:32:44.000000000 +0200
+++ mywine/dlls/msvcrt/time.c	2004-10-24 18:24:30.000000000 +0200
@@ -124,7 +124,7 @@
  
   tzid = GetTimeZoneInformation(&tzinfo);
 
-  if (tzid == TIME_ZONE_ID_UNKNOWN) {
+  if (tzid == TIME_ZONE_ID_UNKNOWN || tzid == TIME_ZONE_ID_INVALID) {
     tm.tm_isdst = -1;
   } else {
     tm.tm_isdst = (tzid == TIME_ZONE_ID_DAYLIGHT?1:0);
@@ -234,7 +234,9 @@
 
   buf->time = time / TICKSPERSEC - SECS_1601_TO_1970;
   buf->millitm = (time % TICKSPERSEC) / TICKSPERMSEC;
-  buf->timezone = tzinfo.Bias;
+  buf->timezone = tzinfo.Bias +
+      ( tzid == TIME_ZONE_ID_STANDARD ? tzinfo.StandardBias :
+      ( tzid == TIME_ZONE_ID_DAYLIGHT ? tzinfo.DaylightBias : 0 ));
   buf->dstflag = (tzid == TIME_ZONE_ID_DAYLIGHT?1:0);
 }
 
--- wine/dlls/msvcrt/tests/time.c	2004-08-26 10:24:48.000000000 +0200
+++ mywine/dlls/msvcrt/tests/time.c	2004-10-24 18:48:23.000000000 +0200
@@ -57,9 +57,11 @@
     char TZ_env[256];
     int secs;
 
-    ok (res != 0, "GetTimeZoneInformation faile\n");
+    ok (res != TIME_ZONE_ID_INVALID, "GetTimeZoneInformation failed\n");
     /* Bias may be positive or negative, to use offset of one day */
-    secs= SECSPERDAY - tzinfo.Bias*SECSPERMIN;
+    secs= SECSPERDAY - (tzinfo.Bias +
+      ( res == TIME_ZONE_ID_STANDARD ? tzinfo.StandardBias :
+      ( res == TIME_ZONE_ID_DAYLIGHT ? tzinfo.DaylightBias : 0 ))) * SECSPERMIN;
     my_tm.tm_mday = 1 + secs/SECSPERDAY;
     secs = secs % SECSPERDAY;
     my_tm.tm_hour = secs / SECSPERHOUR;
@@ -87,15 +89,19 @@
 {
     TIME_ZONE_INFORMATION tzinfo;
     DWORD res =  GetTimeZoneInformation(&tzinfo);
-    time_t gmt = (time_t)(SECSPERDAY + tzinfo.Bias*SECSPERMIN);
+    time_t gmt = (time_t)(SECSPERDAY + (tzinfo.Bias +
+      ( res == TIME_ZONE_ID_STANDARD ? tzinfo.StandardBias :
+      ( res == TIME_ZONE_ID_DAYLIGHT ? tzinfo.DaylightBias : 0 ))) * SECSPERMIN);
+
     char TZ_env[256];
     struct tm* lt;
     
-    ok (res != 0, "GetTimeZoneInformation faile\n");
+    ok (res != TIME_ZONE_ID_INVALID, "GetTimeZoneInformation failed\n");
     lt = localtime(&gmt);
     ok(((lt->tm_year == 70) && (lt->tm_mon  == 0) && (lt->tm_yday  == 1) &&
 	(lt->tm_mday ==  2) && (lt->tm_wday == 5) && (lt->tm_hour  == 0) &&
-	(lt->tm_min  ==  0) && (lt->tm_sec  == 0) && (lt->tm_isdst == 0)),
+	(lt->tm_min  ==  0) && (lt->tm_sec  == 0) && (lt->tm_isdst ==
+                                                      (res == TIME_ZONE_ID_DAYLIGHT))),
        "Wrong date:Year %4d mon %2d yday %3d mday %2d wday %1d hour%2d min %2d sec %2d dst %2d\n",
        lt->tm_year, lt->tm_mon, lt->tm_yday, lt->tm_mday, lt->tm_wday, lt->tm_hour, 
        lt->tm_min, lt->tm_sec, lt->tm_isdst); 
@@ -105,7 +111,8 @@
     lt = localtime(&gmt);
     ok(((lt->tm_year == 70) && (lt->tm_mon  == 0) && (lt->tm_yday  == 1) &&
 	(lt->tm_mday ==  2) && (lt->tm_wday == 5) && (lt->tm_hour  == 0) &&
-	(lt->tm_min  ==  0) && (lt->tm_sec  == 0) && (lt->tm_isdst == 0)),
+	(lt->tm_min  ==  0) && (lt->tm_sec  == 0) && (lt->tm_isdst ==
+                                                      (res == TIME_ZONE_ID_DAYLIGHT))),
        "Wrong date:Year %4d mon %2d yday %3d mday %2d wday %1d hour%2d min %2d sec %2d dst %2d\n",
        lt->tm_year, lt->tm_mon, lt->tm_yday, lt->tm_mday, lt->tm_wday, lt->tm_hour, 
        lt->tm_min, lt->tm_sec, lt->tm_isdst); 


More information about the wine-patches mailing list