mirror of
https://github.com/python/cpython.git
synced 2025-08-11 04:19:06 +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
|
@ -15,6 +15,9 @@ What's New in Python 3.0 beta 5
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #4213: The file system encoding is now normalized by the
|
||||||
|
codec subsystem, for example UTF-8 is turned into utf-8.
|
||||||
|
|
||||||
- Issue #4200: Changed the atexit module to store its state in its
|
- Issue #4200: Changed the atexit module to store its state in its
|
||||||
PyModuleDef atexitmodule. This fixes a bug with multiple subinterpeters.
|
PyModuleDef atexitmodule. This fixes a bug with multiple subinterpeters.
|
||||||
|
|
||||||
|
|
|
@ -126,6 +126,37 @@ add_flag(int flag, const char *envs)
|
||||||
return flag;
|
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
|
void
|
||||||
Py_InitializeEx(int install_sigs)
|
Py_InitializeEx(int install_sigs)
|
||||||
{
|
{
|
||||||
|
@ -257,15 +288,7 @@ Py_InitializeEx(int install_sigs)
|
||||||
initialized by other means. Also set the encoding of
|
initialized by other means. Also set the encoding of
|
||||||
stdin and stdout if these are terminals. */
|
stdin and stdout if these are terminals. */
|
||||||
|
|
||||||
codeset = nl_langinfo(CODESET);
|
codeset = get_codeset();
|
||||||
if (codeset && *codeset) {
|
|
||||||
if (PyCodec_KnownEncoding(codeset))
|
|
||||||
codeset = strdup(codeset);
|
|
||||||
else
|
|
||||||
codeset = NULL;
|
|
||||||
} else
|
|
||||||
codeset = NULL;
|
|
||||||
|
|
||||||
if (codeset) {
|
if (codeset) {
|
||||||
if (!Py_FileSystemDefaultEncoding)
|
if (!Py_FileSystemDefaultEncoding)
|
||||||
Py_FileSystemDefaultEncoding = codeset;
|
Py_FileSystemDefaultEncoding = codeset;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue