changeset 18377:e27b495de32b

strtod: port to z/OS * lib/strtod.c (strtod): Address a couple quirks in the z/OS implementation. strtod: port to z/OS * lib/strtod.c (strtod): Address a couple quirks in the z/OS implementation.
author Daniel Richard G <skunk@iSKUNK.ORG>
date Wed, 17 Aug 2016 17:36:24 -0700
parents ad12535b6d5c
children 296222d9cae1
files ChangeLog lib/strtod.c
diffstat 2 files changed, 17 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed Aug 17 17:24:11 2016 -0700
+++ b/ChangeLog	Wed Aug 17 17:36:24 2016 -0700
@@ -1,5 +1,15 @@
+2016-08-17  Daniel Richard G.  <skunk@iSKUNK.ORG>
+
+	strtod: port to z/OS
+	* lib/strtod.c (strtod): Address a couple quirks in the z/OS
+	implementation.
+
 2016-08-17  Paul Eggert  <eggert@cs.ucla.edu>
 
+	strtod: port to z/OS
+	* lib/strtod.c (strtod): Address a couple quirks in the z/OS
+	implementation.
+
 	regex, string: rename to avoid '__string'
 	* lib/regex.h, lib/string.in.h: Do not use the identifier
 	'__string', as it is effectively reserved by string.h on z/OS.
--- a/lib/strtod.c	Wed Aug 17 17:24:11 2016 -0700
+++ b/lib/strtod.c	Wed Aug 17 17:36:24 2016 -0700
@@ -239,7 +239,12 @@
       if (*s == '0' && c_tolower (s[1]) == 'x')
         {
           if (! c_isxdigit (s[2 + (s[2] == '.')]))
-            end = s + 1;
+            {
+              end = s + 1;
+
+              /* strtod() on z/OS returns ERANGE for "0x".  */
+              errno = 0;
+            }
           else if (end <= s + 2)
             {
               num = parse_number (s + 2, 16, 2, 4, 'p', &endbuf);
@@ -321,7 +326,7 @@
          better to use the underlying implementation's result, since a
          nice implementation populates the bits of the NaN according
          to interpreting n-char-sequence as a hexadecimal number.  */
-      if (s != end)
+      if (s != end || num == num)
         num = NAN;
       errno = saved_errno;
     }