gh-107916: Save the error code before decoding the filename in PyErr_SetFromErrnoWithFilename() etc (GH-107929)
(cherry picked from commit
80bdebdd8593f007a2232ec04a7729bba6ebf12c)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
--- /dev/null
+C API functions :c:func:`PyErr_SetFromErrnoWithFilename`,
+:c:func:`PyErr_SetExcFromWindowsErrWithFilename` and
+:c:func:`PyErr_SetFromWindowsErrWithFilename` save now the error code before
+calling :c:func:`PyUnicode_DecodeFSDefault`.
{
PyObject *name = NULL;
if (filename) {
+ int i = errno;
name = PyUnicode_DecodeFSDefault(filename);
if (name == NULL) {
return NULL;
}
+ errno = i;
}
PyObject *result = PyErr_SetFromErrnoWithFilenameObjects(exc, name, NULL);
Py_XDECREF(name);
{
PyObject *name = NULL;
if (filename) {
+ if ((DWORD)ierr == 0) {
+ ierr = (int)GetLastError();
+ }
name = PyUnicode_DecodeFSDefault(filename);
if (name == NULL) {
return NULL;
{
PyObject *name = NULL;
if (filename) {
+ if ((DWORD)ierr == 0) {
+ ierr = (int)GetLastError();
+ }
name = PyUnicode_DecodeFSDefault(filename);
if (name == NULL) {
return NULL;