]> granicus.if.org Git - python/commitdiff
Bug #1451503: allow unicode filenames in os.startfile().
authorGeorg Brandl <georg@python.org>
Mon, 3 Apr 2006 12:26:26 +0000 (12:26 +0000)
committerGeorg Brandl <georg@python.org>
Mon, 3 Apr 2006 12:26:26 +0000 (12:26 +0000)
Modules/posixmodule.c

index 50ee0e33925e97adfb6b7fb2115276fc8725c2be..db6f673b92cedff844b595782c39309766520a1d 100644 (file)
@@ -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))