summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-03-01 00:38:33 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-03-01 00:38:33 +0000
commit18e70b266f05faa7963c159842202e5c1ad4cc15 (patch)
tree5daeb4db319ee3792f293aa0257021478b4a1038
parent4e6e5a431641056c6554c79a288a4f4ec175ad96 (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--ChangeLog5
-rw-r--r--sprintf.c13
-rw-r--r--test/ruby/test_sprintf_comb.rb6
3 files changed, 16 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 3bb1a63e42..7189913f6b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/sprintf.c b/sprintf.c
index 0682c642cc..a100946aa7 100644
--- a/sprintf.c
+++ b/sprintf.c
@@ -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