From 361a713f9666305bfbc82bb60da0c6f10d801483 Mon Sep 17 00:00:00 2001 From: shugo Date: Mon, 24 Nov 2008 14:29:37 +0000 Subject: [PATCH] * strftime.c (rb_strftime): The # flag should work with %a, %A, %b, %B, and %h. [ruby-dev:37162] * test/ruby/test_time.rb (test_strftime): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20342 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ strftime.c | 16 ++++++++++++++++ test/ruby/test_time.rb | 7 +++++++ 3 files changed, 30 insertions(+) diff --git a/ChangeLog b/ChangeLog index c8a89b7098..9e18f38268 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon Nov 24 23:27:28 2008 Shugo Maeda + + * strftime.c (rb_strftime): The # flag should work with %a, %A, %b, + %B, and %h. [ruby-dev:37162] + + * test/ruby/test_time.rb (test_strftime): ditto. + Mon Nov 24 23:16:32 2008 Yukihiro Matsumoto * signal.c (register_sigaltstack): should not add external diff --git a/strftime.c b/strftime.c index 3a88208b1f..d6d1f8bd3a 100644 --- a/strftime.c +++ b/strftime.c @@ -318,6 +318,10 @@ rb_strftime(char *s, size_t maxsize, const char *format, const struct tm *timept continue; case 'a': /* abbreviated weekday name */ + if (flags & BIT_OF(CHCASE)) { + flags &= ~(BIT_OF(LOWER)|BIT_OF(CHCASE)); + flags |= BIT_OF(UPPER); + } if (timeptr->tm_wday < 0 || timeptr->tm_wday > 6) i = 1, tp = "?"; else @@ -325,6 +329,10 @@ rb_strftime(char *s, size_t maxsize, const char *format, const struct tm *timept break; case 'A': /* full weekday name */ + if (flags & BIT_OF(CHCASE)) { + flags &= ~(BIT_OF(LOWER)|BIT_OF(CHCASE)); + flags |= BIT_OF(UPPER); + } if (timeptr->tm_wday < 0 || timeptr->tm_wday > 6) i = 1, tp = "?"; else @@ -335,6 +343,10 @@ rb_strftime(char *s, size_t maxsize, const char *format, const struct tm *timept case 'h': /* abbreviated month name */ #endif case 'b': /* abbreviated month name */ + if (flags & BIT_OF(CHCASE)) { + flags &= ~(BIT_OF(LOWER)|BIT_OF(CHCASE)); + flags |= BIT_OF(UPPER); + } if (timeptr->tm_mon < 0 || timeptr->tm_mon > 11) i = 1, tp = "?"; else @@ -342,6 +354,10 @@ rb_strftime(char *s, size_t maxsize, const char *format, const struct tm *timept break; case 'B': /* full month name */ + if (flags & BIT_OF(CHCASE)) { + flags &= ~(BIT_OF(LOWER)|BIT_OF(CHCASE)); + flags |= BIT_OF(UPPER); + } if (timeptr->tm_mon < 0 || timeptr->tm_mon > 11) i = 1, tp = "?"; else diff --git a/test/ruby/test_time.rb b/test/ruby/test_time.rb index 2f37d57871..a1a5bfc7fb 100644 --- a/test/ruby/test_time.rb +++ b/test/ruby/test_time.rb @@ -461,5 +461,12 @@ class TestTime < Test::Unit::TestCase assert_equal("\n", T2000.strftime("%1n")) assert_equal(" \n", T2000.strftime("%3n")) assert_equal("00\n", T2000.strftime("%03n")) + + # [ruby-dev:37162] + assert_equal("SAT", T2000.strftime("%#a")) + assert_equal("SATURDAY", T2000.strftime("%#A")) + assert_equal("JAN", T2000.strftime("%#b")) + assert_equal("JANUARY", T2000.strftime("%#B")) + assert_equal("JAN", T2000.strftime("%#h")) end end