summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/time/__tz.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/time/__tz.c b/src/time/__tz.c
index 8a1836e7..81676d3b 100644
--- a/src/time/__tz.c
+++ b/src/time/__tz.c
@@ -190,7 +190,28 @@ static void do_tzset()
for (s = (const char *)zi+map_size-2; *s!='\n'; s--);
s++;
} else {
- s = 0;
+ const unsigned char *p;
+ __tzname[0] = __tzname[1] = 0;
+ __daylight = __timezone = dst_off = 0;
+ for (i=0; i<5; i++) r0[i] = r1[i] = 0;
+ for (p=types; p<abbrevs; p+=6) {
+ if (!p[4] && !__tzname[0]) {
+ __tzname[0] = (char *)abbrevs + p[5];
+ __timezone = -zi_read32(p);
+ }
+ if (p[4] && !__tzname[1]) {
+ __tzname[1] = (char *)abbrevs + p[5];
+ dst_off = -zi_read32(p);
+ __daylight = 1;
+ }
+ }
+ if (!__tzname[0]) __tzname[0] = __tzname[1];
+ if (!__tzname[0]) __tzname[0] = (char *)__gmt;
+ if (!__daylight) {
+ __tzname[1] = __tzname[0];
+ dst_off = __timezone;
+ }
+ return;
}
}