bpo-34523: Fix C locale coercion on FreeBSD CURRENT (GH-10672) (GH-10673)

bpo-34523, bpo-35290: C locale coercion now resets the Python
internal "force ASCII" mode. This change fix the filesystem encoding
on FreeBSD CURRENT, which has a new "C.UTF-8" locale, when
the UTF-8 mode is disabled.

Add _Py_ResetForceASCII(): _Py_SetLocaleFromEnv() now calls it.

(cherry picked from commit 353933e712)
This commit is contained in:
Victor Stinner 2018-11-23 13:37:42 +01:00 committed by GitHub
parent 95036ea25d
commit f6e323ce32
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 4 deletions

View file

@ -191,6 +191,12 @@ _Py_GetForceASCII(void)
}
void
_Py_ResetForceASCII(void)
{
force_ascii = -1;
}
static int
encode_ascii(const wchar_t *text, char **str,
@ -252,6 +258,12 @@ _Py_GetForceASCII(void)
{
return 0;
}
void
_Py_ResetForceASCII(void)
{
/* nothing to do */
}
#endif /* !defined(__APPLE__) && !defined(__ANDROID__) && !defined(MS_WINDOWS) */

View file

@ -523,6 +523,7 @@ defined(HAVE_LANGINFO_H) && defined(CODESET)
char *
_Py_SetLocaleFromEnv(int category)
{
char *res;
#ifdef __ANDROID__
const char *locale;
const char **pvar;
@ -569,10 +570,12 @@ _Py_SetLocaleFromEnv(int category)
}
}
#endif
return setlocale(category, utf8_locale);
#else /* __ANDROID__ */
return setlocale(category, "");
#endif /* __ANDROID__ */
res = setlocale(category, utf8_locale);
#else /* !defined(__ANDROID__) */
res = setlocale(category, "");
#endif
_Py_ResetForceASCII();
return res;
}