STINNER Victor <victor.stin...@gmail.com> added the comment:

decode_filename_mbcs.patch uses the "replace" error handler to decode
the filename on Windows. It should solve the issue.

----------
Added file: http://bugs.python.org/file26515/decode_filename_mbcs.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue15441>
_______________________________________
diff -r b127046831e2 Python/errors.c
--- a/Python/errors.c   Mon Jul 23 00:24:24 2012 -0500
+++ b/Python/errors.c   Wed Jul 25 15:40:52 2012 +0200
@@ -463,11 +463,22 @@ PyErr_SetFromErrnoWithFilenameObject(PyO
     return NULL;
 }
 
+static PyObject *
+decode_filename(const char *filename)
+{
+    if (!filename)
+        return NULL;
+#ifdef HAVE_MBCS
+    return PyUnicode_DecodeMBCS(filename, strlen(filename), "replace");
+#else
+    return PyUnicode_DecodeFSDefault(filename);
+#endif
+}
 
 PyObject *
 PyErr_SetFromErrnoWithFilename(PyObject *exc, const char *filename)
 {
-    PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL;
+    PyObject *name = decode_filename(filename);
     PyObject *result = PyErr_SetFromErrnoWithFilenameObject(exc, name);
     Py_XDECREF(name);
     return result;
@@ -558,7 +569,7 @@ PyObject *PyErr_SetExcFromWindowsErrWith
     int ierr,
     const char *filename)
 {
-    PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL;
+    PyObject *name = decode_filename(filename);
     PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc,
                                                                  ierr,
                                                                  name);
@@ -595,7 +606,7 @@ PyObject *PyErr_SetFromWindowsErrWithFil
     int ierr,
     const char *filename)
 {
-    PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL;
+    PyObject *name = decode_filename(filename);
     PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject(
                                                   PyExc_WindowsError,
                                                   ierr, name);
@@ -892,7 +903,7 @@ PyErr_SyntaxLocationEx(const char *filen
         }
     }
     if (filename != NULL) {
-        tmp = PyUnicode_DecodeFSDefault(filename);
+        tmp = decode_filename(filename);
         if (tmp == NULL)
             PyErr_Clear();
         else {
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to