changeset 11210:28a51f0d9605

strtod: detect HP-UX 11.31 bug * m4/strtod.m4 (gl_FUNC_STRTOD): Detect errno handling bug. Reported by Gary V. Vaughan. Signed-off-by: Eric Blake <ebb9@byu.net>
author Eric Blake <ebb9@byu.net>
date Tue, 24 Feb 2009 06:15:59 -0700
parents 7e4d159080dc
children 3070459611d3
files ChangeLog m4/strtod.m4
diffstat 2 files changed, 12 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Feb 24 12:34:41 2009 +0100
+++ b/ChangeLog	Tue Feb 24 06:15:59 2009 -0700
@@ -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.
--- a/m4/strtod.m4	Tue Feb 24 12:34:41 2009 +0100
+++ b/m4/strtod.m4	Tue Feb 24 06:15:59 2009 -0700
@@ -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_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 @@
       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;
   }
   {