[BZ #274]
authorUlrich Drepper <drepper@redhat.com>
Sun, 25 Jul 2004 03:31:54 +0000 (03:31 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sun, 25 Jul 2004 03:31:54 +0000 (03:31 +0000)
Update.
2004-07-21  Jakub Jelinek  <jakub@redhat.com>

[BZ #274]
* stdlib/strtod_l.c (INTERNAL (__STRTOF)): Fix used >=
BITS_PER_MP_LIMB shifting up.
* stdlib/tst-strtod.c (main): Add new tests.

ChangeLog
stdlib/strtod_l.c
stdlib/tst-strtod.c

index 2dcdb0d..b3e9660 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2004-07-21  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #274]
+       * stdlib/strtod_l.c (INTERNAL (__STRTOF)): Fix used >=
+       BITS_PER_MP_LIMB shifting up.
+       * stdlib/tst-strtod.c (main): Add new tests.
+
 2004-07-23  Jakub Jelinek  <jakub@redhat.com>
 
        [BZ #282]
index 9eca802..dce65cb 100644 (file)
@@ -1484,7 +1484,7 @@ INTERNAL (__STRTOF) (nptr, endptr, group, loc)
                                                       / BITS_PER_MP_LIMB],
                                               retval, RETURN_LIMB_SIZE,
                                               used % BITS_PER_MP_LIMB);
-                         for (i = used / BITS_PER_MP_LIMB; i >= 0; --i)
+                         for (i = used / BITS_PER_MP_LIMB - 1; i >= 0; --i)
                            retval[i] = 0;
                        }
                      else if (used > 0)
index f9ab583..628e40c 100644 (file)
@@ -157,6 +157,21 @@ main (int argc, char ** argv)
       status = 1;
     }
 
+  static struct { const char *str; long double l; } ltests[] =
+    {
+      { "42.0000000000000000001", 42.0000000000000000001L },
+      { "42.00000000000000000001", 42.00000000000000000001L },
+      { "42.000000000000000000001", 42.000000000000000000001L }
+    };
+  int n;
+  for (n = 0; n < sizeof (ltests) / sizeof (ltests[0]); ++n)
+    if (strtold (ltests[n].str, NULL) != ltests[n].l)
+      {
+       printf ("ltests[%d]: %La != %La\n", n,
+               strtold (ltests[n].str, NULL), ltests[n].l);
+       status = 1;
+      }
+
   status |= long_dbl ();
 
   status |= locale_test ();