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