[Python-checkins] r43586 - python/trunk/Modules/posixmodule.c

georg.brandl python-checkins at python.org
Mon Apr 3 14:26:27 CEST 2006


Author: georg.brandl
Date: Mon Apr  3 14:26:26 2006
New Revision: 43586

Modified:
   python/trunk/Modules/posixmodule.c
Log:
Bug #1451503: allow unicode filenames in os.startfile().



Modified: python/trunk/Modules/posixmodule.c
==============================================================================
--- python/trunk/Modules/posixmodule.c	(original)
+++ python/trunk/Modules/posixmodule.c	Mon Apr  3 14:26:26 2006
@@ -7467,6 +7467,41 @@
 	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))


More information about the Python-checkins mailing list