On 3/11/19 10:16 AM, Jesse wrote:
> The latest coreutils no longer compiles cleanly on rhel5 x32 and x64
> (I know rhel5 is EOL).

Thanks for the bug report. I installed the attached patch into Gnulib.
Would you please give it a try and report back? I can't easily test on
RHEL 5. Thanks.

>From 0562b040fa17f1722ba2b3096067b45d0582ca53 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Mon, 11 Mar 2019 16:40:29 -0700
Subject: [PATCH] strtod: fix clash with strtold

Problem reported for RHEL 5 by Jesse Caldwell (Bug#34817).
* lib/strtod.c (compute_minus_zero, minus_zero):
Simplify by remving the macro / external variable,
and having just a function.  User changed.  This avoids
the need for an external variable that might clash.
---
 ChangeLog    |  9 +++++++++
 lib/strtod.c | 11 +++++------
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index b633380b5..e5ba0caa4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2019-03-11  Paul Eggert  <egg...@cs.ucla.edu>
+
+	strtod: fix clash with strtold
+	Problem reported for RHEL 5 by Jesse Caldwell (Bug#34817).
+	* lib/strtod.c (compute_minus_zero, minus_zero):
+	Simplify by remving the macro / external variable,
+	and having just a function.  User changed.  This avoids
+	the need for an external variable that might clash.
+
 2019-03-10  Bruno Haible  <br...@clisp.org>
 
 	alloca-opt: Fix conflict mingw's new <alloca.h> file.
diff --git a/lib/strtod.c b/lib/strtod.c
index b9eaa51b4..69b1564e1 100644
--- a/lib/strtod.c
+++ b/lib/strtod.c
@@ -294,16 +294,15 @@ parse_number (const char *nptr,
    ICC 10.0 has a bug when optimizing the expression -zero.
    The expression -MIN * MIN does not work when cross-compiling
    to PowerPC on Mac OS X 10.5.  */
-#if defined __hpux || defined __sgi || defined __ICC
 static DOUBLE
-compute_minus_zero (void)
+minus_zero (void)
 {
+#if defined __hpux || defined __sgi || defined __ICC
   return -MIN * MIN;
-}
-# define minus_zero compute_minus_zero ()
 #else
-DOUBLE minus_zero = -0.0;
+  return -0.0;
 #endif
+}
 
 /* Convert NPTR to a DOUBLE.  If ENDPTR is not NULL, a pointer to the
    character after the last one used in the number is put in *ENDPTR.  */
@@ -479,6 +478,6 @@ STRTOD (const char *nptr, char **endptr)
   /* Special case -0.0, since at least ICC miscompiles negation.  We
      can't use copysign(), as that drags in -lm on some platforms.  */
   if (!num && negative)
-    return minus_zero;
+    return minus_zero ();
   return negative ? -num : num;
 }
-- 
2.20.1

Reply via email to