From patchwork Sun Jan 6 06:33:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: TAMUKI Shoichi X-Patchwork-Id: 1021039 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-99076-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=linet.gr.jp Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="v9YiwLDs"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43XTLv4vP8z9sCr for ; Sun, 6 Jan 2019 17:36:23 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:from:date:to:subject:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=mtT3G P/i4jdx6CDOIzlrIAH6+wEmghbuWrQZlEOupUS5L4z/rijT59i6LwI0LhwFhtTBO MfDjdGblfP2/xJntVzxtQSVCWt+e1z40jZNPTXr9kQY9qjc1ZO2kW+b1pim74Kwp Ih38YIO+QBBvI2osH7aTjdBJ/rg1PN2+a+kjtA= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:from:date:to:subject:in-reply-to :references:mime-version:content-type; s=default; bh=ppsuubvYMjG xJoBtBtGpMT1+/Zs=; b=v9YiwLDsEOFx3TO/oRdVlTjVL0Wywx1J8ubPCSJ3Dux Q7npf2uyg2wwJ2m5bWWQCvQgtOWIyeZFNTBLyZVAfumtsGVnHjXZ6i9LiOSkmCzD FJU7ovDeJJFK1uZ2e0AVWQl0DWrzz4hmh66MTOWJdWloW44cZG+B+v19jsrxv+zA = Received: (qmail 103254 invoked by alias); 6 Jan 2019 06:36:17 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 103236 invoked by uid 89); 6 Jan 2019 06:36:16 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 spammy=2122, H*UA:Version X-HELO: mail.linet.jp Message-Id: <201901060633.AA04157@tamuki.linet.gr.jp> From: TAMUKI Shoichi Date: Sun, 06 Jan 2019 15:33:37 +0900 To: libc-alpha@sourceware.org Subject: [PATCH v5 1/5] strftime: Add missing uses of L_ macro, etc. [BZ #23758] In-Reply-To: <201901060628.AA04156@tamuki.linet.gr.jp> References: <201901060628.AA04156@tamuki.linet.gr.jp> MIME-Version: 1.0 At first, make an unrelated changes for the consistency. ChangeLog: [BZ #23758] * time/strftime_l.c (__strftime_internal): Add missing uses of L_ macro, also add a missing space after the cast of _NL_CURRENT. --- time/strftime_l.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/time/strftime_l.c b/time/strftime_l.c index 6919749c630..7ba4179de3e 100644 --- a/time/strftime_l.c +++ b/time/strftime_l.c @@ -820,7 +820,7 @@ __strftime_internal (CHAR_T *s, size_t maxsize, const CHAR_T *format, if (modifier == L_('O')) goto bad_format; #ifdef _NL_CURRENT - if (! (modifier == 'E' + if (! (modifier == L_('E') && (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_D_T_FMT))) @@ -917,7 +917,7 @@ __strftime_internal (CHAR_T *s, size_t maxsize, const CHAR_T *format, #ifdef _NL_CURRENT if (! (modifier == L_('E') && (*(subfmt = - (const CHAR_T *)_NL_CURRENT (LC_TIME, NLW(ERA_D_FMT))) + (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_D_FMT))) != L_('\0')))) subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_FMT)); goto subformat; @@ -1262,7 +1262,7 @@ __strftime_internal (CHAR_T *s, size_t maxsize, const CHAR_T *format, DO_NUMBER (1, tp->tm_wday); case L_('Y'): - if (modifier == 'E') + if (modifier == L_('E')) { #if HAVE_STRUCT_ERA_ENTRY struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); From patchwork Sun Jan 6 06:34:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: TAMUKI Shoichi X-Patchwork-Id: 1021040 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-99077-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=linet.gr.jp Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="qX2LIzXL"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43XTM364SNz9sCr for ; Sun, 6 Jan 2019 17:36:31 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:from:date:to:subject:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=LCcb2 rN0XPhM0WeMsXwEjrZazXzz/x8xiR/d+xQn6Fw+4as2TGNUiSni9jF/Dpbgm8i0G IUhJ15fVpYt4/+2oOsYMFqIQ6fqCTeqELPrFrmTXcTC7q9eN82dh+uMDB1LcZXHm M1UIQiv8WnTvSGRFFHSf6E3zF6yK3vDOFabrMU= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:from:date:to:subject:in-reply-to :references:mime-version:content-type; s=default; bh=lRNMQsfC9Kv tdb/kpPjXcfDP5VM=; b=qX2LIzXL0Rrz+oIymnqkyrRcdKIfYUidH53GaRC7aBg ujWpttkb6ZT2XrATrsgCFxRPBTXb2aT6GJaSpDwL6jVD8bi3tUUWwaB3rxj0i8uy q+iXpx+jjys+A1WS4YJ9NltxBCw4xAUqK9gq493VOA7/onQtqxf/FnCM5eUjNamA = Received: (qmail 103353 invoked by alias); 6 Jan 2019 06:36:18 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 103253 invoked by uid 89); 6 Jan 2019 06:36:17 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-24.0 required=5.0 tests=BAYES_20, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 spammy=May, pad, reign, trouble X-HELO: mail.linet.jp Message-Id: <201901060634.AA04158@tamuki.linet.gr.jp> From: TAMUKI Shoichi Date: Sun, 06 Jan 2019 15:34:01 +0900 To: libc-alpha@sourceware.org Subject: [PATCH v5 2/5] strftime: Set the default width of "%Ey" to 2 [BZ #23758] In-Reply-To: <201901060628.AA04156@tamuki.linet.gr.jp> References: <201901060628.AA04156@tamuki.linet.gr.jp> MIME-Version: 1.0 The Japanese era name is scheduled to be changed on May 1, 2019. Prior to this, change the alternative representation for year in strftime to pad the number with zero to keep it constant width, so that prevent the trouble we saw in the past from becoming obvious again from the year after the era name changes onward. Since only one Japanese era name is used by each emperor's reign as lately, it is rare that the year ends in one digit or lasts more than three digits. In addition, the default width of month, day, hour, minute, and second is 2, so adjust the default width of year the same as them, and then the whole display balance is improved. Therefore, it would be reasonable to set the default width padding with zero of "%Ey" to 2. ChangeLog: [BZ #23758] * time/strftime_l.c (__strftime_internal): Set the default width padding with zero of "%Ey" to 2. --- time/strftime_l.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time/strftime_l.c b/time/strftime_l.c index 7ba4179de3e..cbe08e7afb4 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 From patchwork Sun Jan 6 06:34:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: TAMUKI Shoichi X-Patchwork-Id: 1021041 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-99078-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=linet.gr.jp Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="j7pz1z/y"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43XTMD1RyWz9sCr for ; Sun, 6 Jan 2019 17:36:40 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:from:date:to:subject:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=WyULE UlyV2IuVx6wgM+rEHBPtn9UPEnSZLZ2EGTRYqQT9+0OQtKYQ1pPu1BMunwqFhRBQ EuRDOgyhEbYmdXyX4tvODKclhBjK9rFQ4q04fTH7LIDzO9l2BvabYlhMCDhLsUfe GyD3dSkhRQIo2622CxR75fkTvs3KAcm8ek2BbU= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:from:date:to:subject:in-reply-to :references:mime-version:content-type; s=default; bh=Y/aB8XcWI9b Apf2JZudes1KVKVQ=; b=j7pz1z/yPZA/DFuf5yRRCPNOUgH/b5Q+GkD2CkCp2/9 e4pFBOIjQDiuEfTnBWUFkBF4ulIw4sdYLTIHoguZ1Ih1H6NeSQ7S5AY4ntC9FvQS kYQVCdJtIDjYVhTUqQ+MCN5GHR8jo5RkRrRdsijn2xFI5o9Ua1v/tAe4u7B/YTK8 = Received: (qmail 103459 invoked by alias); 6 Jan 2019 06:36:18 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 103307 invoked by uid 89); 6 Jan 2019 06:36:18 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 spammy=pad, decorated, era, 2122 X-HELO: mail.linet.jp Message-Id: <201901060634.AA04159@tamuki.linet.gr.jp> From: TAMUKI Shoichi Date: Sun, 06 Jan 2019 15:34:32 +0900 To: libc-alpha@sourceware.org Subject: [PATCH v5 3/5] strftime: Pass the additional flags from "%EY" to "%Ey" [BZ #23758] In-Reply-To: <201901060628.AA04156@tamuki.linet.gr.jp> References: <201901060628.AA04156@tamuki.linet.gr.jp> MIME-Version: 1.0 For the output string of the conversion specifier "%EY", an optional flag is given to the conversion specifier so that it can be also used the current non-padding format, and the padding format can be controlled. To achieve this, when an optional flag is given to the conversion specifier "%EY", the "%Ey" included in the combined conversion specifier is interpreted as if decorated with the appropriate flag. ChangeLog: [BZ #23758] * time/strftime_l.c (__strftime_internal): Add argument yr_spec to override padding for "%Ey". If an optional flag ('_' or '-') is specified to "%EY", the "%Ey" in subformat is interpreted as if decorated with the appropriate flag. --- time/strftime_l.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/time/strftime_l.c b/time/strftime_l.c index cbe08e7afb4..12d7c0e8744 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,12 @@ __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)); + *yr_spec = 0; if (to_uppcase) while (old_start < p) @@ -1273,6 +1275,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 +1298,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)); } From patchwork Sun Jan 6 06:35:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: TAMUKI Shoichi X-Patchwork-Id: 1021042 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-99079-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=linet.gr.jp Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="rCO5AX29"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43XTMP0f4bz9sCr for ; Sun, 6 Jan 2019 17:36:48 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:from:date:to:subject:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=KHxNn NE6b5cXl94bw7v3IItul/HOEo/SqLapllYwnOA21ZU8KZiyzMBUjlk61+1xHkjt8 66X7+YzuqeBBkx4vFPpdeIoV1wm1wq4Xw1qs9aiLct06U/QwphQuG7IY+4W9KPJD b+wZ7dWWYDKH6DXkfvZFPCCEWolaJ4bMm1NQWo= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:from:date:to:subject:in-reply-to :references:mime-version:content-type; s=default; bh=WFCCEEBu2GI 0w9KrWUScqyAaZ/U=; b=rCO5AX29yI3STNzFjPu3DgQshyNgbtdUA+MO5322xvt DpHQ1nPM6BWZzw+RnJAxuklPU+NS7Ee2zsDHLPg5GAWWgZgf2eaSPNuppb6gngBE t7N7Jlx1VUsFyuzzdXGx2aqwQuKHzK1akwEiSeZNk+TIFWlRuigxBE2QvKtz1AXE = Received: (qmail 103817 invoked by alias); 6 Jan 2019 06:36:21 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 103702 invoked by uid 89); 6 Jan 2019 06:36:20 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 spammy=japan, UD:mk, dates, distributed X-HELO: mail.linet.jp Message-Id: <201901060635.AA04160@tamuki.linet.gr.jp> From: TAMUKI Shoichi Date: Sun, 06 Jan 2019 15:35:01 +0900 To: libc-alpha@sourceware.org Subject: [PATCH v5 4/5] strftime: Add tst-strfitme2 [BZ #23758] In-Reply-To: <201901060628.AA04156@tamuki.linet.gr.jp> References: <201901060628.AA04156@tamuki.linet.gr.jp> MIME-Version: 1.0 Add a test to verify the behavior of strftime on alternative representation for year. Currently in glibc, besides ja_JP (Japan) locale, the locales using the conversion specifier "%Ey" are lo_LA (Laos) and th_TH (Thailand). In these locales, they use the Buddhist era. The Buddhist era is a value obtained by adding 543 to the Christian era, so they are not affected by the change of the conversion specifier "%Ey". ChangeLog: [BZ #23758] * time/Makefile: Add tst-strftime2 to tests. Also add ja_JP.UTF-8, lo_LA.UTF-8, and th_TH.UTF-8 to LOCALES. * time/tst-strftime2.c: New file. --- time/Makefile | 5 +- time/tst-strftime2.c | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 time/tst-strftime2.c diff --git a/time/Makefile b/time/Makefile index d23ba2dee6e..5c6304ece1d 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/tst-strftime2.c b/time/tst-strftime2.c new file mode 100644 index 00000000000..756c841ba9c --- /dev/null +++ b/time/tst-strftime2.c @@ -0,0 +1,133 @@ +/* Verify the behavior of strftime on alternate 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 + . */ + +#include +#include +#include +#include + +static const char *locales[] = { "ja_JP.UTF-8", "lo_LA.UTF-8", "th_TH.UTF-8" }; +#define nlocales (sizeof (locales) / sizeof (locales[0])) + +static const char *formats[] = { "%EY", "%_EY", "%-EY" }; +#define nformats (sizeof (formats) / sizeof (formats[0])) + +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 } + }; +#define ndates (sizeof (dates) / sizeof (dates[0])) + +static char ref[nlocales][nformats][ndates][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 < nlocales; i++) + for (j = 0; j < nformats; j++) + for (k = 0; k < ndates; 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 < nlocales; 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 < nformats; j++) + { + for (k = 0; k < ndates; 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 From patchwork Sun Jan 6 06:35:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: TAMUKI Shoichi X-Patchwork-Id: 1021043 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-99080-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=linet.gr.jp Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="gtpBK6z3"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43XTlV00djz9sCr for ; Sun, 6 Jan 2019 17:54:13 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:from:date:to:subject:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=cjrlF 9KsLXyPXdwz7M3c863pW9VqFZ3fYfMFHdHzkuRUu5KGq+jPJduyF9b/n83N3Jha/ 9C0weRMKMXKFP6CnvfHdM0bC77KNdqxA8PKcN/JpcP2ESi0P0MTj8j0dyfC3pcoh vxos/ExXchOnhT5s9AUHKKnwMlK0NFLpZruaNc= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:from:date:to:subject:in-reply-to :references:mime-version:content-type; s=default; bh=qWFvvGPOkoe jfWqGpZNbw6lYzOk=; b=gtpBK6z3yNNIJFJb/QP2PNnLIGdCQ2AOpN0N64/3d1n 6DRq+0/THluC3Z80Pa+t/dkbiUDE3Jz39px7QfaXkQ6UmeudKtMmaDbYDLNT4uOJ fslT1tFRFgrt7dHwYaS3anaM4f+8DSg3PXNQ4oCCDhRgDSDDkQfln0RThp5hyaP4 = Received: (qmail 41435 invoked by alias); 6 Jan 2019 06:54:07 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 41206 invoked by uid 89); 6 Jan 2019 06:54:05 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 spammy=greatest, century, Major, month X-HELO: mail.linet.jp Message-Id: <201901060635.AA04161@tamuki.linet.gr.jp> From: TAMUKI Shoichi Date: Sun, 06 Jan 2019 15:35:27 +0900 To: libc-alpha@sourceware.org Subject: [PATCH v5 5/5] strftime: Document the description for "%EC", "%Ey", and "%EY" [BZ #23758] In-Reply-To: <201901060628.AA04156@tamuki.linet.gr.jp> References: <201901060628.AA04156@tamuki.linet.gr.jp> MIME-Version: 1.0 Document the description for "%EC", "%Ey", and "%EY" for strftime. Also, fix the wording to "alternative" rather than "alternate". ChangeLog: [BZ #23758] * NEWS: Mention the change. * manual/time.texi (strftime): Document the desctiption for "%EC", "%Ey", and "%EY". Also, fix the wording to "alternative" rather than "alternate". --- NEWS | 7 +++++++ manual/time.texi | 21 ++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/NEWS b/NEWS index 4c8bc924ce3..835f5c2ba22 100644 --- a/NEWS +++ b/NEWS @@ -52,6 +52,13 @@ Major new features: - C-SKY ABIV2 soft-float little-endian - C-SKY ABIV2 hard-float little-endian +* Improve the width of alternative representation for year in + strftime. For %Ey conversion specifier, the default action is now + to pad the number with zero to keep minimum 2 digits, similar to %y. + Also, the optional flag (either _ or -) can be used for %EY, so that + the internal %Ey is interpreted as if decorated with the appropriate + flag. + 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 4d154452eba..6c3bfebb8a0 100644 --- a/manual/time.texi +++ b/manual/time.texi @@ -1339,7 +1339,7 @@ POSIX.2-1992 and by @w{ISO C99}, are: @table @code @item E -Use the locale's alternate representation for date and time. This +Use the locale's alternative representation for date and time. This modifier applies to the @code{%c}, @code{%C}, @code{%x}, @code{%X}, @code{%y} and @code{%Y} format specifiers. In a Japanese locale, for example, @code{%Ex} might yield a date format based on the Japanese @@ -1347,7 +1347,7 @@ Emperors' reigns. @item O With all format specifiers that produce numbers: use the locale's -alternate numeric symbols. +alternative numeric symbols. With @code{%B}, @code{%b}, and @code{%h}: use the grammatical form for month names that is appropriate when the month is named by itself, @@ -1355,7 +1355,7 @@ rather than the form that is appropriate when the month is used as part of a complete date. This is a GNU extension. @end table -If the format supports the modifier but no alternate representation +If the format supports the modifier but no alternative representation is available, it is ignored. The conversion specifier ends with a format specifier taken from the @@ -1393,6 +1393,9 @@ 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}), the locale's +alternative representation for year (the era name) is used instead. + This format was first standardized by POSIX.2-1992 and by @w{ISO C99}. @item %d @@ -1568,10 +1571,22 @@ 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}), the locale's +alternative representation for year (the era year) is used instead. +The default action is to pad the number with zero to keep minimum 2 +digits, similar to @code{%y}. + @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. +If the @code{E} modifier is specified (@code{%EY}), the locale's +alternative representation for year (generally the combination of +@code{%EC} and @code{%Ey}) is used instead. In this case, the +optional flag (either @code{_} or @code{-}) can be used, so that the +internal @code{%Ey} is interpreted as if decorated with the +appropriate flag. + @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