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