From patchwork Wed Jun 15 08:54:17 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakub Martisko X-Patchwork-Id: 13103 Received: (qmail 21785 invoked by alias); 15 Jun 2016 08:54:23 -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 21770 invoked by uid 89); 15 Jun 2016 08:54:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=doe, Case X-HELO: mx1.redhat.com From: Jakub Martisko Subject: [PATCH][BZ #15527] strftime_l.c: Support lowercase output To: libc-alpha@sourceware.org Message-ID: <576117B9.5080105@redhat.com> Date: Wed, 15 Jun 2016 10:54:17 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 strftime_l.c doe not provide easy way to produce lowercase output. While the function to create lowercase is implemented, there is no flag which would cause it to be called. Provided patch checks, whether combination of to_uppcase and change_case flags is used and sets to_lowcase if both of them are set which leads to lower case output. 2016-05-12 Jakub Martisko * [BZ #15527] * time/strftime_l.c (__strftime_internal): Implement conversion to all lowercase. * manual/time.texi: Document # flag. * time/tst-strftime.c (do_test): Test case conversion. --- manual/time.texi | 6 +++++- time/strftime_l.c | 7 ++++++- time/tst-strftime.c | 31 ++++++++++++++++++++++++++++++- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/manual/time.texi b/manual/time.texi index f94cbe4..a65959f 100644 --- a/manual/time.texi +++ b/manual/time.texi @@ -1350,7 +1350,11 @@ The number is padded with zeros even if the format specifies padding with spaces. @item ^ -The output uses uppercase characters, but only if this is possible +The output uses uppercase characters, but only if this is possible. + +@item # +The output uses opposite case characters, but only if this is possible. +Can be combined with @samp{^} to produce lowercase characters. (@pxref{Case Conversion}). @end table diff --git a/time/strftime_l.c b/time/strftime_l.c index 1205035..c577f28 100644 --- a/time/strftime_l.c +++ b/time/strftime_l.c @@ -677,7 +677,12 @@ __strftime_internal (CHAR_T *s, size_t maxsize, const CHAR_T *format, } break; } - + if (to_uppcase == 1 && change_case == 1) + { + to_uppcase = 0; + change_case = 0; + to_lowcase = 1; + } /* As a GNU extension we allow to specify the field width. */ if (ISDIGIT (*f)) { diff --git a/time/tst-strftime.c b/time/tst-strftime.c index af3ff72..e369595 100644 --- a/time/tst-strftime.c +++ b/time/tst-strftime.c @@ -153,7 +153,36 @@ do_test (void) result = 1; } } - + /*case tests*/ + const struct + { + const char *fmt; + const char *exp; + size_t n; + } ctests[] = + { + { "%^A", "SUNDAY", 6 }, + { "%^#A", "sunday", 6 }, + { "%A", "Sunday", 6 }, + }; +#define nctests (sizeof (ctests) / sizeof (ctests[0])) + for (cnt = 0; cnt < nctests; ++cnt) + { + char buf[100]; + size_t r = strftime (buf, sizeof (buf), ctests[cnt].fmt, &ttm); + if (r != ctests[cnt].n) + { + printf ("strftime(\"%s\") returned %zu not %zu\n", + ctests[cnt].fmt, r, ctests[cnt].n); + result = 1; + } + if (strcmp (buf, ctests[cnt].exp) != 0) + { + printf ("strftime(\"%s\") produced \"%s\" not \"%s\"\n", + ctests[cnt].fmt, buf, ctests[cnt].exp); + result = 1; + } + } return result + do_bz18985 (); } -- 2.5.0