diff -r 373797990f57 Modules/posixmodule.c --- a/Modules/posixmodule.c Mon Dec 02 02:56:02 2013 +0100 +++ b/Modules/posixmodule.c Mon Dec 02 12:03:59 2013 +0800 @@ -1315,10 +1315,16 @@ path_error(path_t *path) { #ifdef MS_WINDOWS - return PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, - 0, path->object); -#else - return PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path->object); + if (path) + return PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, + 0, path->object); + else + return PyErr_SetExcFromWindowsErr(PyExc_OSError, 0); +#else + if (path) + return PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path->object); + else + return PyErr_SetFromErrno(PyExc_OSError); #endif } @@ -3526,7 +3532,7 @@ Py_END_ALLOW_THREADS if (!result) { - return_value = path_error(&src); + return_value = path_error(NULL); goto exit; } #else @@ -3544,7 +3550,7 @@ Py_END_ALLOW_THREADS if (result) { - return_value = path_error(&src); + return_value = path_error(NULL); goto exit; } #endif @@ -4294,7 +4300,7 @@ Py_END_ALLOW_THREADS if (!result) { - return_value = path_error(&src); + return_value = path_error(NULL); goto exit; } @@ -4309,7 +4315,7 @@ Py_END_ALLOW_THREADS if (result) { - return_value = path_error(&src); + return_value = path_error(NULL); goto exit; } #endif @@ -7355,7 +7361,7 @@ Py_END_ALLOW_THREADS if (!result) { - return_value = path_error(&src); + return_value = path_error(NULL); goto exit; } @@ -7371,7 +7377,7 @@ Py_END_ALLOW_THREADS if (result) { - return_value = path_error(&src); + return_value = path_error(NULL); goto exit; } #endif