mirror of
https://github.com/python/cpython.git
synced 2025-08-05 09:28:41 +00:00
Issue #4213: The file system encoding is now normalized by the codec subsystem, for example UTF-8 is turned into utf-8.
Patch created by Victor and reviewed by me. The change is required for proper initialization of subinterpreters.
This commit is contained in:
parent
9c94ba4e7d
commit
5833a2f6fd
2 changed files with 35 additions and 9 deletions
|
@ -126,6 +126,37 @@ add_flag(int flag, const char *envs)
|
|||
return flag;
|
||||
}
|
||||
|
||||
#if defined(HAVE_LANGINFO_H) && defined(CODESET)
|
||||
static char*
|
||||
get_codeset(void)
|
||||
{
|
||||
char* codeset;
|
||||
PyObject *codec, *name;
|
||||
|
||||
codeset = nl_langinfo(CODESET);
|
||||
if (!codeset || codeset[0] == '\0')
|
||||
return NULL;
|
||||
|
||||
codec = _PyCodec_Lookup(codeset);
|
||||
if (!codec)
|
||||
goto error;
|
||||
|
||||
name = PyObject_GetAttrString(codec, "name");
|
||||
Py_CLEAR(codec);
|
||||
if (!name)
|
||||
goto error;
|
||||
|
||||
codeset = strdup(_PyUnicode_AsString(name));
|
||||
Py_DECREF(name);
|
||||
return codeset;
|
||||
|
||||
error:
|
||||
Py_XDECREF(codec);
|
||||
PyErr_Clear();
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
Py_InitializeEx(int install_sigs)
|
||||
{
|
||||
|
@ -257,15 +288,7 @@ Py_InitializeEx(int install_sigs)
|
|||
initialized by other means. Also set the encoding of
|
||||
stdin and stdout if these are terminals. */
|
||||
|
||||
codeset = nl_langinfo(CODESET);
|
||||
if (codeset && *codeset) {
|
||||
if (PyCodec_KnownEncoding(codeset))
|
||||
codeset = strdup(codeset);
|
||||
else
|
||||
codeset = NULL;
|
||||
} else
|
||||
codeset = NULL;
|
||||
|
||||
codeset = get_codeset();
|
||||
if (codeset) {
|
||||
if (!Py_FileSystemDefaultEncoding)
|
||||
Py_FileSystemDefaultEncoding = codeset;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue