From 599a7071c1789013dc8c8a4edeb5d54bc2fb71a6 Mon Sep 17 00:00:00 2001 From: naruse Date: Mon, 8 Nov 2010 06:44:39 +0000 Subject: [PATCH] * vsnprintf.c (BSD_vfprintf): fix precision specifier doesn't work well on %f. [ruby-dev:42552] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29719 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ test/ruby/test_sprintf.rb | 1 + vsnprintf.c | 2 ++ 3 files changed, 8 insertions(+) diff --git a/ChangeLog b/ChangeLog index 70ef18dcc6..2d79074289 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Nov 8 15:40:56 2010 NARUSE, Yui + + * vsnprintf.c (BSD_vfprintf): fix precision specifier doesn't + work well on %f. [ruby-dev:42552] + Mon Nov 8 14:41:40 2010 NAKAMURA Usaku * win32/win32.c (get_wsa_extension_function): typos. diff --git a/test/ruby/test_sprintf.rb b/test/ruby/test_sprintf.rb index 33794c9296..b82cbc4b90 100644 --- a/test/ruby/test_sprintf.rb +++ b/test/ruby/test_sprintf.rb @@ -189,6 +189,7 @@ class TestSprintf < Test::Unit::TestCase assert_equal("36893488147419111424", sprintf("%20.0f", 36893488147419107329.0)) assert_equal(" Inf", sprintf("% 0e", 1.0/0.0), "moved from btest/knownbug") + assert_equal(" -0.", sprintf("%#10.0f", -0.5), "[ruby-dev:42552]") end def test_float_hex diff --git a/vsnprintf.c b/vsnprintf.c index 1ff061ed9c..5f564c2abf 100644 --- a/vsnprintf.c +++ b/vsnprintf.c @@ -855,6 +855,8 @@ fp_begin: _double = va_arg(ap, double); size += prec + 1; } else if (!prec) { /* "0" */ size = 1; + if (flags & ALT) + size += 1; } else /* "0.X" */ size = prec + 2; } else if (expt >= ndig) { /* fixed g fmt */