Merge from coreutils.
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 16 Aug 2003 05:38:25 +0000 (05:38 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 16 Aug 2003 05:38:25 +0000 (05:38 +0000)
lib/strftime.c
m4/strftime.m4
modules/strftime

index b15dfa9..490b099 100644 (file)
@@ -492,25 +492,11 @@ static CHAR_T const month_name[][10] =
 # define ns 0
 #endif
 
 # define ns 0
 #endif
 
-#if !defined _LIBC && HAVE_TZNAME && HAVE_TZSET
-  /* Solaris 2.5 tzset sometimes modifies the storage returned by localtime.
-     Work around this bug by copying *tp before it might be munged.  */
-  size_t _strftime_copytm __P ((char *, size_t, const char *,
-                               const struct tm * extra_args_spec_iso));
-  size_t
-  my_strftime (s, maxsize, format, tp extra_args)
-      CHAR_T *s;
-      size_t maxsize;
-      const CHAR_T *format;
-      const struct tm *tp;
-      extra_args_spec
-  {
-    struct tm tmcopy;
-    tmcopy = *tp;
-    return _strftime_copytm (s, maxsize, format, &tmcopy extra_args);
-  }
-# undef my_strftime
-# define my_strftime _strftime_copytm
+#if ! defined _LIBC && ! HAVE_RUN_TZSET_TEST
+/* Solaris 2.5.x and 2.6 tzset sometimes modify the storage returned
+   by localtime.  On such systems, we must use the tzset and localtime
+   wrappers to work around the bug.  */
+"you must run the autoconf test for a working tzset function"
 #endif
 
 
 #endif
 
 
@@ -614,7 +600,7 @@ my_strftime (s, maxsize, format, tp extra_args LOCALE_PARAM)
       int pad = 0;             /* Padding for number ('-', '_', or 0).  */
       int modifier;            /* Field modifier ('E', 'O', or 0).  */
       int digits;              /* Max digits for numeric format.  */
       int pad = 0;             /* Padding for number ('-', '_', or 0).  */
       int modifier;            /* Field modifier ('E', 'O', or 0).  */
       int digits;              /* Max digits for numeric format.  */
-      int number_value;        /* Numeric value to be printed.  */
+      int number_value;                /* Numeric value to be printed.  */
       int negative_number;     /* 1 if the number is negative.  */
       const CHAR_T *subfmt;
       CHAR_T *bufp;
       int negative_number;     /* 1 if the number is negative.  */
       const CHAR_T *subfmt;
       CHAR_T *bufp;
@@ -1028,7 +1014,7 @@ my_strftime (s, maxsize, format, tp extra_args LOCALE_PARAM)
            do
              *--bufp = u % 10 + L_('0');
            while ((u /= 10) != 0);
            do
              *--bufp = u % 10 + L_('0');
            while ((u /= 10) != 0);
-         }
+         }
 
        do_number_sign_and_padding:
          if (negative_number)
 
        do_number_sign_and_padding:
          if (negative_number)
@@ -1170,13 +1156,17 @@ my_strftime (s, maxsize, format, tp extra_args LOCALE_PARAM)
          goto subformat;
 
        case L_('r'):
          goto subformat;
 
        case L_('r'):
-#ifdef _NL_CURRENT
+#if !defined _NL_CURRENT && HAVE_STRFTIME
+         goto underlying_strftime;
+#else
+# ifdef _NL_CURRENT
          if (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME,
                                                       NLW(T_FMT_AMPM)))
              == L_('\0'))
          if (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME,
                                                       NLW(T_FMT_AMPM)))
              == L_('\0'))
-#endif
+# endif
            subfmt = L_("%I:%M:%S %p");
          goto subformat;
            subfmt = L_("%I:%M:%S %p");
          goto subformat;
+#endif
 
        case L_('S'):
          if (modifier == L_('E'))
 
        case L_('S'):
          if (modifier == L_('E'))
@@ -1185,7 +1175,7 @@ my_strftime (s, maxsize, format, tp extra_args LOCALE_PARAM)
          DO_NUMBER (2, tp->tm_sec);
 
        case L_('s'):           /* GNU extension.  */
          DO_NUMBER (2, tp->tm_sec);
 
        case L_('s'):           /* GNU extension.  */
-         {
+         {
            struct tm ltm;
            time_t t;
 
            struct tm ltm;
            time_t t;
 
index d1f0a33..84a1996 100644 (file)
@@ -1,4 +1,4 @@
-#serial 19
+#serial 20
 
 dnl This macro is intended to be used solely in this file.
 dnl These are the prerequisite macros for GNU's strftime.c replacement.
 
 dnl This macro is intended to be used solely in this file.
 dnl These are the prerequisite macros for GNU's strftime.c replacement.
@@ -18,6 +18,7 @@ AC_DEFUN([_jm_STRFTIME_PREREQS],
  AC_TYPE_MBSTATE_T
 
  AC_REQUIRE([gl_TM_GMTOFF])
  AC_TYPE_MBSTATE_T
 
  AC_REQUIRE([gl_TM_GMTOFF])
+ AC_REQUIRE([gl_FUNC_TZSET_CLOBBER])
 ])
 
 dnl From Jim Meyering.
 ])
 
 dnl From Jim Meyering.
index 4d28e3f..4d2d9f9 100644 (file)
@@ -8,6 +8,7 @@ m4/tm_gmtoff.m4
 m4/strftime.m4
 
 Depends-on:
 m4/strftime.m4
 
 Depends-on:
+tzset
 
 configure.ac:
 jm_FUNC_GNU_STRFTIME
 
 configure.ac:
 jm_FUNC_GNU_STRFTIME