From ad89dc879473e932a2b2daadfa94e7405cb938dc Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Mon, 3 Apr 2006 12:26:26 +0000 Subject: [PATCH] Bug #1451503: allow unicode filenames in os.startfile(). --- Modules/posixmodule.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 50ee0e33925..db6f673b92c 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))