summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2010-12-28 00:28:21 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2010-12-28 00:28:21 (GMT)
commit92be939695a43f039f3ef0d0d5fe55dc67607f70 (patch)
treecf750b1451b8a13650946ec62569ba95a985c64a
parent83098a4095a66b6562db88802fec5ea108414d58 (diff)
downloadcpython-92be939695a43f039f3ef0d0d5fe55dc67607f70.zip
cpython-92be939695a43f039f3ef0d0d5fe55dc67607f70.tar.gz
cpython-92be939695a43f039f3ef0d0d5fe55dc67607f70.tar.bz2
Issue #10780: PyErr_SetFromWindowsErrWithFilename() and
PyErr_SetExcFromWindowsErrWithFilename() decode the filename from the filesystem encoding instead of UTF-8.
-rw-r--r--Doc/c-api/exceptions.rst5
-rw-r--r--Include/pyerrors.h4
-rw-r--r--Misc/NEWS4
-rw-r--r--Python/errors.c4
4 files changed, 11 insertions, 6 deletions
diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst
index 24ca264..d26e120 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 05c5ea8..0f8bcf7 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(
diff --git a/Misc/NEWS b/Misc/NEWS
index 4fb23c3..7d2085a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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 d5a6fae..5a9a624 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);