Handle multibyte decimapl point in strtold.
* libc/stdlib/strtodg.c: Define USE_LOCALE. (_strtodg_r): Handle multibyte decimal point. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
63613c3cb0
commit
666a3482a5
|
@ -1,3 +1,8 @@
|
||||||
|
2015-11-21 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* libc/stdlib/strtodg.c: Define USE_LOCALE.
|
||||||
|
(_strtodg_r): Handle multibyte decimal point.
|
||||||
|
|
||||||
2015-11-20 Corinna Vinschen <corinna@vinschen.de>
|
2015-11-20 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* libc/stdlib/Makefile.am (GENERAL_SOURCES): Add strtodg.c and
|
* libc/stdlib/Makefile.am (GENERAL_SOURCES): Add strtodg.c and
|
||||||
|
|
|
@ -39,6 +39,8 @@ THIS SOFTWARE.
|
||||||
|
|
||||||
#include "locale.h"
|
#include "locale.h"
|
||||||
|
|
||||||
|
#define USE_LOCALE
|
||||||
|
|
||||||
static const int
|
static const int
|
||||||
fivesbits[] = { 0, 3, 5, 7, 10, 12, 14, 17, 19, 21,
|
fivesbits[] = { 0, 3, 5, 7, 10, 12, 14, 17, 19, 21,
|
||||||
24, 26, 28, 31, 33, 35, 38, 40, 42, 45,
|
24, 26, 28, 31, 33, 35, 38, 40, 42, 45,
|
||||||
|
@ -516,13 +518,18 @@ _strtodg_r
|
||||||
z = 10*z + c - '0';
|
z = 10*z + c - '0';
|
||||||
nd0 = nd;
|
nd0 = nd;
|
||||||
#ifdef USE_LOCALE
|
#ifdef USE_LOCALE
|
||||||
if (c == *localeconv()->decimal_point)
|
if (strncmp (s, _localeconv_r (p)->decimal_point,
|
||||||
|
strlen (_localeconv_r (p)->decimal_point)) == 0)
|
||||||
#else
|
#else
|
||||||
if (c == '.')
|
if (c == '.')
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
decpt = 1;
|
decpt = 1;
|
||||||
|
#ifdef USE_LOCALE
|
||||||
|
c = *(s += strlen (_localeconv_r (p)->decimal_point));
|
||||||
|
#else
|
||||||
c = *++s;
|
c = *++s;
|
||||||
|
#endif
|
||||||
if (!nd) {
|
if (!nd) {
|
||||||
for(; c == '0'; c = *++s)
|
for(; c == '0'; c = *++s)
|
||||||
nz++;
|
nz++;
|
||||||
|
|
Loading…
Reference in New Issue