Issue #13560: os.strerror() now uses the current locale encoding instead of UTF-8

This commit is contained in:
Victor Stinner 2011-12-17 04:45:09 +01:00
parent f2ea71fcc8
commit 1f33f2b0c3
5 changed files with 35 additions and 20 deletions

View file

@ -3132,6 +3132,7 @@ PyUnicode_EncodeLocale(PyObject *unicode, int surrogateescape)
wchar_t *wstr;
PyObject *bytes = NULL;
char *errmsg;
PyObject *reason;
PyObject *exc;
size_t error_pos;
@ -3193,17 +3194,28 @@ PyUnicode_EncodeLocale(PyObject *unicode, int surrogateescape)
encode_error:
errmsg = strerror(errno);
assert(errmsg != NULL);
if (errmsg == NULL)
errmsg = "wcstombs() encountered an unencodable wide character";
PyMem_Free(wstr);
Py_XDECREF(bytes);
exc = NULL;
raise_encode_exception(&exc,
"locale", unicode,
error_pos, error_pos+1,
errmsg);
Py_XDECREF(exc);
if (errmsg != NULL)
reason = PyUnicode_DecodeLocale(errmsg, 1);
else
reason = PyUnicode_FromString(
"wcstombs() encountered an unencodable "
"wide character");
if (reason == NULL)
return NULL;
exc = PyObject_CallFunction(PyExc_UnicodeEncodeError, "sOnnO",
"locale", unicode,
(Py_ssize_t)error_pos,
(Py_ssize_t)(error_pos+1),
reason);
Py_DECREF(reason);
if (exc != NULL) {
PyCodec_StrictErrors(exc);
Py_XDECREF(exc);
}
return NULL;
}