diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2009-06-16 17:44:20 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2009-06-16 17:44:20 +0000 |
commit | 1c5e84dd0870cd463d97f2b9183a807c3f711f2f (patch) | |
tree | d85b95c8902bcc48be771c159884be1e4e154713 /newlib/libc/stdio/vfprintf.c | |
parent | 1a99b6f85a123a1430ef41a3b2ae79eef7c0f768 (diff) | |
download | cygnal-1c5e84dd0870cd463d97f2b9183a807c3f711f2f.tar.gz cygnal-1c5e84dd0870cd463d97f2b9183a807c3f711f2f.tar.bz2 cygnal-1c5e84dd0870cd463d97f2b9183a807c3f711f2f.zip |
* libc/stdio/vfprintf.c (_VFPRINTF_R): Use actual length of
radix char instead of assuming length 1.
* libc/stdlib/gdtoa-gethex.c: Remove use of USE_LOCALE.
(gethex): Allow multibyte decimal point.
Fix compiler warnings due to different signedness of pointer types.
* libc/stdlib/strtod.c: Remove use of USE_LOCALE.
(_strtod_r): Allow multibyte decimal point.
* libc/stdlib/wcstod.c (_wcstod_r): Evaluate correct wide char
endptr position if the decimal point is a multibyte char.
Diffstat (limited to 'newlib/libc/stdio/vfprintf.c')
-rw-r--r-- | newlib/libc/stdio/vfprintf.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/newlib/libc/stdio/vfprintf.c b/newlib/libc/stdio/vfprintf.c index 3497bac80..1d3119b4d 100644 --- a/newlib/libc/stdio/vfprintf.c +++ b/newlib/libc/stdio/vfprintf.c @@ -553,6 +553,7 @@ _DEFUN(_VFPRINTF_R, (data, fp, fmt0, ap), char sign; /* sign prefix (' ', '+', '-', or \0) */ #ifdef FLOATING_POINT char *decimal_point = _localeconv_r (data)->decimal_point; + size_t decp_len = strlen (decimal_point); char softsign; /* temporary negative sign for floats */ union { int i; _PRINTF_FLOAT_TYPE fp; } _double_ = {0}; # define _fpvalue (_double_.fp) @@ -1441,13 +1442,13 @@ number: if ((dprec = prec) >= 0) /* kludge for __dtoa irregularity */ PRINT ("0", 1); if (expt < ndig || flags & ALT) { - PRINT (decimal_point, 1); + PRINT (decimal_point, decp_len); PAD (ndig - 1, zeroes); } } else if (expt <= 0) { PRINT ("0", 1); if (expt || ndig || flags & ALT) { - PRINT (decimal_point, 1); + PRINT (decimal_point, decp_len); PAD (-expt, zeroes); PRINT (cp, ndig); } @@ -1455,18 +1456,18 @@ number: if ((dprec = prec) >= 0) PRINT (cp, ndig); PAD (expt - ndig, zeroes); if (flags & ALT) - PRINT (decimal_point, 1); + PRINT (decimal_point, decp_len); } else { PRINT (cp, expt); cp += expt; - PRINT (decimal_point, 1); + PRINT (decimal_point, decp_len); PRINT (cp, ndig - expt); } } else { /* 'a', 'A', 'e', or 'E' */ if (ndig > 1 || flags & ALT) { PRINT (cp, 1); cp++; - PRINT (decimal_point, 1); + PRINT (decimal_point, decp_len); if (_fpvalue) { PRINT (cp, ndig - 1); } else /* 0.[0..] */ |