Mercurial > cpython-lru_cache-weakref
diff Python/pythonrun.c @ 49611:9fc573fbaf5e
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.
| author | Christian Heimes <christian@cheimes.de> |
|---|---|
| date | Thu, 30 Oct 2008 21:40:04 +0000 |
| parents | dab7abb77e8f |
| children | efef5fc45a9a |
line wrap: on
line diff
--- a/Python/pythonrun.c Thu Oct 30 21:34:02 2008 +0000 +++ b/Python/pythonrun.c Thu Oct 30 21:40:04 2008 +0000 @@ -126,6 +126,37 @@ 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 @@ 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;
