about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2007-04-16 23:28:39 +0000
committerUlrich Drepper <drepper@redhat.com>2007-04-16 23:28:39 +0000
commitd40e67f54ca528c1435419c3bf1868ba288308df (patch)
tree8f6b7253289bc8ed3ec7b2751794869e904ff50a
parent0fca3153e7dee01073bcb0c382fb3f6a6c487ef3 (diff)
downloadglibc-d40e67f54ca528c1435419c3bf1868ba288308df.tar.gz
glibc-d40e67f54ca528c1435419c3bf1868ba288308df.tar.xz
glibc-d40e67f54ca528c1435419c3bf1868ba288308df.zip
* stdio-common/printf_fp.c (___printf_fp): Fix exponent -4
	special case handling when wcp == wstartp + 1.  Fix a comment typo.
	* stdio-common/tfformat.c (sprint_doubles): Add a new testcase.
-rw-r--r--ChangeLog6
-rw-r--r--stdio-common/printf_fp.c13
-rw-r--r--stdio-common/tfformat.c1
3 files changed, 16 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index d69e5cb93e..2d809063f4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-04-13  Jakub Jelinek  <jakub@redhat.com>
+
+	* stdio-common/printf_fp.c (___printf_fp): Fix exponent -4
+	special case handling when wcp == wstartp + 1.  Fix a comment typo.
+	* stdio-common/tfformat.c (sprint_doubles): Add a new testcase.
+
 2007-03-30  Jakub Jelinek  <jakub@redhat.com>
 
 	* libio/libio.h (__underflow, __uflow, __overflow, __wunderflow,
diff --git a/stdio-common/printf_fp.c b/stdio-common/printf_fp.c
index c27c0d496c..9b796eac2f 100644
--- a/stdio-common/printf_fp.c
+++ b/stdio-common/printf_fp.c
@@ -990,7 +990,7 @@ ___printf_fp (FILE *fp,
 				       0))
 	      /* This is a special case: the rounded number is 1.0,
 		 the format is 'g' or 'G', and the alternative format
-		 is selected.  This means the result mist be "1.".  */
+		 is selected.  This means the result must be "1.".  */
 	      --added_zeros;
 	  }
 
@@ -1081,12 +1081,17 @@ ___printf_fp (FILE *fp,
 	    /* This is another special case.  The exponent of the number is
 	       really smaller than -4, which requires the 'e'/'E' format.
 	       But after rounding the number has an exponent of -4.  */
-	    assert (wcp >= wstartp + 2);
+	    assert (wcp >= wstartp + 1);
 	    assert (wstartp[0] == L'1');
 	    __wmemcpy (wstartp, L"0.0001", 6);
 	    wstartp[1] = decimalwc;
-	    wmemset (wstartp + 6, L'0', wcp - (wstartp + 2));
-	    wcp += 4;
+	    if (wcp >= wstartp + 2)
+	      {
+		wmemset (wstartp + 6, L'0', wcp - (wstartp + 2));
+		wcp += 4;
+	      }
+	    else
+	      wcp += 5;
 	  }
 	else
 	  {
diff --git a/stdio-common/tfformat.c b/stdio-common/tfformat.c
index 0370834e9f..259e2e0b18 100644
--- a/stdio-common/tfformat.c
+++ b/stdio-common/tfformat.c
@@ -4020,6 +4020,7 @@ sprint_double_type sprint_doubles[] =
   {__LINE__, 0.000956,			"0.001", "%#.0g"},
   {__LINE__, 0.000098,			"0.0001", "%#.0g"},
   {__LINE__, 0.0000996,			"0.00010", "%#.2g"},
+  {__LINE__, 9.999999999999999e-05,	"0.0001", "%g"},
 
   {0 }