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: 30973 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)); }