summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2010-08-07 16:34:25 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2010-08-07 16:34:25 (GMT)
commit0a3ddad666d3c30f3b232a1825dc6d8e2de04b47 (patch)
tree8af4a1e1ccb7528f5215626efb2aaab837a5f916
parentaf43e9a288b98c6434ce3ee6fc2b9eb766775774 (diff)
downloadcpython-0a3ddad666d3c30f3b232a1825dc6d8e2de04b47.zip
cpython-0a3ddad666d3c30f3b232a1825dc6d8e2de04b47.tar.gz
cpython-0a3ddad666d3c30f3b232a1825dc6d8e2de04b47.tar.bz2
Issue #9425: Create run_file() subfunction
* Call Py_MakePendingCalls() before converting the filename from wchar_t* to char* * Use PyUnicode_AsUTF8String() instead of _PyUnicode_AsString()
-rw-r--r--Modules/main.c60
1 files changed, 36 insertions, 24 deletions
diff --git a/Modules/main.c b/Modules/main.c
index bebaab5..7929b05 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -275,6 +275,40 @@ error:
return 1;
}
+static int
+run_file(FILE *fp, const wchar_t *filename, PyCompilerFlags *p_cf)
+{
+ PyObject *unicode, *bytes = NULL;
+ char *filename_str;
+ int run;
+
+ /* call pending calls like signal handlers (SIGINT) */
+ if (Py_MakePendingCalls() == -1) {
+ PyErr_Print();
+ return 1;
+ }
+
+ if (filename) {
+ unicode = PyUnicode_FromWideChar(filename, wcslen(filename));
+ if (unicode != NULL) {
+ bytes = PyUnicode_AsUTF8String(unicode);
+ Py_DECREF(unicode);
+ }
+ if (bytes != NULL)
+ filename_str = PyBytes_AsString(bytes);
+ else {
+ PyErr_Clear();
+ filename_str = "<decoding error>";
+ }
+ }
+ else
+ filename_str = "<stdin>";
+
+ run = PyRun_AnyFileExFlags(fp, filename_str, filename != NULL, p_cf);
+ Py_XDECREF(bytes);
+ return run != 0;
+}
+
/* Main program */
@@ -644,30 +678,8 @@ Py_Main(int argc, wchar_t **argv)
}
}
- if (sts==-1) {
- PyObject *filenameObj = NULL;
- char *p_cfilename = "<stdin>";
- if (filename) {
- filenameObj = PyUnicode_FromWideChar(
- filename, wcslen(filename));
- if (filenameObj != NULL)
- p_cfilename = _PyUnicode_AsString(filenameObj);
- else
- p_cfilename = "<decoding error>";
- }
- /* call pending calls like signal handlers (SIGINT) */
- if (Py_MakePendingCalls() == -1) {
- PyErr_Print();
- sts = 1;
- } else {
- sts = PyRun_AnyFileExFlags(
- fp,
- p_cfilename,
- filename != NULL, &cf) != 0;
- }
- Py_XDECREF(filenameObj);
- }
-
+ if (sts == -1)
+ sts = run_file(fp, filename, &cf);
}
/* Check this environment variable at the end, to give programs the