diff --git a/newlib/ChangeLog b/newlib/ChangeLog index c01858381..350c93345 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,9 @@ +2011-06-14 Craig Howland + + * libc/time/tzset_r.c (tzset_r): Correct behavior for changing from + non-GMT to GMT, when un-setting TZ. Set _timezone and _daylight even + if no DST is given in TZ. + 2011-06-13 Eric Blake * libc/stdio/wsetup.c (__swsetup_r): Set errno on failure. diff --git a/newlib/libc/time/tzset_r.c b/newlib/libc/time/tzset_r.c index d8f5c667e..5a5a9599b 100644 --- a/newlib/libc/time/tzset_r.c +++ b/newlib/libc/time/tzset_r.c @@ -28,6 +28,8 @@ _DEFUN (_tzset_r, (reent_ptr), _daylight = 0; _tzname[0] = "GMT"; _tzname[1] = "GMT"; + free(prev_tzenv); + prev_tzenv = NULL; TZ_UNLOCK; return; } @@ -80,8 +82,10 @@ _DEFUN (_tzset_r, (reent_ptr), tzenv += n; if (sscanf (tzenv, "%10[^0-9,+-]%n", __tzname_dst, &n) <= 0) - { + { /* No dst */ _tzname[1] = _tzname[0]; + _timezone = tz->__tzrule[0].offset; + _daylight = 0; TZ_UNLOCK; return; }