unofficial mirror of libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v8 0/2] strftime: Improve the width of alternative representation for year [BZ #23758][BZ #24096]
@ 2019-01-20  8:44 TAMUKI Shoichi
  2019-01-20  8:47 ` [PATCH v8 1/2] strftime: Set the default width of "%Ey" to 2 [BZ #23758] TAMUKI Shoichi
  2019-01-20  8:52 ` [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096] TAMUKI Shoichi
  0 siblings, 2 replies; 10+ messages in thread
From: TAMUKI Shoichi @ 2019-01-20  8:44 UTC (permalink / raw)
  To: libc-alpha

Hello,

This is the new set of patches.  I have split the patch into 2 parts.

Changes include:

Patch 1: strftime: Set the default width of "%Ey" to 2
Patch 2: strftime: Pass the additional flags from "%EY" to "%Ey"

Regards,
TAMUKI Shoichi

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v8 1/2] strftime: Set the default width of "%Ey" to 2 [BZ #23758]
  2019-01-20  8:44 [PATCH v8 0/2] strftime: Improve the width of alternative representation for year [BZ #23758][BZ #24096] TAMUKI Shoichi
@ 2019-01-20  8:47 ` TAMUKI Shoichi
  2019-01-21 17:03   ` Rafal Luzynski
  2019-01-20  8:52 ` [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096] TAMUKI Shoichi
  1 sibling, 1 reply; 10+ messages in thread
From: TAMUKI Shoichi @ 2019-01-20  8:47 UTC (permalink / raw)
  To: libc-alpha

In Japanese locales, strftime's alternative year format (%Ey) produces
a year numbered within a time period called an _era_.  A new era
typically begins when a new emperor is enthroned.  The result of "%Ey"
is therefore usually a one- or two-digit number.

Many programs that display Japanese era dates assume that the era year
is two digits wide.  To improve how these programs display dates
during the first nine years of a new era, change "%Ey" to pad one-
digit numbers on the left with a zero.  This change applies to all
locales.  It is expected to be harmless for other locales that use the
alternative year format (e.g. lo_LA and th_TH, in which "%Ey" produces
the year of the Buddhist calendar) as those calendars' year numbers
are already more than two digits wide, and this is not expected to
change.

This change needs to be in place before 2019-05-01 CE, as a new era is
scheduled to begin on that date.

ChangeLog:

	[BZ #23758]
	* manual/time.texi (strftime): Document "%Ey".
	* time/strftime_l.c (__strftime_internal): Set the default width
	padding with zero of "%Ey" to 2.
---
 NEWS              | 8 ++++++++
 manual/time.texi  | 7 +++++++
 time/strftime_l.c | 2 +-
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index cc20102fda..06e64ddb48 100644
--- a/NEWS
+++ b/NEWS
@@ -52,6 +52,14 @@ Major new features:
     - C-SKY ABIV2 soft-float little-endian
     - C-SKY ABIV2 hard-float little-endian
 
+* strftime's default formatting of a locale's alternative year (%Ey)
+  has been changed to zero-pad the year to a minimum of two digits,
+  like "%y".  This improves the display of Japanese era years during
+  the first nine years of a new era, and is expected to be harmless
+  for all other locales (only Japanese locales regularly have
+  alternative year numbers less than 10).  Zero-padding can be
+  overridden with the '_' or '-' flags (which are GNU extensions).
+
 Deprecated and removed features, and other changes affecting compatibility:
 
 * The glibc.tune tunable namespace has been renamed to glibc.cpu and the
diff --git a/manual/time.texi b/manual/time.texi
index fd7781c531..03a8a0e10f 100644
--- a/manual/time.texi
+++ b/manual/time.texi
@@ -1568,6 +1568,13 @@ The preferred time of day representation for the current locale.
 The year without a century as a decimal number (range @code{00} through
 @code{99}).  This is equivalent to the year modulo 100.
 
+If the @code{E} modifier is specified (@code{%Ey}), instead produces
+the year number according to a locale-specific alternative calendar.
+Unlike @code{%y}, the number is @emph{not} reduced modulo 100.
+However, by default it is zero-padded to a minimum of two digits (this
+can be overridden by an explicit field width or by the @code{_} and
+@code{-} flags).
+
 @item %Y
 The year as a decimal number, using the Gregorian calendar.  Years
 before the year @code{1} are numbered @code{0}, @code{-1}, and so on.
diff --git a/time/strftime_l.c b/time/strftime_l.c
index 7ba4179de3..cbe08e7afb 100644
--- a/time/strftime_l.c
+++ b/time/strftime_l.c
@@ -1294,7 +1294,7 @@ __strftime_internal (CHAR_T *s, size_t maxsize, const CHAR_T *format,
 	      if (era)
 		{
 		  int delta = tp->tm_year - era->start_date[0];
-		  DO_NUMBER (1, (era->offset
+		  DO_NUMBER (2, (era->offset
 				 + delta * era->absolute_direction));
 		}
 #else
-- 
2.12.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096]
  2019-01-20  8:44 [PATCH v8 0/2] strftime: Improve the width of alternative representation for year [BZ #23758][BZ #24096] TAMUKI Shoichi
  2019-01-20  8:47 ` [PATCH v8 1/2] strftime: Set the default width of "%Ey" to 2 [BZ #23758] TAMUKI Shoichi
@ 2019-01-20  8:52 ` TAMUKI Shoichi
  2019-01-21 17:23   ` Rafal Luzynski
  1 sibling, 1 reply; 10+ messages in thread
From: TAMUKI Shoichi @ 2019-01-20  8:52 UTC (permalink / raw)
  To: libc-alpha

The full representation of the alternative calendar year (%EY)
typically includes an internal use of "%Ey".  As a GNU extension,
apply any flags on "%EY" (e.g. "%_EY", "%-EY") to the internal "%Ey",
allowing users of "%EY" to control how the year is padded.

ChangeLog:

	[BZ #24096]
	* manual/time.texi (strftime): Document "%EC" and "%EY".
	* time/Makefile (tests): Add tst-strftime2.
	(LOCALES): Add ja_JP.UTF-8, lo_LA.UTF-8, and th_TH.UTF-8.
	* time/strftime_l.c (__strftime_internal): Add argument yr_spec to
	override padding for "%Ey".
	If an optional flag ('_' or '-') is specified to "%EY", interpret the
	"%Ey" in the subformat as if decorated with that flag.
	* time/tst-strftime2.c: New file.
---
 NEWS                 |   4 ++
 manual/time.texi     |  11 +++++
 time/Makefile        |   5 +-
 time/strftime_l.c    |  19 +++++---
 time/tst-strftime2.c | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 162 insertions(+), 9 deletions(-)
 create mode 100644 time/tst-strftime2.c

diff --git a/NEWS b/NEWS
index 06e64ddb48..53aee00db8 100644
--- a/NEWS
+++ b/NEWS
@@ -60,6 +60,10 @@ Major new features:
   alternative year numbers less than 10).  Zero-padding can be
   overridden with the '_' or '-' flags (which are GNU extensions).
 
+* As a GNU extension, the '_' and '-' flags can now be applied to
+  "%EY" to control how the year number is formatted; they have the
+  same effect that they would on "%Ey".
+
 Deprecated and removed features, and other changes affecting compatibility:
 
 * The glibc.tune tunable namespace has been renamed to glibc.cpu and the
diff --git a/manual/time.texi b/manual/time.texi
index 03a8a0e10f..4c93854170 100644
--- a/manual/time.texi
+++ b/manual/time.texi
@@ -1393,6 +1393,10 @@ The preferred calendar time representation for the current locale.
 The century of the year.  This is equivalent to the greatest integer not
 greater than the year divided by 100.
 
+If the @code{E} modifier is specified (@code{%EC}), instead produces
+the name of the period for the year (e.g. an era name) in the locale's
+alternative calendar.
+
 This format was first standardized by POSIX.2-1992 and by @w{ISO C99}.
 
 @item %d
@@ -1579,6 +1583,13 @@ can be overridden by an explicit field width or by the @code{_} and
 The year as a decimal number, using the Gregorian calendar.  Years
 before the year @code{1} are numbered @code{0}, @code{-1}, and so on.
 
+If the @code{E} modifier is specified (@code{%EY}), instead produces a
+complete representation of the year according to the locale's
+alternative calendar.  Generally this will be some combination of the
+information produced by @code{%EC} and @code{Ey}.  As a GNU extension,
+the formatting flags @code{_} or @code{-} may be used with this
+conversion specifier; they affect how the year number is printed.
+
 @item %z
 @w{RFC 822}/@w{ISO 8601:1988} style numeric time zone (e.g.,
 @code{-0600} or @code{+0100}), or nothing if no time zone is
diff --git a/time/Makefile b/time/Makefile
index d23ba2dee6..5c6304ece1 100644
--- a/time/Makefile
+++ b/time/Makefile
@@ -43,13 +43,14 @@ tests	:= test_time clocktest tst-posixtz tst-strptime tst_wcsftime \
 	   tst-getdate tst-mktime tst-mktime2 tst-ftime_l tst-strftime \
 	   tst-mktime3 tst-strptime2 bug-asctime bug-asctime_r bug-mktime1 \
 	   tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime \
-	   tst-tzname tst-y2039 bug-mktime4
+	   tst-tzname tst-y2039 bug-mktime4 tst-strftime2
 
 include ../Rules
 
 ifeq ($(run-built-tests),yes)
 LOCALES := de_DE.ISO-8859-1 en_US.ISO-8859-1 ja_JP.EUC-JP fr_FR.UTF-8 \
-	   es_ES.UTF-8 pl_PL.UTF-8 ru_RU.UTF-8
+	   es_ES.UTF-8 pl_PL.UTF-8 ru_RU.UTF-8 \
+	   ja_JP.UTF-8 lo_LA.UTF-8 th_TH.UTF-8
 include ../gen-locales.mk
 
 $(objpfx)tst-ftime_l.out: $(gen-locales)
diff --git a/time/strftime_l.c b/time/strftime_l.c
index cbe08e7afb..3d937d3ffd 100644
--- a/time/strftime_l.c
+++ b/time/strftime_l.c
@@ -434,7 +434,7 @@ static CHAR_T const month_name[][10] =
 #endif
 
 static size_t __strftime_internal (CHAR_T *, size_t, const CHAR_T *,
-				   const struct tm *, bool *
+				   const struct tm *, int, bool *
 				   ut_argument_spec
 				   LOCALE_PARAM) __THROW;
 
@@ -456,8 +456,9 @@ my_strftime (CHAR_T *s, size_t maxsize, const CHAR_T *format,
   tmcopy = *tp;
   tp = &tmcopy;
 #endif
+  int yr_spec = 0;		/* Override padding for "%Ey".  */
   bool tzset_called = false;
-  return __strftime_internal (s, maxsize, format, tp, &tzset_called
+  return __strftime_internal (s, maxsize, format, tp, yr_spec, &tzset_called
 			      ut_argument LOCALE_ARG);
 }
 #ifdef _LIBC
@@ -466,7 +467,7 @@ libc_hidden_def (my_strftime)
 
 static size_t
 __strftime_internal (CHAR_T *s, size_t maxsize, const CHAR_T *format,
-		     const struct tm *tp, bool *tzset_called
+		     const struct tm *tp, int yr_spec, bool *tzset_called
 		     ut_argument_spec LOCALE_PARAM)
 {
 #if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL
@@ -838,11 +839,11 @@ __strftime_internal (CHAR_T *s, size_t maxsize, const CHAR_T *format,
 	  {
 	    CHAR_T *old_start = p;
 	    size_t len = __strftime_internal (NULL, (size_t) -1, subfmt,
-					      tp, tzset_called ut_argument
-					      LOCALE_ARG);
+					      tp, yr_spec, tzset_called
+					      ut_argument LOCALE_ARG);
 	    add (len, __strftime_internal (p, maxsize - i, subfmt,
-					   tp, tzset_called ut_argument
-					   LOCALE_ARG));
+					   tp, yr_spec, tzset_called
+					   ut_argument LOCALE_ARG));
 
 	    if (to_uppcase)
 	      while (old_start < p)
@@ -1273,6 +1274,8 @@ __strftime_internal (CHAR_T *s, size_t maxsize, const CHAR_T *format,
 # else
 		  subfmt = era->era_format;
 # endif
+		  if (pad != 0)
+		    yr_spec = pad;
 		  goto subformat;
 		}
 #else
@@ -1294,6 +1297,8 @@ __strftime_internal (CHAR_T *s, size_t maxsize, const CHAR_T *format,
 	      if (era)
 		{
 		  int delta = tp->tm_year - era->start_date[0];
+		  if (yr_spec != 0)
+		    pad = yr_spec;
 		  DO_NUMBER (2, (era->offset
 				 + delta * era->absolute_direction));
 		}
diff --git a/time/tst-strftime2.c b/time/tst-strftime2.c
new file mode 100644
index 0000000000..57d2144c83
--- /dev/null
+++ b/time/tst-strftime2.c
@@ -0,0 +1,132 @@
+/* Verify the behavior of strftime on alternative representation for
+   year.
+
+   Copyright (C) 2019 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <array_length.h>
+#include <locale.h>
+#include <time.h>
+#include <stdio.h>
+#include <string.h>
+
+static const char *locales[] = { "ja_JP.UTF-8", "lo_LA.UTF-8", "th_TH.UTF-8" };
+
+static const char *formats[] = { "%EY", "%_EY", "%-EY" };
+
+static const struct
+{
+  const int d, m, y;
+} dates[] =
+  {
+    { 1, 3, 88 },
+    { 7, 0, 89 },
+    { 8, 0, 89 },
+    { 1, 3, 90 },
+    { 1, 3, 97 },
+    { 1, 3, 98 }
+  };
+
+static char ref[3][3][6][100];
+
+static void
+mkreftable (void)
+{
+  int i, j, k;
+  char era[10];
+  static const int yrj[] = { 63, 64, 1, 2, 9, 10 };
+  static const int yrb[] = { 2531, 2532, 2532, 2533, 2540, 2541 };
+
+  for (i = 0; i < array_length (locales); i++)
+    for (j = 0; j < array_length (formats); j++)
+      for (k = 0; k < array_length (dates); k++)
+	{
+	  if (i == 0)
+	    {
+	      sprintf (era, "%s", (k < 2) ? "\xe6\x98\xad\xe5\x92\x8c"
+					  : "\xe5\xb9\xb3\xe6\x88\x90");
+	      if (yrj[k] == 1)
+		sprintf (ref[i][j][k], "%s\xe5\x85\x83\xe5\xb9\xb4", era);
+	      else
+		{
+		  if (j == 0)
+		    sprintf (ref[i][j][k], "%s%02d\xe5\xb9\xb4", era, yrj[k]);
+		  else if (j == 1)
+		    sprintf (ref[i][j][k], "%s%2d\xe5\xb9\xb4", era, yrj[k]);
+		  else
+		    sprintf (ref[i][j][k], "%s%d\xe5\xb9\xb4", era, yrj[k]);
+		}
+	    }
+	  else if (i == 1)
+	    {
+	      sprintf (era, "\xe0\xba\x9e\x2e\xe0\xba\xaa\x2e ");
+	      sprintf (ref[i][j][k], "%s%d", era, yrb[k]);
+	    }
+	  else
+	    {
+	      sprintf (era, "\xe0\xb8\x9e\x2e\xe0\xb8\xa8\x2e ");
+	      sprintf (ref[i][j][k], "%s%d", era, yrb[k]);
+	    }
+	}
+}
+
+static int
+do_test (void)
+{
+  int i, j, k, result = 0;
+  struct tm ttm;
+  char date[11], buf[100];
+  size_t r, e;
+
+  mkreftable ();
+  for (i = 0; i < array_length (locales); i++)
+    {
+      if (setlocale (LC_ALL, locales[i]) == NULL)
+	{
+	  printf ("locale %s does not exist, skipping...\n", locales[i]);
+	  continue;
+	}
+      printf ("[%s]\n", locales[i]);
+      for (j = 0; j < array_length (formats); j++)
+	{
+	  for (k = 0; k < array_length (dates); k++)
+	    {
+	      ttm.tm_mday = dates[k].d;
+	      ttm.tm_mon  = dates[k].m;
+	      ttm.tm_year = dates[k].y;
+	      strftime (date, sizeof (date), "%F", &ttm);
+	      r = strftime (buf, sizeof (buf), formats[j], &ttm);
+	      e = strlen (ref[i][j][k]);
+	      printf ("%s\t\"%s\"\t\"%s\"", date, formats[j], buf);
+	      if (strcmp (buf, ref[i][j][k]) != 0)
+		{
+		  printf ("\tshould be \"%s\"", ref[i][j][k]);
+		  if (r != e)
+		    printf ("\tgot: %zu, expected: %zu", r, e);
+		  result = 1;
+		}
+	      else
+		printf ("\tOK");
+	      putchar ('\n');
+	    }
+	  putchar ('\n');
+	}
+    }
+  return result;
+}
+
+#include <support/test-driver.c>
-- 
2.12.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v8 1/2] strftime: Set the default width of "%Ey" to 2 [BZ #23758]
  2019-01-20  8:47 ` [PATCH v8 1/2] strftime: Set the default width of "%Ey" to 2 [BZ #23758] TAMUKI Shoichi
@ 2019-01-21 17:03   ` Rafal Luzynski
  2019-01-22  1:38     ` TAMUKI Shoichi
  0 siblings, 1 reply; 10+ messages in thread
From: Rafal Luzynski @ 2019-01-21 17:03 UTC (permalink / raw)
  To: TAMUKI Shoichi, libc-alpha

20.01.2019 09:47 TAMUKI Shoichi <tamuki@linet.gr.jp> wrote:
> 
> In Japanese locales, strftime's alternative year format (%Ey) produces
> [...]

It is OK for me to use the plural form ("Japanese locales").

I don't quote the rest of your patch as it is correct IMO.
I would like to hear the final "OK" from Zack or Paul or
someone else who confirms that the documentation is correct.
I suggest to wait a while to give them a chance to reply and
to push this patch either when they say OK or when you decide
that they are unresponsive.

Thank you for working on this.

Regards,

Rafal

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096]
  2019-01-20  8:52 ` [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096] TAMUKI Shoichi
@ 2019-01-21 17:23   ` Rafal Luzynski
  2019-01-22  1:40     ` TAMUKI Shoichi
  0 siblings, 1 reply; 10+ messages in thread
From: Rafal Luzynski @ 2019-01-21 17:23 UTC (permalink / raw)
  To: TAMUKI Shoichi, libc-alpha

20.01.2019 09:52 TAMUKI Shoichi <tamuki@linet.gr.jp> wrote:
> 
> The full representation of the alternative calendar year (%EY)
> typically includes an internal use of "%Ey".  As a GNU extension,
> apply any flags on "%EY" (e.g. "%_EY", "%-EY") to the internal "%Ey",
> allowing users of "%EY" to control how the year is padded.
> 
> ChangeLog:
> 
> 	[BZ #24096]
> 	* manual/time.texi (strftime): Document "%EC" and "%EY".
> 	* time/Makefile (tests): Add tst-strftime2.
> 	(LOCALES): Add ja_JP.UTF-8, lo_LA.UTF-8, and th_TH.UTF-8.
> 	* time/strftime_l.c (__strftime_internal): Add argument yr_spec to
> 	override padding for "%Ey".
> 	If an optional flag ('_' or '-') is specified to "%EY", interpret the
> 	"%Ey" in the subformat as if decorated with that flag.
> 	* time/tst-strftime2.c: New file.
> ---
>  NEWS                 |   4 ++
>  manual/time.texi     |  11 +++++
>  time/Makefile        |   5 +-
>  time/strftime_l.c    |  19 +++++---
>  time/tst-strftime2.c | 132
> +++++++++++++++++++++++++++++++++++++++++++++++++++
>  5 files changed, 162 insertions(+), 9 deletions(-)
>  create mode 100644 time/tst-strftime2.c
> 
> diff --git a/NEWS b/NEWS
> index 06e64ddb48..53aee00db8 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -60,6 +60,10 @@ Major new features:
>    alternative year numbers less than 10).  Zero-padding can be
>    overridden with the '_' or '-' flags (which are GNU extensions).
>  
> +* As a GNU extension, the '_' and '-' flags can now be applied to
> +  "%EY" to control how the year number is formatted; they have the
> +  same effect that they would on "%Ey".
> +
>  Deprecated and removed features, and other changes affecting
> compatibility:

I believe this is OK so far.

>  * The glibc.tune tunable namespace has been renamed to glibc.cpu and the
> diff --git a/manual/time.texi b/manual/time.texi
> index 03a8a0e10f..4c93854170 100644
> --- a/manual/time.texi
> +++ b/manual/time.texi
> @@ -1393,6 +1393,10 @@ The preferred calendar time representation for the
> current locale.
>  The century of the year.  This is equivalent to the greatest integer not
>  greater than the year divided by 100.
>  
> +If the @code{E} modifier is specified (@code{%EC}), instead produces
> +the name of the period for the year (e.g. an era name) in the locale's
> +alternative calendar.
> +

"e.g." should be "e.g.@:".  It is important to use "@:" to mark that this
dot is not the end of a sentence and thus control the space width.

>  This format was first standardized by POSIX.2-1992 and by @w{ISO C99}.
>  
>  @item %d
> @@ -1579,6 +1583,13 @@ can be overridden by an explicit field width or by
> the @code{_} and
>  The year as a decimal number, using the Gregorian calendar.  Years
>  before the year @code{1} are numbered @code{0}, @code{-1}, and so on.
>  
> +If the @code{E} modifier is specified (@code{%EY}), instead produces a
> +complete representation of the year according to the locale's
> +alternative calendar.  Generally this will be some combination of the
> +information produced by @code{%EC} and @code{Ey}.  As a GNU extension,
> +the formatting flags @code{_} or @code{-} may be used with this
> +conversion specifier; they affect how the year number is printed.
> +
>  @item %z
>  @w{RFC 822}/@w{ISO 8601:1988} style numeric time zone (e.g.,
>  @code{-0600} or @code{+0100}), or nothing if no time zone is

I believe this is OK but as I've found more issues (see below) I don't
spend much time on the documentation review.

> diff --git a/time/Makefile b/time/Makefile
> index d23ba2dee6..5c6304ece1 100644
> --- a/time/Makefile
> +++ b/time/Makefile
> @@ -43,13 +43,14 @@ tests	:= test_time clocktest tst-posixtz tst-strptime
> tst_wcsftime \
>  	   tst-getdate tst-mktime tst-mktime2 tst-ftime_l tst-strftime \
>  	   tst-mktime3 tst-strptime2 bug-asctime bug-asctime_r bug-mktime1 \
>  	   tst-strptime3 bug-getdate1 tst-strptime-whitespace tst-ftime \
> -	   tst-tzname tst-y2039 bug-mktime4
> +	   tst-tzname tst-y2039 bug-mktime4 tst-strftime2
>  
>  include ../Rules
>  
>  ifeq ($(run-built-tests),yes)
>  LOCALES := de_DE.ISO-8859-1 en_US.ISO-8859-1 ja_JP.EUC-JP fr_FR.UTF-8 \
> -	   es_ES.UTF-8 pl_PL.UTF-8 ru_RU.UTF-8
> +	   es_ES.UTF-8 pl_PL.UTF-8 ru_RU.UTF-8 \
> +	   ja_JP.UTF-8 lo_LA.UTF-8 th_TH.UTF-8
>  include ../gen-locales.mk
>  
>  $(objpfx)tst-ftime_l.out: $(gen-locales)

OK

> diff --git a/time/strftime_l.c b/time/strftime_l.c
> index cbe08e7afb..3d937d3ffd 100644
> --- a/time/strftime_l.c
> +++ b/time/strftime_l.c
> @@ -434,7 +434,7 @@ static CHAR_T const month_name[][10] =
>  #endif
>  
>  static size_t __strftime_internal (CHAR_T *, size_t, const CHAR_T *,
> -				   const struct tm *, bool *
> +				   const struct tm *, int, bool *
>  				   ut_argument_spec
>  				   LOCALE_PARAM) __THROW;
>  

OK

> @@ -456,8 +456,9 @@ my_strftime (CHAR_T *s, size_t maxsize, const CHAR_T
> *format,
>    tmcopy = *tp;
>    tp = &tmcopy;
>  #endif
> +  int yr_spec = 0;		/* Override padding for "%Ey".  */

I think that you don't need this variable now.

>    bool tzset_called = false;
> -  return __strftime_internal (s, maxsize, format, tp, &tzset_called
> +  return __strftime_internal (s, maxsize, format, tp, yr_spec,
> &tzset_called

Consequently, you can pass 0 instead of yr_spec here.

>  			      ut_argument LOCALE_ARG);
>  }
>  #ifdef _LIBC
> @@ -466,7 +467,7 @@ libc_hidden_def (my_strftime)
>  
>  static size_t
>  __strftime_internal (CHAR_T *s, size_t maxsize, const CHAR_T *format,
> -		     const struct tm *tp, bool *tzset_called
> +		     const struct tm *tp, int yr_spec, bool *tzset_called
>  		     ut_argument_spec LOCALE_PARAM)
>  {
>  #if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL
> @@ -838,11 +839,11 @@ __strftime_internal (CHAR_T *s, size_t maxsize,
> const CHAR_T *format,
>  	  {
>  	    CHAR_T *old_start = p;
>  	    size_t len = __strftime_internal (NULL, (size_t) -1, subfmt,
> -					      tp, tzset_called ut_argument
> -					      LOCALE_ARG);
> +					      tp, yr_spec, tzset_called
> +					      ut_argument LOCALE_ARG);
>  	    add (len, __strftime_internal (p, maxsize - i, subfmt,
> -					   tp, tzset_called ut_argument
> -					   LOCALE_ARG));
> +					   tp, yr_spec, tzset_called
> +					   ut_argument LOCALE_ARG));
>  
>  	    if (to_uppcase)
>  	      while (old_start < p)
> @@ -1273,6 +1274,8 @@ __strftime_internal (CHAR_T *s, size_t maxsize,
> const CHAR_T *format,
>  # else
>  		  subfmt = era->era_format;
>  # endif
> +		  if (pad != 0)
> +		    yr_spec = pad;
>  		  goto subformat;
>  		}
>  #else
> @@ -1294,6 +1297,8 @@ __strftime_internal (CHAR_T *s, size_t maxsize,
> const CHAR_T *format,
>  	      if (era)
>  		{
>  		  int delta = tp->tm_year - era->start_date[0];
> +		  if (yr_spec != 0)
> +		    pad = yr_spec;
>  		  DO_NUMBER (2, (era->offset
>  				 + delta * era->absolute_direction));
>  		}

I believe this is OK.

> diff --git a/time/tst-strftime2.c b/time/tst-strftime2.c
> new file mode 100644
> index 0000000000..57d2144c83
> --- /dev/null
> +++ b/time/tst-strftime2.c
> @@ -0,0 +1,132 @@
> [cut]

I don't quote the rest of the code because I believe it is OK.

Please verify if my suggestions are correct, I am unable to test now.

Regards,

Rafal

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v8 1/2] strftime: Set the default width of "%Ey" to 2 [BZ #23758]
  2019-01-21 17:03   ` Rafal Luzynski
@ 2019-01-22  1:38     ` TAMUKI Shoichi
  0 siblings, 0 replies; 10+ messages in thread
From: TAMUKI Shoichi @ 2019-01-22  1:38 UTC (permalink / raw)
  To: Rafal Luzynski; +Cc: libc-alpha

Hello Rafal,

From: Rafal Luzynski <digitalfreak@lingonborough.com>
Subject: Re: [PATCH v8 1/2] strftime: Set the default width of "%Ey" to 2 [BZ #23758]
Date: Mon, 21 Jan 2019 18:03:12 +0100 (CET)

> > In Japanese locales, strftime's alternative year format (%Ey) produces
> > [...]
> 
> It is OK for me to use the plural form ("Japanese locales").
> 
> I don't quote the rest of your patch as it is correct IMO.
> I would like to hear the final "OK" from Zack or Paul or
> someone else who confirms that the documentation is correct.
> I suggest to wait a while to give them a chance to reply and
> to push this patch either when they say OK or when you decide
> that they are unresponsive.
> 
> Thank you for working on this.

Thank you for your review.

Regards,
TAMUKI Shoichi

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096]
  2019-01-21 17:23   ` Rafal Luzynski
@ 2019-01-22  1:40     ` TAMUKI Shoichi
  2019-01-22  2:04       ` TAMUKI Shoichi
  0 siblings, 1 reply; 10+ messages in thread
From: TAMUKI Shoichi @ 2019-01-22  1:40 UTC (permalink / raw)
  To: Rafal Luzynski; +Cc: libc-alpha

Hello Rafal,

From: Rafal Luzynski <digitalfreak@lingonborough.com>
Subject: Re: [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096]
Date: Mon, 21 Jan 2019 18:23:29 +0100 (CET)

> > +If the @code{E} modifier is specified (@code{%EC}), instead produces
> > +the name of the period for the year (e.g. an era name) in the locale's
> > +alternative calendar.
> > +
> 
> "e.g." should be "e.g.@:".  It is important to use "@:" to mark that this
> dot is not the end of a sentence and thus control the space width.

OK, I will fix this in the next patch.

> > +  int yr_spec = 0;		/* Override padding for "%Ey".  */
> 
> I think that you don't need this variable now.
> 
> > -  return __strftime_internal (s, maxsize, format, tp, &tzset_called
> > +  return __strftime_internal (s, maxsize, format, tp, yr_spec,
> 
> Consequently, you can pass 0 instead of yr_spec here.

Exactly you are right.  I will fix this in the next patch.

> I don't quote the rest of the code because I believe it is OK.
> 
> Please verify if my suggestions are correct, I am unable to test now.

The test is OK. I attach the result to this mail.

Regards,
TAMUKI Shoichi

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096]
  2019-01-22  1:40     ` TAMUKI Shoichi
@ 2019-01-22  2:04       ` TAMUKI Shoichi
  2019-01-23 21:31         ` Zack Weinberg
  0 siblings, 1 reply; 10+ messages in thread
From: TAMUKI Shoichi @ 2019-01-22  2:04 UTC (permalink / raw)
  To: Rafal Luzynski; +Cc: libc-alpha

[-- Attachment #1: Type: text/plain, Size: 456 bytes --]

Hello Rafal,

From: TAMUKI Shoichi <tamuki@linet.gr.jp>
Subject: Re: [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096]
Date: Tue, 22 Jan 2019 10:40:24 +0900

> > I don't quote the rest of the code because I believe it is OK.
> > 
> > Please verify if my suggestions are correct, I am unable to test now.
> 
> The test is OK. I attach the result to this mail.

Sorry, I forgot to attach the result.

Regards,
TAMUKI Shoichi

[-- Attachment #2: tst-strftime2.out --]
[-- Type: application/octet-stream, Size: 1996 bytes --]

[ja_JP.UTF-8]
1988-04-01	"%EY"	"昭和63年"	OK
1989-01-07	"%EY"	"昭和64年"	OK
1989-01-08	"%EY"	"平成元年"	OK
1990-04-01	"%EY"	"平成02年"	OK
1997-04-01	"%EY"	"平成09年"	OK
1998-04-01	"%EY"	"平成10年"	OK

1988-04-01	"%_EY"	"昭和63年"	OK
1989-01-07	"%_EY"	"昭和64年"	OK
1989-01-08	"%_EY"	"平成元年"	OK
1990-04-01	"%_EY"	"平成 2年"	OK
1997-04-01	"%_EY"	"平成 9年"	OK
1998-04-01	"%_EY"	"平成10年"	OK

1988-04-01	"%-EY"	"昭和63年"	OK
1989-01-07	"%-EY"	"昭和64年"	OK
1989-01-08	"%-EY"	"平成元年"	OK
1990-04-01	"%-EY"	"平成2年"	OK
1997-04-01	"%-EY"	"平成9年"	OK
1998-04-01	"%-EY"	"平成10年"	OK

[lo_LA.UTF-8]
1988-04-01	"%EY"	"ພ.ສ. 2531"	OK
1989-01-07	"%EY"	"ພ.ສ. 2532"	OK
1989-01-08	"%EY"	"ພ.ສ. 2532"	OK
1990-04-01	"%EY"	"ພ.ສ. 2533"	OK
1997-04-01	"%EY"	"ພ.ສ. 2540"	OK
1998-04-01	"%EY"	"ພ.ສ. 2541"	OK

1988-04-01	"%_EY"	"ພ.ສ. 2531"	OK
1989-01-07	"%_EY"	"ພ.ສ. 2532"	OK
1989-01-08	"%_EY"	"ພ.ສ. 2532"	OK
1990-04-01	"%_EY"	"ພ.ສ. 2533"	OK
1997-04-01	"%_EY"	"ພ.ສ. 2540"	OK
1998-04-01	"%_EY"	"ພ.ສ. 2541"	OK

1988-04-01	"%-EY"	"ພ.ສ. 2531"	OK
1989-01-07	"%-EY"	"ພ.ສ. 2532"	OK
1989-01-08	"%-EY"	"ພ.ສ. 2532"	OK
1990-04-01	"%-EY"	"ພ.ສ. 2533"	OK
1997-04-01	"%-EY"	"ພ.ສ. 2540"	OK
1998-04-01	"%-EY"	"ພ.ສ. 2541"	OK

[th_TH.UTF-8]
1988-04-01	"%EY"	"พ.ศ. 2531"	OK
1989-01-07	"%EY"	"พ.ศ. 2532"	OK
1989-01-08	"%EY"	"พ.ศ. 2532"	OK
1990-04-01	"%EY"	"พ.ศ. 2533"	OK
1997-04-01	"%EY"	"พ.ศ. 2540"	OK
1998-04-01	"%EY"	"พ.ศ. 2541"	OK

1988-04-01	"%_EY"	"พ.ศ. 2531"	OK
1989-01-07	"%_EY"	"พ.ศ. 2532"	OK
1989-01-08	"%_EY"	"พ.ศ. 2532"	OK
1990-04-01	"%_EY"	"พ.ศ. 2533"	OK
1997-04-01	"%_EY"	"พ.ศ. 2540"	OK
1998-04-01	"%_EY"	"พ.ศ. 2541"	OK

1988-04-01	"%-EY"	"พ.ศ. 2531"	OK
1989-01-07	"%-EY"	"พ.ศ. 2532"	OK
1989-01-08	"%-EY"	"พ.ศ. 2532"	OK
1990-04-01	"%-EY"	"พ.ศ. 2533"	OK
1997-04-01	"%-EY"	"พ.ศ. 2540"	OK
1998-04-01	"%-EY"	"พ.ศ. 2541"	OK


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096]
  2019-01-22  2:04       ` TAMUKI Shoichi
@ 2019-01-23 21:31         ` Zack Weinberg
  2019-01-23 21:35           ` Rafal Luzynski
  0 siblings, 1 reply; 10+ messages in thread
From: Zack Weinberg @ 2019-01-23 21:31 UTC (permalink / raw)
  To: TAMUKI Shoichi; +Cc: Rafal Luzynski, GNU C Library

On Mon, Jan 21, 2019 at 9:05 PM TAMUKI Shoichi <tamuki@linet.gr.jp> wrote:
> From: TAMUKI Shoichi <tamuki@linet.gr.jp>
> Subject: Re: [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096]
> Date: Tue, 22 Jan 2019 10:40:24 +0900

I have no further suggestions to make regarding the documentation in this patch.

zw

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096]
  2019-01-23 21:31         ` Zack Weinberg
@ 2019-01-23 21:35           ` Rafal Luzynski
  0 siblings, 0 replies; 10+ messages in thread
From: Rafal Luzynski @ 2019-01-23 21:35 UTC (permalink / raw)
  To: Zack Weinberg, TAMUKI Shoichi; +Cc: GNU C Library

23.01.2019 22:31 Zack Weinberg <zackw@panix.com> wrote:
> 
> 
> On Mon, Jan 21, 2019 at 9:05 PM TAMUKI Shoichi <tamuki@linet.gr.jp> wrote:
> > From: TAMUKI Shoichi <tamuki@linet.gr.jp>
> > Subject: Re: [PATCH v8 2/2] strftime: Pass the additional flags from
> > "%EY" to "%Ey" [BZ #24096]
> > Date: Tue, 22 Jan 2019 10:40:24 +0900
> 
> I have no further suggestions to make regarding the documentation in this
> patch.

Please note that I found few minor issues (yes, in the documentation, too)
and Tamuki Shoichi prepared the next version of this patch [1] which I think
[2]
is correct.

Regards,

Rafal


[1] https://sourceware.org/ml/libc-alpha/2019-01/msg00553.html
[2] https://sourceware.org/ml/libc-alpha/2019-01/msg00574.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-01-23 21:39 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-20  8:44 [PATCH v8 0/2] strftime: Improve the width of alternative representation for year [BZ #23758][BZ #24096] TAMUKI Shoichi
2019-01-20  8:47 ` [PATCH v8 1/2] strftime: Set the default width of "%Ey" to 2 [BZ #23758] TAMUKI Shoichi
2019-01-21 17:03   ` Rafal Luzynski
2019-01-22  1:38     ` TAMUKI Shoichi
2019-01-20  8:52 ` [PATCH v8 2/2] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #24096] TAMUKI Shoichi
2019-01-21 17:23   ` Rafal Luzynski
2019-01-22  1:40     ` TAMUKI Shoichi
2019-01-22  2:04       ` TAMUKI Shoichi
2019-01-23 21:31         ` Zack Weinberg
2019-01-23 21:35           ` Rafal Luzynski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).