Kamil Dudka 79b09b
From 67defe5a29936c20a2c102b1b947ce9ea9afc081 Mon Sep 17 00:00:00 2001
Kamil Dudka 79b09b
From: Paul Eggert <eggert@cs.ucla.edu>
Kamil Dudka 79b09b
Date: Tue, 23 Jan 2018 00:42:04 -0800
Kamil Dudka 79b09b
Subject: [PATCH] Merge strftime.c changes from glibc
Kamil Dudka 79b09b
Kamil Dudka 79b09b
This incorporates:
Kamil Dudka 79b09b
2017-11-14 [BZ #10871] Implement alternative month names
Kamil Dudka 79b09b
2017-11-14 [BZ #10871] Abbreviated alternative month names (%Ob)
Kamil Dudka 79b09b
2017-06-20 Use locale_t, not __locale_t, throughout glibc
Kamil Dudka 79b09b
* lib/nstrftime.c (ABALTMON_1) [!COMPILE_WIDE]: New macro.
Kamil Dudka 79b09b
(LOCALE_PARAM) [_LIBC && USE_IN_EXTENDED_LOCALE_MODEL]:
Kamil Dudka 79b09b
Use locale_t, not __locale_t.
Kamil Dudka 79b09b
(a_altmonth, f_altmonth, aam_len) [_NL_CURRENT]: New macros.
Kamil Dudka 79b09b
(__strftime_internal): Add support for alternate months.
Kamil Dudka 79b09b
Kamil Dudka 79b09b
Upstream-commit: 4a236f16ce0ef97094ff2f6538d4dba90e72a523
Kamil Dudka 79b09b
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
Kamil Dudka 79b09b
---
Kamil Dudka 79b09b
 lib/nstrftime.c | 24 +++++++++++++++++++-----
Kamil Dudka 79b09b
 1 file changed, 19 insertions(+), 5 deletions(-)
Kamil Dudka 79b09b
Kamil Dudka 79b09b
diff --git a/lib/nstrftime.c b/lib/nstrftime.c
Kamil Dudka 79b09b
index 8795cd7..5902c49 100644
Kamil Dudka 79b09b
--- a/lib/nstrftime.c
Kamil Dudka 79b09b
+++ b/lib/nstrftime.c
Kamil Dudka 79b09b
@@ -91,6 +91,7 @@ extern char *tzname[];
Kamil Dudka 79b09b
 # define UCHAR_T unsigned char
Kamil Dudka 79b09b
 # define L_(Str) Str
Kamil Dudka 79b09b
 # define NLW(Sym) Sym
Kamil Dudka 79b09b
+# define ABALTMON_1 _NL_ABALTMON_1
Kamil Dudka 79b09b
 
Kamil Dudka 79b09b
 # define MEMCPY(d, s, n) memcpy (d, s, n)
Kamil Dudka 79b09b
 # define STRLEN(s) strlen (s)
Kamil Dudka 79b09b
@@ -255,7 +256,7 @@ extern char *tzname[];
Kamil Dudka 79b09b
 # undef _NL_CURRENT
Kamil Dudka 79b09b
 # define _NL_CURRENT(category, item) \
Kamil Dudka 79b09b
   (current->values[_NL_ITEM_INDEX (item)].string)
Kamil Dudka 79b09b
-# define LOCALE_PARAM , __locale_t loc
Kamil Dudka 79b09b
+# define LOCALE_PARAM , locale_t loc
Kamil Dudka 79b09b
 # define LOCALE_ARG , loc
Kamil Dudka 79b09b
 # define HELPER_LOCALE_ARG  , current
Kamil Dudka 79b09b
 #else
Kamil Dudka 79b09b
@@ -475,12 +476,19 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
Kamil Dudka 79b09b
 # define f_month \
Kamil Dudka 79b09b
   ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11                       \
Kamil Dudka 79b09b
                      ? "?" : _NL_CURRENT (LC_TIME, NLW(MON_1) + tp->tm_mon)))
Kamil Dudka 79b09b
+# define a_altmonth \
Kamil Dudka 79b09b
+  ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11                       \
Kamil Dudka 79b09b
+                     ? "?" : _NL_CURRENT (LC_TIME, NLW(ABALTMON_1) + tp->tm_mon)))
Kamil Dudka 79b09b
+# define f_altmonth \
Kamil Dudka 79b09b
+  ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11                       \
Kamil Dudka 79b09b
+                     ? "?" : _NL_CURRENT (LC_TIME, NLW(ALTMON_1) + tp->tm_mon)))
Kamil Dudka 79b09b
 # define ampm \
Kamil Dudka 79b09b
   ((const CHAR_T *) _NL_CURRENT (LC_TIME, tp->tm_hour > 11                    \
Kamil Dudka 79b09b
                                  ? NLW(PM_STR) : NLW(AM_STR)))
Kamil Dudka 79b09b
 
Kamil Dudka 79b09b
 # define aw_len STRLEN (a_wkday)
Kamil Dudka 79b09b
 # define am_len STRLEN (a_month)
Kamil Dudka 79b09b
+# define aam_len STRLEN (a_altmonth)
Kamil Dudka 79b09b
 # define ap_len STRLEN (ampm)
Kamil Dudka 79b09b
 #endif
Kamil Dudka 79b09b
 #if HAVE_TZNAME
Kamil Dudka 79b09b
@@ -808,17 +816,20 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
Kamil Dudka 79b09b
               to_uppcase = true;
Kamil Dudka 79b09b
               to_lowcase = false;
Kamil Dudka 79b09b
             }
Kamil Dudka 79b09b
-          if (modifier != 0)
Kamil Dudka 79b09b
+          if (modifier == L_('E'))
Kamil Dudka 79b09b
             goto bad_format;
Kamil Dudka 79b09b
 #ifdef _NL_CURRENT
Kamil Dudka 79b09b
-          cpy (am_len, a_month);
Kamil Dudka 79b09b
+          if (modifier == L_('O'))
Kamil Dudka 79b09b
+            cpy (aam_len, a_altmonth);
Kamil Dudka 79b09b
+          else
Kamil Dudka 79b09b
+            cpy (am_len, a_month);
Kamil Dudka 79b09b
           break;
Kamil Dudka 79b09b
 #else
Kamil Dudka 79b09b
           goto underlying_strftime;
Kamil Dudka 79b09b
 #endif
Kamil Dudka 79b09b
 
Kamil Dudka 79b09b
         case L_('B'):
Kamil Dudka 79b09b
-          if (modifier != 0)
Kamil Dudka 79b09b
+          if (modifier == L_('E'))
Kamil Dudka 79b09b
             goto bad_format;
Kamil Dudka 79b09b
           if (change_case)
Kamil Dudka 79b09b
             {
Kamil Dudka 79b09b
@@ -826,7 +837,10 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
Kamil Dudka 79b09b
               to_lowcase = false;
Kamil Dudka 79b09b
             }
Kamil Dudka 79b09b
 #ifdef _NL_CURRENT
Kamil Dudka 79b09b
-          cpy (STRLEN (f_month), f_month);
Kamil Dudka 79b09b
+          if (modifier == L_('O'))
Kamil Dudka 79b09b
+            cpy (STRLEN (f_altmonth), f_altmonth);
Kamil Dudka 79b09b
+          else
Kamil Dudka 79b09b
+            cpy (STRLEN (f_month), f_month);
Kamil Dudka 79b09b
           break;
Kamil Dudka 79b09b
 #else
Kamil Dudka 79b09b
           goto underlying_strftime;
Kamil Dudka 79b09b
-- 
Kamil Dudka 79b09b
2.14.3
Kamil Dudka 79b09b