4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-01-19 04:49:25 +08:00

* libc/stdlib/strtod.c (_strtod_r): Fix nf/nd counts to not exceed

DBL_DIG.
This commit is contained in:
Corinna Vinschen 2011-05-16 13:34:06 +00:00
parent 883ea27df0
commit f783f223cb
2 changed files with 15 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2011-05-16 Christian Bruel <christian.bruel@st.com>
* libc/stdlib/strtod.c (_strtod_r): Fix nf/nd counts to not exceed
DBL_DIG.
2011-05-15 Corinna Vinschen <vinschen@redhat.com>
* libc/include/sys/features.h (_POSIX_THREAD_ATTR_STACKADDR): Define

View File

@ -309,8 +309,7 @@ _DEFUN (_strtod_r, (ptr, s00, se),
}
nd0 = nd;
if (strncmp (s, _localeconv_r (ptr)->decimal_point,
strlen (_localeconv_r (ptr)->decimal_point)) == 0)
{
strlen (_localeconv_r (ptr)->decimal_point)) == 0) {
decpt = 1;
c = *(s += strlen (_localeconv_r (ptr)->decimal_point));
if (!nd) {
@ -328,25 +327,28 @@ _DEFUN (_strtod_r, (ptr, s00, se),
have_dig:
nz++;
if (c -= '0') {
nf += nz;
for(i = 1; i < nz; i++) {
if (nd++ <= DBL_DIG + 1) {
if (nd < 10)
if (nd <= DBL_DIG + 1) {
if (nd + i < 10)
y *= 10;
else
z *= 10;
}
}
if (nd++ <= DBL_DIG + 1) {
if (nd < 10)
if (nd <= DBL_DIG + 1) {
if (nd + i < 10)
y = 10*y + c;
else
z = 10*z + c;
}
nz = 0;
if (nd <= DBL_DIG + 1) {
nf += nz;
nd += nz;
}
nz = 0;
}
}
}
dig_done:
e = 0;
if (c == 'e' || c == 'E') {