+2019-01-31 Bruno Haible <bruno@clisp.org>
+
+ strtod, strtold: Work around HP-UX 11.31/ia64 bug.
+ * lib/strtod.c (STRTOD): When there is an extra character after the
+ exponent marker 'p', reparse the number.
+ * doc/posix-functions/strtod.texi: Document the HP-UX 11.31 bug.
+ * doc/posix-functions/strtold.texi: Likewise.
+
2019-01-29 Bruno Haible <bruno@clisp.org>
strtold: Add tests.
NetBSD 5.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1,
Solaris 11.4, mingw, MSVC 14.
+@item
+In hexadecimal floats, this function allows whitespace between @samp{p}
+and the exponent on some platforms:
+HP-UX 11.31/ia64.
+
@item
This function returns the wrong end pointer for @samp{0x1p} on some
platforms:
This function fails to parse C99 hexadecimal floating point on some
platforms:
IRIX 6.5, mingw.
+
+@item
+In hexadecimal floats, this function allows whitespace between @samp{p}
+and the exponent on some platforms:
+HP-UX 11.31/ia64.
@end itemize
Portability problems not fixed by Gnulib:
while (p < end && c_tolower (*p) != 'p')
p++;
if (p < end && ! c_isdigit (p[1 + (p[1] == '-' || p[1] == '+')]))
- end = p;
+ {
+ char *dup = strdup (s);
+ errno = saved_errno;
+ if (!dup)
+ {
+ /* Not really our day, is it. Rounding errors are
+ better than outright failure. */
+ num = parse_number (s + 2, 16, 2, 4, 'p', &endbuf);
+ }
+ else
+ {
+ dup[p - s] = '\0';
+ num = STRTOD (dup, &endbuf);
+ saved_errno = errno;
+ free (dup);
+ errno = saved_errno;
+ }
+ end = p;
+ }
}
}
else