mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-23 13:09:58 +08:00
Handle hexadecimal numbers with leading digit != 1 correctly and more than
one digit before decimal point.
This commit is contained in:
parent
169a244f21
commit
5942ee569d
@ -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))
|
||||
|
Loading…
Reference in New Issue
Block a user