strtod: detect HP-UX 11.31 bug
authorEric Blake <ebb9@byu.net>
Tue, 24 Feb 2009 13:15:59 +0000 (06:15 -0700)
committerEric Blake <ebb9@byu.net>
Tue, 24 Feb 2009 13:15:59 +0000 (06:15 -0700)
* m4/strtod.m4 (gl_FUNC_STRTOD): Detect errno handling bug.
Reported by Gary V. Vaughan.

Signed-off-by: Eric Blake <ebb9@byu.net>
ChangeLog
m4/strtod.m4

index ec08cde..2338272 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-02-24  Eric Blake  <ebb9@byu.net>
+
+       strtod: detect HP-UX 11.31 bug
+       * m4/strtod.m4 (gl_FUNC_STRTOD): Detect errno handling bug.
+       Reported by Gary V. Vaughan.
+
 2009-02-23  Bruno Haible  <bruno@clisp.org>
 
        Fix invalid read past end of memory block.
index caaaa4b..1f301c2 100644 (file)
@@ -1,4 +1,4 @@
-# strtod.m4 serial 10
+# strtod.m4 serial 11
 dnl Copyright (C) 2002-2003, 2006-2009 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -18,6 +18,7 @@ AC_DEFUN([gl_FUNC_STRTOD],
       [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
 #include <stdlib.h>
 #include <math.h>
+#include <errno.h>
 /* Compare two numbers with ==.
    This is a separate function because IRIX 6.5 "cc -O" miscompiles an
    'x == x' test.  */
@@ -45,11 +46,13 @@ numeric_equal (double x, double y)
       return 1;
   }
   {
-    /* Many platforms do not parse infinities.  */
+    /* Many platforms do not parse infinities.  HP-UX 11.31 parses inf,
+       but mistakenly sets errno.  */
     const char *string = "inf";
     char *term;
+    errno = 0;
     double value = strtod (string, &term);
-    if (value != HUGE_VAL || term != (string + 3))
+    if (value != HUGE_VAL || term != (string + 3) || errno)
       return 1;
   }
   {