diff Modules/main.c @ 63792:275acfcccccb

Issue #9425: Create run_command() subfunction Use PyUnicode_AsUTF8String() instead of _PyUnicode_AsString()
author Victor Stinner <victor.stinner@haypocalc.com>
date Sat, 07 Aug 2010 10:57:17 +0000
parents b7f71f60437b
children 0ed665e8a115
line wrap: on
line diff
--- a/Modules/main.c	Sat Aug 07 10:09:35 2010 +0000
+++ b/Modules/main.c	Sat Aug 07 10:57:17 2010 +0000
@@ -253,6 +253,28 @@
     }
 }
 
+static int
+run_command(wchar_t *command, PyCompilerFlags *cf)
+{
+    PyObject *unicode, *bytes;
+    int ret;
+
+    unicode = PyUnicode_FromWideChar(command, -1);
+    if (unicode == NULL)
+        goto error;
+    bytes = PyUnicode_AsUTF8String(unicode);
+    Py_DECREF(unicode);
+    if (bytes == NULL)
+        goto error;
+    ret = PyRun_SimpleStringFlags(PyBytes_AsString(bytes), cf);
+    Py_DECREF(bytes);
+    return ret != 0;
+
+error:
+    PyErr_Print();
+    return 1;
+}
+
 
 /* Main program */
 
@@ -564,22 +586,8 @@
     }
 
     if (command) {
-        char *commandStr;
-        PyObject *commandObj = PyUnicode_FromWideChar(
-            command, wcslen(command));
+        sts = run_command(command, &cf);
         free(command);
-        if (commandObj != NULL)
-            commandStr = _PyUnicode_AsString(commandObj);
-        else
-            commandStr = NULL;
-        if (commandStr != NULL) {
-            sts = PyRun_SimpleStringFlags(commandStr, &cf) != 0;
-            Py_DECREF(commandObj);
-        }
-        else {
-            PyErr_Print();
-            sts = 1;
-        }
     } else if (module) {
         sts = RunModule(module, 1);
     }