diff options
-rw-r--r-- | Doc/c-api/exceptions.rst | 5 | ||||
-rw-r--r-- | Include/pyerrors.h | 4 | ||||
-rw-r--r-- | Misc/NEWS | 4 | ||||
-rw-r--r-- | Python/errors.c | 4 |
4 files changed, 11 insertions, 6 deletions
diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst index 24ca264ab6..d26e1200c7 100644 --- a/Doc/c-api/exceptions.rst +++ b/Doc/c-api/exceptions.rst @@ -219,8 +219,9 @@ in various ways. There is a separate error indicator for each thread. Similar to :c:func:`PyErr_SetFromWindowsErr`, with the additional behavior that if *filename* is not *NULL*, it is passed to the constructor of - :exc:`WindowsError` as a third parameter. *filename* is decoded from UTF-8. - Availability: Windows. + :exc:`WindowsError` as a third parameter. *filename* is decoded from the + filesystem encoding (:func:`sys.getfilesystemencoding`). Availability: + Windows. .. c:function:: PyObject* PyErr_SetExcFromWindowsErrWithFilename(PyObject *type, int ierr, char *filename) diff --git a/Include/pyerrors.h b/Include/pyerrors.h index 05c5ea8034..0f8bcf745f 100644 --- a/Include/pyerrors.h +++ b/Include/pyerrors.h @@ -202,7 +202,7 @@ PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilenameObject( int, const char *); PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename( int ierr, - const char *filename /* decoded from UTF-8 */ + const char *filename, /* decoded from the filesystem encoding */ ); #ifndef Py_LIMITED_API /* XXX redeclare to use WSTRING */ @@ -215,7 +215,7 @@ PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject( PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename( PyObject *exc, int ierr, - const char *filename /* decoded from UTF-8 */ + const char *filename, /* decoded from the filesystem encoding */ ); #ifndef Py_LIMITED_API PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename( @@ -8,6 +8,10 @@ What's New in Python 3.2 Release Candidate 1 Core and Builtins ----------------- +- Issue #10780: PyErr_SetFromWindowsErrWithFilename() and + PyErr_SetExcFromWindowsErrWithFilename() decode the filename from the + filesystem encoding instead of UTF-8. + - Issue #10779: PyErr_WarnExplicit() decodes the filename from the filesystem encoding instead of UTF-8. diff --git a/Python/errors.c b/Python/errors.c index d5a6fae0b4..5a9a624279 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -515,7 +515,7 @@ PyObject *PyErr_SetExcFromWindowsErrWithFilename( int ierr, const char *filename) { - PyObject *name = filename ? PyUnicode_FromString(filename) : NULL; + PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL; PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc, ierr, name); @@ -552,7 +552,7 @@ PyObject *PyErr_SetFromWindowsErrWithFilename( int ierr, const char *filename) { - PyObject *name = filename ? PyUnicode_FromString(filename) : NULL; + PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL; PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject( PyExc_WindowsError, ierr, name); |