]> granicus.if.org Git - python/commitdiff
Issue #8589: surrogateescape error handler is not available at startup
authorVictor Stinner <victor.stinner@haypocalc.com>
Fri, 10 Sep 2010 23:13:52 +0000 (23:13 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Fri, 10 Sep 2010 23:13:52 +0000 (23:13 +0000)
Py_Main() uses _Py_wchar2char() + PyUnicode_FromWideChar() instead of
PyUnicode_DecodeFSDefault(), because the PyCodec machinery is not ready yet.

Modules/main.c

index dc8d84c1e8eb953773e2efbfdb83eb50d6b8c1fa..71fb6fa98bb6adbca71c0a35556275841498c465 100644 (file)
@@ -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);