[前][次][番号順一覧][スレッド一覧]

ruby-changes:4158

From: ko1@a...
Date: Sat, 1 Mar 2008 09:38:48 +0900 (JST)
Subject: [ruby-changes:4158] matz - Ruby:r15648 (trunk): * sprintf.c (rb_str_format): "%#.0o" should keep prefix where

matz	2008-03-01 09:38:33 +0900 (Sat, 01 Mar 2008)

  New Revision: 15648

  Modified files:
    trunk/ChangeLog
    trunk/sprintf.c
    trunk/test/ruby/test_sprintf_comb.rb

  Log:
    * sprintf.c (rb_str_format): "%#.0o" should keep prefix where
      "%#.0x" should not.

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15648&r2=15647&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/sprintf.c?r1=15648&r2=15647&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_sprintf_comb.rb?r1=15648&r2=15647&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 15647)
+++ ChangeLog	(revision 15648)
@@ -1,3 +1,8 @@
+Sat Mar  1 09:36:08 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* sprintf.c (rb_str_format): "%#.0o" should keep prefix where
+	  "%#.0x" should not.
+
 Sat Mar  1 02:35:08 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* bignum.c (big2str_find_n1): check integer overflow.
Index: sprintf.c
===================================================================
--- sprintf.c	(revision 15647)
+++ sprintf.c	(revision 15648)
@@ -684,18 +684,21 @@
 			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 @@
 		}
 		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;
 		}
Index: test/ruby/test_sprintf_comb.rb
===================================================================
--- test/ruby/test_sprintf_comb.rb	(revision 15647)
+++ test/ruby/test_sprintf_comb.rb	(revision 15648)
@@ -145,7 +145,7 @@
       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 @@
       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

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]