[Python-checkins] bpo-34403: Fix initfsencoding() for ASCII (GH-10233)
Victor Stinner
webhook-mailer at python.org
Tue Oct 30 07:59:24 EDT 2018
https://github.com/python/cpython/commit/21220bbe65108f5a763ead24a6b572f80d84c9e2
commit: 21220bbe65108f5a763ead24a6b572f80d84c9e2
branch: 3.7
author: Victor Stinner <vstinner at redhat.com>
committer: GitHub <noreply at github.com>
date: 2018-10-30T12:59:20+01:00
summary:
bpo-34403: Fix initfsencoding() for ASCII (GH-10233)
* Add _Py_GetForceASCII(): check if Python forces the usage of ASCII
in Py_DecodeLocale() and Py_EncodeLocale().
* initfsencoding() now uses ASCII if _Py_GetForceASCII() is true.
files:
M Include/fileutils.h
M Python/fileutils.c
M Python/pylifecycle.c
diff --git a/Include/fileutils.h b/Include/fileutils.h
index c05ff43f5163..d75189a95c50 100644
--- a/Include/fileutils.h
+++ b/Include/fileutils.h
@@ -183,6 +183,10 @@ PyAPI_FUNC(int) _Py_GetLocaleconvNumeric(
#endif /* Py_LIMITED_API */
+#ifdef Py_BUILD_CORE
+PyAPI_FUNC(int) _Py_GetForceASCII(void);
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/Python/fileutils.c b/Python/fileutils.c
index e72ce543cb68..1b7e6697c74a 100644
--- a/Python/fileutils.c
+++ b/Python/fileutils.c
@@ -180,6 +180,18 @@ check_force_ascii(void)
return 1;
}
+
+int
+_Py_GetForceASCII(void)
+{
+ if (force_ascii == -1) {
+ force_ascii = check_force_ascii();
+ }
+ return force_ascii;
+}
+
+
+
static int
encode_ascii(const wchar_t *text, char **str,
size_t *error_pos, const char **reason,
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index ba4b54864fd8..c01b21ffebad 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -1615,6 +1615,10 @@ initfsencoding(PyInterpreterState *interp)
Py_FileSystemDefaultEncoding = "utf-8";
Py_HasFileSystemDefaultEncoding = 1;
}
+ else if (_Py_GetForceASCII()) {
+ Py_FileSystemDefaultEncoding = "ascii";
+ Py_HasFileSystemDefaultEncoding = 1;
+ }
else if (Py_FileSystemDefaultEncoding == NULL) {
Py_FileSystemDefaultEncoding = get_locale_encoding();
if (Py_FileSystemDefaultEncoding == NULL) {
More information about the Python-checkins
mailing list