diff options
author | TIGirardi <tiagoigirardi@gmail.com> | 2020-10-20 11:39:52 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-20 11:39:52 (GMT) |
commit | f2312037e3a974d26ed3e23884f94c6af111a27a (patch) | |
tree | 526751eda29e5bc7bffed8dcb7a5e87c5074d6c7 /Python | |
parent | d5d052127059fd99c90ea7a2e948a0242a1d7285 (diff) | |
download | cpython-f2312037e3a974d26ed3e23884f94c6af111a27a.zip cpython-f2312037e3a974d26ed3e23884f94c6af111a27a.tar.gz cpython-f2312037e3a974d26ed3e23884f94c6af111a27a.tar.bz2 |
bpo-38324: Fix test__locale.py Windows failures (GH-20529)
Use wide-char _W_* fields of lconv structure on Windows
Remove "ps_AF" from test__locale.known_numerics on Windows
Diffstat (limited to 'Python')
-rw-r--r-- | Python/fileutils.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/Python/fileutils.c b/Python/fileutils.c index b79067f..e125ba4 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -2047,6 +2047,7 @@ _Py_GetLocaleconvNumeric(struct lconv *lc, assert(decimal_point != NULL); assert(thousands_sep != NULL); +#ifndef MS_WINDOWS int change_locale = 0; if ((strlen(lc->decimal_point) > 1 || ((unsigned char)lc->decimal_point[0]) > 127)) { change_locale = 1; @@ -2085,14 +2086,20 @@ _Py_GetLocaleconvNumeric(struct lconv *lc, } } +#define GET_LOCALE_STRING(ATTR) PyUnicode_DecodeLocale(lc->ATTR, NULL) +#else /* MS_WINDOWS */ +/* Use _W_* fields of Windows strcut lconv */ +#define GET_LOCALE_STRING(ATTR) PyUnicode_FromWideChar(lc->_W_ ## ATTR, -1) +#endif /* MS_WINDOWS */ + int res = -1; - *decimal_point = PyUnicode_DecodeLocale(lc->decimal_point, NULL); + *decimal_point = GET_LOCALE_STRING(decimal_point); if (*decimal_point == NULL) { goto done; } - *thousands_sep = PyUnicode_DecodeLocale(lc->thousands_sep, NULL); + *thousands_sep = GET_LOCALE_STRING(thousands_sep); if (*thousands_sep == NULL) { goto done; } @@ -2100,11 +2107,15 @@ _Py_GetLocaleconvNumeric(struct lconv *lc, res = 0; done: +#ifndef MS_WINDOWS if (loc != NULL) { setlocale(LC_CTYPE, oldloc); } PyMem_Free(oldloc); +#endif return res; + +#undef GET_LOCALE_STRING } /* Our selection logic for which function to use is as follows: |