bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 6/6] strftime: fix newly-introduced bug on Solaris


From: Paul Eggert
Subject: [PATCH 6/6] strftime: fix newly-introduced bug on Solaris
Date: Sat, 25 Jul 2015 18:21:58 -0700

* 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.
---
 ChangeLog      |  8 ++++++++
 lib/strftime.c | 13 +++++--------
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 230c646..9787fda 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2015-07-25  Paul Eggert  <address@hidden>
 
+       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>.
diff --git a/lib/strftime.c b/lib/strftime.c
index 3cc8477..c7cec26 100644
--- a/lib/strftime.c
+++ b/lib/strftime.c
@@ -481,7 +481,12 @@ strftime_case_ (bool upcase, STREAM_OR_CHAR_T *s,
       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;
@@ -1304,14 +1309,6 @@ strftime_case_ (bool upcase, STREAM_OR_CHAR_T *s,
               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
-- 
2.1.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]