summaryrefslogtreecommitdiff
path: root/stdlib/strtod.c
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/strtod.c')
-rw-r--r--stdlib/strtod.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/stdlib/strtod.c b/stdlib/strtod.c
index 760ecd26a7..e0c9b08031 100644
--- a/stdlib/strtod.c
+++ b/stdlib/strtod.c
@@ -34,6 +34,8 @@
# define SET_MANTISSA(flt, mant) \
do { union ieee754_double u; \
u.d = (flt); \
+ if ((mant & 0xfffffffffffffULL) == 0) \
+ mant = 0x8000000000000ULL; \
u.ieee.mantissa0 = ((mant) >> 32) & 0xfffff; \
u.ieee.mantissa1 = (mant) & 0xffffffff; \
} while (0)
@@ -627,7 +629,8 @@ INTERNAL (STRTOF) (nptr, endptr, group)
expp = cp;
/* Read exponent. */
- if (TOLOWER (c) == (base == 16 ? L_('p') : L_('e')))
+ if ((base == 16 && TOLOWER (c) == L_('p'))
+ || (base != 16 && TOLOWER (c) == L_('e')))
{
int exp_negative = 0;