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

ruby-changes:9373

From: nobu <ko1@a...>
Date: Mon, 22 Dec 2008 12:25:34 +0900 (JST)
Subject: [ruby-changes:9373] Ruby:r20911 (trunk): * missing/vsnprintf.c (BSD_vfprintf): fix for test_sprintf_comb.rb, by

nobu	2008-12-22 12:25:14 +0900 (Mon, 22 Dec 2008)

  New Revision: 20911

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=20911

  Log:
    * missing/vsnprintf.c (BSD_vfprintf): fix for test_sprintf_comb.rb, by
      wanabe in [ruby-dev:36935].

  Modified files:
    trunk/ChangeLog
    trunk/missing/vsnprintf.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 20910)
+++ ChangeLog	(revision 20911)
@@ -1,3 +1,8 @@
+Mon Dec 22 12:25:09 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* missing/vsnprintf.c (BSD_vfprintf): fix for test_sprintf_comb.rb, by
+	  wanabe in [ruby-dev:36935].
+
 Mon Dec 22 12:05:14 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* configure.in (mingw): no longer uses snprintf and vsnprintf of
Index: missing/vsnprintf.c
===================================================================
--- missing/vsnprintf.c	(revision 20910)
+++ missing/vsnprintf.c	(revision 20911)
@@ -753,6 +753,8 @@
 #ifdef FLOATING_POINT
 		case 'e':		/* anomalous precision */
 		case 'E':
+			if (prec != 0)
+				flags |= ALT;
 			prec = (prec == -1) ?
 				DEFPREC + 1 : prec + 1;
 			/* FALLTHROUGH */
@@ -782,7 +784,7 @@
 			cp = cvt(_double, prec, flags, &softsign,
 				&expt, ch, &ndig);
 			if (ch == 'g' || ch == 'G') {
-				if (expt <= -4 || expt > prec)
+				if (expt <= -4 || (expt > prec && expt > 1))
 					ch = (ch == 'g') ? 'e' : 'E';
 				else
 					ch = 'g';
@@ -798,6 +800,8 @@
 					size = expt;
 					if (prec || flags & ALT)
 						size += prec + 1;
+				} else if (!prec) { /* "0" */
+					size = 1;
 				} else	/* "0.X" */
 					size = prec + 2;
 			} else if (expt >= ndig) {	/* fixed g fmt */
@@ -1008,13 +1012,15 @@
 			if (ch >= 'f') {	/* 'f' or 'g' */
 				if (_double == 0) {
 				/* kludge for __dtoa irregularity */
-					if (prec == 0 ||
+					if (ndig <= 1 &&
 					    (flags & ALT) == 0) {
 						PRINT("0", 1);
 					} else {
 						PRINT("0.", 2);
 						PAD(ndig - 1, zeroes);
 					}
+				} else if (expt == 0 && ndig == 0 && (flags & ALT) == 0) {
+					PRINT("0", 1);
 				} else if (expt <= 0) {
 					PRINT("0.", 2);
 					PAD(-expt, zeroes);

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

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