From: Victor Stinner Date: Fri, 10 Sep 2010 23:13:52 +0000 (+0000) Subject: Issue #8589: surrogateescape error handler is not available at startup X-Git-Tag: v3.2a3~332 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c2d76fd339f5fcc4f0051696e5e57c979289a9c3;p=thirdparty%2FPython%2Fcpython.git Issue #8589: surrogateescape error handler is not available at startup Py_Main() uses _Py_wchar2char() + PyUnicode_FromWideChar() instead of PyUnicode_DecodeFSDefault(), because the PyCodec machinery is not ready yet. --- diff --git a/Modules/main.c b/Modules/main.c index dc8d84c1e8eb..71fb6fa98bb6 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -488,7 +488,8 @@ Py_Main(int argc, wchar_t **argv) #else if ((p = Py_GETENV("PYTHONWARNINGS")) && *p != '\0') { char *buf, *oldloc; - PyObject *warning; + wchar_t *wchar; + PyObject *unicode; /* settle for strtok here as there's no one standard C89 wcstok */ @@ -500,11 +501,15 @@ Py_Main(int argc, wchar_t **argv) oldloc = strdup(setlocale(LC_ALL, NULL)); setlocale(LC_ALL, ""); for (p = strtok(buf, ","); p != NULL; p = strtok(NULL, ",")) { - warning = PyUnicode_DecodeFSDefault(p); - if (warning != NULL) { - PySys_AddWarnOptionUnicode(warning); - Py_DECREF(warning); - } + wchar = _Py_char2wchar(p); + if (wchar == NULL) + continue; + unicode = PyUnicode_FromWideChar(wchar, wcslen(wchar)); + PyMem_Free(wchar); + if (unicode == NULL) + continue; + PySys_AddWarnOptionUnicode(unicode); + Py_DECREF(unicode); } setlocale(LC_ALL, oldloc); free(oldloc);