aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-11-24 14:29:37 +0000
committershugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-11-24 14:29:37 +0000
commit361a713f9666305bfbc82bb60da0c6f10d801483 (patch)
tree9271f92f39424b66c628fb95207def59835cbccd
parent3380a05bd6d5b3df1ddfba974d88b7e82a85b9ee (diff)
downloadruby-361a713f9666305bfbc82bb60da0c6f10d801483.tar.gz
* 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
-rw-r--r--ChangeLog7
-rw-r--r--strftime.c16
-rw-r--r--test/ruby/test_time.rb7
3 files changed, 30 insertions, 0 deletions
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 <shugo@ruby-lang.org>
+
+ * 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 <matz@ruby-lang.org>
* 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