ruby-changes:17526
From: nobu <ko1@a...>
Date: Tue, 19 Oct 2010 03:09:11 +0900 (JST)
Subject: [ruby-changes:17526] Ruby:r29531 (trunk): * vsnprintf.c (BSD_vfprintf): use HEXPREFIX flag for prefix of %a.
nobu 2010-10-19 03:08:58 +0900 (Tue, 19 Oct 2010) New Revision: 29531 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29531 Log: * vsnprintf.c (BSD_vfprintf): use HEXPREFIX flag for prefix of %a. [ruby-core:32841] Modified files: trunk/ChangeLog trunk/test/ruby/test_sprintf.rb trunk/version.h trunk/vsnprintf.c Index: ChangeLog =================================================================== --- ChangeLog (revision 29530) +++ ChangeLog (revision 29531) @@ -1,3 +1,8 @@ +Tue Oct 19 03:08:52 2010 Nobuyoshi Nakada <nobu@r...> + + * vsnprintf.c (BSD_vfprintf): use HEXPREFIX flag for prefix of %a. + [ruby-core:32841] + Mon Oct 18 13:18:01 2010 Akinori MUSHA <knu@i...> * ext/digest/digest.c (rb_digest_class_init): Define Index: vsnprintf.c =================================================================== --- vsnprintf.c (revision 29530) +++ vsnprintf.c (revision 29531) @@ -826,8 +826,10 @@ ch = 'g'; } if (ch == 'a' || ch == 'A') { + flags |= HEXPREFIX; --expt; expsize = exponent(expstr, expt, ch + 'p' - 'a'); + ch += 'x' - 'a'; size = expsize + ndig; size += 2; /* 0x */ if (ndig > 1) @@ -1037,7 +1039,8 @@ /* prefix */ if (sign) { PRINT(&sign, 1); - } else if (flags & HEXPREFIX) { + } + if (flags & HEXPREFIX) { ox[0] = '0'; ox[1] = ch; PRINT(ox, 2); @@ -1051,7 +1054,7 @@ PAD_L(dprec - fieldsz, zeroes); if (sign) fieldsz--; - else if (flags & HEXPREFIX) + if (flags & HEXPREFIX) fieldsz -= 2; /* the string or number proper */ @@ -1059,10 +1062,7 @@ if ((flags & FPT) == 0) { PRINT(cp, fieldsz); } else { /* glue together f_p fragments */ - if (ch == 'a' || ch == 'A') { - ox[0] = '0'; - ox[1] = ch + ('x' - 'a'); - PRINT(ox, 2); + if (flags & HEXPREFIX) { if (ndig > 1 || flags & ALT) { ox[2] = *cp++; ox[3] = '.'; Index: version.h =================================================================== --- version.h (revision 29530) +++ version.h (revision 29531) @@ -1,11 +1,11 @@ #define RUBY_VERSION "1.9.3" -#define RUBY_RELEASE_DATE "2010-10-18" +#define RUBY_RELEASE_DATE "2010-10-19" #define RUBY_PATCHLEVEL -1 #define RUBY_BRANCH_NAME "trunk" #define RUBY_RELEASE_YEAR 2010 #define RUBY_RELEASE_MONTH 10 -#define RUBY_RELEASE_DAY 18 +#define RUBY_RELEASE_DAY 19 #include "ruby/version.h" Index: test/ruby/test_sprintf.rb =================================================================== --- test/ruby/test_sprintf.rb (revision 29530) +++ test/ruby/test_sprintf.rb (revision 29531) @@ -211,6 +211,14 @@ assert_equal(" -0x1.2p+0", sprintf("%10a", -1.125)) assert_equal(" -0x1.1p+0", sprintf("%10a", -1.0625)) assert_equal("-0x1.08p+0", sprintf("%10a", -1.03125)) + + bug3962 = '[ruby-core:32841]' + assert_equal("-0x0001p+0", sprintf("%010a", -1), bug3962) + assert_equal("-0x01.8p+0", sprintf("%010a", -1.5), bug3962) + assert_equal("-0x01.4p+0", sprintf("%010a", -1.25), bug3962) + assert_equal("-0x01.2p+0", sprintf("%010a", -1.125), bug3962) + assert_equal("-0x01.1p+0", sprintf("%010a", -1.0625), bug3962) + assert_equal("-0x1.08p+0", sprintf("%010a", -1.03125), bug3962) end BSIZ = 120 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/