This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.15-731-g8f203e6


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  8f203e6cb695daa219f8148e81e108c2da8137d4 (commit)
      from  5197d9c2b443eb6ae89ad9ae1eb8f655650d8d9f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=8f203e6cb695daa219f8148e81e108c2da8137d4

commit 8f203e6cb695daa219f8148e81e108c2da8137d4
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Fri May 4 10:44:39 2012 +0000

    Fix strtod rounding of hex values (bug 14049).

diff --git a/ChangeLog b/ChangeLog
index 8c98f01..447d4a0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-05-04  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #14049]
+	* stdlib/strtod_l.c (____STRTOF_INTERNAL): Check for trailing
+	nonzero digits before rounding a hex value.
+	* stdlib/tst-strtod.c (tests): Add another test.
+
 2012-05-03  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
 	* sysdeps/s390/fpu/libm-test-ulps: Update.
diff --git a/NEWS b/NEWS
index 2183197..0873b2f 100644
--- a/NEWS
+++ b/NEWS
@@ -23,7 +23,7 @@ Version 2.16
   13872, 13873, 13879, 13883, 13886, 13892, 13895, 13908, 13910, 13911,
   13912, 13913, 13915, 13916, 13917, 13918, 13919, 13920, 13921, 13924,
   13926, 13927, 13928, 13938, 13941, 13942, 13963, 13967, 13970, 13973,
-  14027, 14033, 14034, 14040, 14055
+  14027, 14033, 14034, 14040, 14049, 14055
 
 * ISO C11 support:
 
diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c
index 93ead75..2166a08 100644
--- a/stdlib/strtod_l.c
+++ b/stdlib/strtod_l.c
@@ -1,6 +1,5 @@
 /* Convert string representing a number to float value, using given locale.
-   Copyright (C) 1997,1998,2002,2004,2005,2006,2007,2008,2009,2010,2011
-   Free Software Foundation, Inc.
+   Copyright (C) 1997-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -994,8 +993,20 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
 	      retval[idx--] |= val >> (4 - pos - 1);
 	      val <<= BITS_PER_MP_LIMB - (4 - pos - 1);
 	      if (idx < 0)
-		return round_and_return (retval, exponent, negative, val,
-					 BITS_PER_MP_LIMB - 1, dig_no > 0);
+		{
+		  int rest_nonzero = 0;
+		  while (--dig_no > 0)
+		    {
+		      if (*startp != L_('0'))
+			{
+			  rest_nonzero = 1;
+			  break;
+			}
+		      startp++;
+		    }
+		  return round_and_return (retval, exponent, negative, val,
+					   BITS_PER_MP_LIMB - 1, rest_nonzero);
+		}
 
 	      retval[idx] = val;
 	      pos = BITS_PER_MP_LIMB - 1 - (4 - pos - 1);
diff --git a/stdlib/tst-strtod.c b/stdlib/tst-strtod.c
index 25bee78..738e73e 100644
--- a/stdlib/tst-strtod.c
+++ b/stdlib/tst-strtod.c
@@ -69,6 +69,11 @@ static const struct ltest tests[] =
     { "+InFiNiTy", HUGE_VAL, '\0', 0 },
     { "0x80000Ap-23", 0x80000Ap-23, '\0', 0 },
     { "1e-324", 0, '\0', ERANGE },
+    { "0x100000000000008p0", 0x1p56, '\0', 0 },
+    { "0x100000000000008.p0", 0x1p56, '\0', 0 },
+    { "0x100000000000008.00p0", 0x1p56, '\0', 0 },
+    { "0x10000000000000800p0", 0x1p64, '\0', 0 },
+    { "0x10000000000000801p0", 0x1.0000000000001p64, '\0', 0 },
     { NULL, 0, '\0', 0 }
   };
 

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog           |    7 +++++++
 NEWS                |    2 +-
 stdlib/strtod_l.c   |   19 +++++++++++++++----
 stdlib/tst-strtod.c |    5 +++++
 4 files changed, 28 insertions(+), 5 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]