aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--test/ruby/test_sprintf.rb4
-rw-r--r--vsnprintf.c4
3 files changed, 12 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 3123296dd9..a0cf409a37 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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':