* lib/strftime.c (strftime_case_): Set the local variable 'zone'
consistently at the start, rather than doing some of the setup at
the start and some in the %Z format spec. This is cleaner, and
works better with time_rz on platforms like Solaris where struct
tm lacks a tm_zone member, as when !HAVE_TM_GMTOFF %z's calls to
mktime_z and localtime_rz can mess up the tzname cache.
2015-07-25 Paul Eggert <eggert@cs.ucla.edu>
+ strftime: fix newly-introduced bug on Solaris
+ * lib/strftime.c (strftime_case_): Set the local variable 'zone'
+ consistently at the start, rather than doing some of the setup at
+ the start and some in the %Z format spec. This is cleaner, and
+ works better with time_rz on platforms like Solaris where struct
+ tm lacks a tm_zone member, as when !HAVE_TM_GMTOFF %z's calls to
+ mktime_z and localtime_rz can mess up the tzname cache.
+
test-strftime: test for Solaris bug
* modules/strftime-tests (Depends-on): Add strerror.
* tests/test-strftime.c: Include <errno.h>.
tzset ();
# endif
}
+ /* The tzset() call might have changed the value. */
+ if (!(zone && *zone) && tp->tm_isdst >= 0)
+ zone = tzname[tp->tm_isdst != 0];
#endif
+ if (! zone)
+ zone = "";
if (hour12 > 12)
hour12 -= 12;
to_lowcase = true;
}
-#if HAVE_TZNAME
- /* The tzset() call might have changed the value. */
- if (!(zone && *zone) && tp->tm_isdst >= 0)
- zone = tzname[tp->tm_isdst != 0];
-#endif
- if (! zone)
- zone = "";
-
#ifdef COMPILE_WIDE
{
/* The zone string is always given in multibyte form. We have