time: fix incorrect DST offset when using POSIX timezones without DST
authorA. Wilcox <AWilcox@Wilcox-Tech.com>
Mon, 27 Aug 2018 23:17:20 +0000 (18:17 -0500)
committerRich Felker <dalias@aerifal.cx>
Mon, 27 Aug 2018 23:55:56 +0000 (19:55 -0400)
This manifests itself in mktime if tm_isdst = 1 and the current TZ= is
a POSIX timezone specification. mktime would see that tm_isdst was set
to 0 by __secs_to_zone, and subtract 'oppoff' (dst_off) - gmtoff from
the resultant time. This meant that mktime returned a time that was
exactly double the GMT offset of the desired timezone when tm_isdst
was = 1.

src/time/__tz.c

index 1dbb0b8ffd428bc520f1054e98206611a5734a5c..814edcdf68f8ef91e372e1fe0e8d78af3e533e83 100644 (file)
@@ -230,7 +230,7 @@ static void do_tzset()
                        dst_off = __timezone - 3600;
        } else {
                __daylight = 0;
-               dst_off = 0;
+               dst_off = __timezone;
        }
 
        if (*s == ',') s++, getrule(&s, r0);