From: Ulrich Drepper Date: Fri, 7 Apr 2000 03:57:06 +0000 (+0000) Subject: Handle hexadecimal numbers with leading digit != 1 correctly and more than X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5942ee569df05b5905cd7744b48b9759710bb101;p=thirdparty%2Fglibc.git Handle hexadecimal numbers with leading digit != 1 correctly and more than one digit before decimal point. --- diff --git a/stdlib/strtod.c b/stdlib/strtod.c index 7502799edf9..f2ff79f6df4 100644 --- a/stdlib/strtod.c +++ b/stdlib/strtod.c @@ -797,11 +797,15 @@ INTERNAL (STRTOF) (nptr, endptr, group LOCALE_PARAM) while (!ISXDIGIT (*startp)) ++startp; + while (*startp == L_('0')) + ++startp; if (ISDIGIT (*startp)) val = *startp++ - L_('0'); else val = 10 + TOLOWER (*startp++) - L_('a'); bits = nbits[val]; + /* We cannot have a leading zero. */ + assert (bits != 0); if (pos + 1 >= 4 || pos + 1 >= bits) { @@ -819,6 +823,9 @@ INTERNAL (STRTOF) (nptr, endptr, group LOCALE_PARAM) pos = BITS_PER_MP_LIMB - 1 - (bits - pos - 1); } + /* Adjust the exponent for the bits we are shifting in. */ + exponent += bits - 1 + (int_no - 1) * 4; + while (--dig_no > 0 && idx >= 0) { while (!ISXDIGIT (*startp))