diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | test/ruby/test_sprintf.rb | 4 | ||||
-rw-r--r-- | vsnprintf.c | 4 |
3 files changed, 12 insertions, 1 deletions
@@ -1,3 +1,8 @@ +Mon Oct 25 06:21:35 2010 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * vsnprintf.c (BSD_vfprintf): prec digits fractal part should be + appended to 0 if prec is given. [ruby-dev:42453] #3979 + Mon Oct 25 02:57:21 2010 Koichi Sasada <ko1@atdot.net> * common.mk (run.gdb): Quit gdb on 'make gdb' when diff --git a/test/ruby/test_sprintf.rb b/test/ruby/test_sprintf.rb index ad77df19b8..33794c9296 100644 --- a/test/ruby/test_sprintf.rb +++ b/test/ruby/test_sprintf.rb @@ -230,6 +230,10 @@ class TestSprintf < Test::Unit::TestCase assert_equal("0x1.p+0", sprintf("%#.0a", 1), bug3965) assert_equal("0x00000000000000.p+0", sprintf("%#020a", 0), bug3965) assert_equal("0x0000.0000000000p+0", sprintf("%#020.10a", 0), bug3965) + + bug3979 = '[ruby-dev:42453]' + assert_equal(" 0x0.000p+0", sprintf("%20.3a", 0), bug3979) + assert_equal(" 0x1.000p+0", sprintf("%20.3a", 1), bug3979) end BSIZ = 120 diff --git a/vsnprintf.c b/vsnprintf.c index 88a36a102e..ebcb882f89 100644 --- a/vsnprintf.c +++ b/vsnprintf.c @@ -784,8 +784,10 @@ reswitch: switch (ch) { #ifdef FLOATING_POINT case 'a': case 'A': - if (prec >= 0) + if (prec >= 0) { + flags |= ALT; prec++; + } goto fp_begin; case 'e': /* anomalous precision */ case 'E': |