diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-03-01 00:38:33 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-03-01 00:38:33 +0000 |
commit | 18e70b266f05faa7963c159842202e5c1ad4cc15 (patch) | |
tree | 5daeb4db319ee3792f293aa0257021478b4a1038 | |
parent | 4e6e5a431641056c6554c79a288a4f4ec175ad96 (diff) |
* sprintf.c (rb_str_format): "%#.0o" should keep prefix where
"%#.0x" should not.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15648 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sprintf.c | 13 | ||||
-rw-r--r-- | test/ruby/test_sprintf_comb.rb | 6 |
3 files changed, 16 insertions, 8 deletions
@@ -1,3 +1,8 @@ +Sat Mar 1 09:36:08 2008 Yukihiro Matsumoto <matz@ruby-lang.org> + + * sprintf.c (rb_str_format): "%#.0o" should keep prefix where + "%#.0x" should not. + Sat Mar 1 02:35:08 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> * bignum.c (big2str_find_n1): check integer overflow. @@ -684,18 +684,21 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt) pp++; } } - if (prefix && !prefix[1]) { + if (prefix && !prefix[1]) { /* octal */ if (dots) { prefix = 0; } else if (len == 1 && *s == '0') { - if (flags & FPREC) len = 0; - prefix = 0; + len = 0; + if (flags & FPREC) prec--; } else if ((flags & FPREC) && (prec > len)) { prefix = 0; } } + else if (len == 1 && *s == '0') { + prefix = 0; + } if (prefix) { width -= strlen(prefix); } @@ -705,8 +708,8 @@ rb_str_format(int argc, const VALUE *argv, VALUE fmt) } else { if (prec < len) { - if ((flags & FPREC) && len == 1 && *s == '0') len = 0; - else prec = len; + if (!prefix && prec == 0 && len == 1 && *s == '0') len = 0; + prec = len; } width -= prec; } diff --git a/test/ruby/test_sprintf_comb.rb b/test/ruby/test_sprintf_comb.rb index ee748f765a..644a1dd0f4 100644 --- a/test/ruby/test_sprintf_comb.rb +++ b/test/ruby/test_sprintf_comb.rb @@ -145,7 +145,7 @@ class TestSprintfComb < Test::Unit::TestCase radix = 2 digitmap = {0 => '0', 1 => '1'} complement = !pl && !sp - prefix = '0b' if hs + prefix = '0b' if hs && v != 0 when 'd' radix = 10 digitmap = {} @@ -161,13 +161,13 @@ class TestSprintfComb < Test::Unit::TestCase digitmap = {} 16.times {|i| digitmap[i] = i.to_s(16).upcase } complement = !pl && !sp - prefix = '0X' if hs + prefix = '0X' if hs && v != 0 when 'x' radix = 16 digitmap = {} 16.times {|i| digitmap[i] = i.to_s(16) } complement = !pl && !sp - prefix = '0x' if hs + prefix = '0x' if hs && v != 0 else raise "unexpected type: #{type.inspect}" end |