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