From cb064fc2321ce8673fe365e9ef60445a27657f54 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 15 Jan 2018 15:58:02 +0100 Subject: bpo-31900: Fix localeconv() encoding for LC_NUMERIC (#4174) * Add _Py_GetLocaleconvNumeric() function: decode decimal_point and thousands_sep fields of localeconv() from the LC_NUMERIC encoding, rather than decoding from the LC_CTYPE encoding. * Modify locale.localeconv() and "n" formatter of str.format() (for int, float and complex to use _Py_GetLocaleconvNumeric() internally. --- Python/formatter_unicode.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) (limited to 'Python/formatter_unicode.c') diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c index 397ae7faaf..71e673d9f8 100644 --- a/Python/formatter_unicode.c +++ b/Python/formatter_unicode.c @@ -704,18 +704,11 @@ get_locale_info(enum LocaleType type, LocaleInfo *locale_info) { switch (type) { case LT_CURRENT_LOCALE: { - struct lconv *locale_data = localeconv(); - locale_info->decimal_point = PyUnicode_DecodeLocale( - locale_data->decimal_point, - NULL); - if (locale_info->decimal_point == NULL) + if (_Py_GetLocaleconvNumeric(&locale_info->decimal_point, + &locale_info->thousands_sep, + &locale_info->grouping) < 0) { return -1; - locale_info->thousands_sep = PyUnicode_DecodeLocale( - locale_data->thousands_sep, - NULL); - if (locale_info->thousands_sep == NULL) - return -1; - locale_info->grouping = locale_data->grouping; + } break; } case LT_DEFAULT_LOCALE: -- cgit v1.2.1