summaryrefslogtreecommitdiffstats
path: root/Modules/posixmodule.c
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2006-04-03 12:26:26 (GMT)
committerGeorg Brandl <georg@python.org>2006-04-03 12:26:26 (GMT)
commitad89dc879473e932a2b2daadfa94e7405cb938dc (patch)
treef0936026528b3d047d941da341d0d9ee8646273c /Modules/posixmodule.c
parent59c3acc3cd5b08d0304e87e1b2b54a4f82bc4fc9 (diff)
downloadcpython-ad89dc879473e932a2b2daadfa94e7405cb938dc.zip
cpython-ad89dc879473e932a2b2daadfa94e7405cb938dc.tar.gz
cpython-ad89dc879473e932a2b2daadfa94e7405cb938dc.tar.bz2
Bug #1451503: allow unicode filenames in os.startfile().
Diffstat (limited to 'Modules/posixmodule.c')
-rw-r--r--Modules/posixmodule.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 50ee0e3..db6f673 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -7467,6 +7467,41 @@ win32_startfile(PyObject *self, PyObject *args)
char *filepath;
char *operation = NULL;
HINSTANCE rc;
+#ifdef Py_WIN_WIDE_FILENAMES
+ if (unicode_file_names()) {
+ PyObject *unipath, *woperation;
+ if (!PyArg_ParseTuple(args, "U|s:startfile",
+ &unipath, &operation)) {
+ PyErr_Clear();
+ goto normal;
+ }
+
+ woperation = PyUnicode_DecodeASCII(operation,
+ strlen(operation), NULL);
+ if (!woperation) {
+ PyErr_Clear();
+ goto normal;
+ }
+
+ Py_BEGIN_ALLOW_THREADS
+ rc = ShellExecuteW((HWND)0, operation,
+ PyUnicode_AS_UNICODE(unipath),
+ PyUnicode_AS_UNICODE(woperation),
+ NULL, NULL, SW_SHOWNORMAL);
+ Py_END_ALLOW_THREADS
+
+ Py_DECREF(woperation);
+ if (rc <= (HINSTANCE)32) {
+ PyObject *errval = win32_error_unicode("startfile",
+ PyUnicode_AS_UNICODE(unipath));
+ return errval;
+ }
+ Py_INCREF(Py_None);
+ return Py_None;
+ }
+#endif
+
+normal:
if (!PyArg_ParseTuple(args, "et|s:startfile",
Py_FileSystemDefaultEncoding, &filepath,
&operation))