Commit 92be9396 authored by Victor Stinner's avatar Victor Stinner

Issue #10780: PyErr_SetFromWindowsErrWithFilename() and

PyErr_SetExcFromWindowsErrWithFilename() decode the filename from the
filesystem encoding instead of UTF-8.
parent 83098a40
...@@ -219,8 +219,9 @@ in various ways. There is a separate error indicator for each thread. ...@@ -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 Similar to :c:func:`PyErr_SetFromWindowsErr`, with the additional behavior that
if *filename* is not *NULL*, it is passed to the constructor of if *filename* is not *NULL*, it is passed to the constructor of
:exc:`WindowsError` as a third parameter. *filename* is decoded from UTF-8. :exc:`WindowsError` as a third parameter. *filename* is decoded from the
Availability: Windows. filesystem encoding (:func:`sys.getfilesystemencoding`). Availability:
Windows.
.. c:function:: PyObject* PyErr_SetExcFromWindowsErrWithFilename(PyObject *type, int ierr, char *filename) .. c:function:: PyObject* PyErr_SetExcFromWindowsErrWithFilename(PyObject *type, int ierr, char *filename)
......
...@@ -202,7 +202,7 @@ PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilenameObject( ...@@ -202,7 +202,7 @@ PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilenameObject(
int, const char *); int, const char *);
PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename( PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename(
int ierr, int ierr,
const char *filename /* decoded from UTF-8 */ const char *filename, /* decoded from the filesystem encoding */
); );
#ifndef Py_LIMITED_API #ifndef Py_LIMITED_API
/* XXX redeclare to use WSTRING */ /* XXX redeclare to use WSTRING */
...@@ -215,7 +215,7 @@ PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject( ...@@ -215,7 +215,7 @@ PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject(
PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename( PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename(
PyObject *exc, PyObject *exc,
int ierr, int ierr,
const char *filename /* decoded from UTF-8 */ const char *filename, /* decoded from the filesystem encoding */
); );
#ifndef Py_LIMITED_API #ifndef Py_LIMITED_API
PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename( PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename(
......
...@@ -8,6 +8,10 @@ What's New in Python 3.2 Release Candidate 1 ...@@ -8,6 +8,10 @@ What's New in Python 3.2 Release Candidate 1
Core and Builtins 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 - Issue #10779: PyErr_WarnExplicit() decodes the filename from the filesystem
encoding instead of UTF-8. encoding instead of UTF-8.
......
...@@ -515,7 +515,7 @@ PyObject *PyErr_SetExcFromWindowsErrWithFilename( ...@@ -515,7 +515,7 @@ PyObject *PyErr_SetExcFromWindowsErrWithFilename(
int ierr, int ierr,
const char *filename) const char *filename)
{ {
PyObject *name = filename ? PyUnicode_FromString(filename) : NULL; PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL;
PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc, PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc,
ierr, ierr,
name); name);
...@@ -552,7 +552,7 @@ PyObject *PyErr_SetFromWindowsErrWithFilename( ...@@ -552,7 +552,7 @@ PyObject *PyErr_SetFromWindowsErrWithFilename(
int ierr, int ierr,
const char *filename) const char *filename)
{ {
PyObject *name = filename ? PyUnicode_FromString(filename) : NULL; PyObject *name = filename ? PyUnicode_DecodeFSDefault(filename) : NULL;
PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject( PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject(
PyExc_WindowsError, PyExc_WindowsError,
ierr, name); ierr, name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment