diff options
author | Коренберг Марк <socketpair@gmail.com> | 2017-08-14 13:55:16 (GMT) |
---|---|---|
committer | larryhastings <larry@hastings.org> | 2017-08-14 13:55:16 (GMT) |
commit | d4b93e21c2664d6a78e0656e7a7be0807be1c352 (patch) | |
tree | 3297bc642116c0d5dba018c00a67123b380c4d48 /Modules/posixmodule.c | |
parent | 48d9823a0ebde4dfab8bc154bb6df462fb2ee403 (diff) | |
download | cpython-d4b93e21c2664d6a78e0656e7a7be0807be1c352.zip cpython-d4b93e21c2664d6a78e0656e7a7be0807be1c352.tar.gz cpython-d4b93e21c2664d6a78e0656e7a7be0807be1c352.tar.bz2 |
bpo-31106: Fix handling of erros in posix_fallocate() and posix_fadvise() (#3000) (#3000)
Diffstat (limited to 'Modules/posixmodule.c')
-rw-r--r-- | Modules/posixmodule.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 2e5e79a..f057787 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -8917,11 +8917,16 @@ os_posix_fallocate_impl(PyObject *module, int fd, Py_off_t offset, Py_BEGIN_ALLOW_THREADS result = posix_fallocate(fd, offset, length); Py_END_ALLOW_THREADS - } while (result != 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); - if (result != 0) - return (!async_err) ? posix_error() : NULL; - Py_RETURN_NONE; + } while (result == EINTR && !(async_err = PyErr_CheckSignals())); + + if (result == 0) + Py_RETURN_NONE; + + if (async_err) + return NULL; + + errno = result; + return posix_error(); } #endif /* HAVE_POSIX_FALLOCATE) && !POSIX_FADVISE_AIX_BUG */ @@ -8959,11 +8964,16 @@ os_posix_fadvise_impl(PyObject *module, int fd, Py_off_t offset, Py_BEGIN_ALLOW_THREADS result = posix_fadvise(fd, offset, length, advice); Py_END_ALLOW_THREADS - } while (result != 0 && errno == EINTR && - !(async_err = PyErr_CheckSignals())); - if (result != 0) - return (!async_err) ? posix_error() : NULL; - Py_RETURN_NONE; + } while (result == EINTR && !(async_err = PyErr_CheckSignals())); + + if (result == 0) + Py_RETURN_NONE; + + if (async_err) + return NULL; + + errno = result; + return posix_error(); } #endif /* HAVE_POSIX_FADVISE && !POSIX_FADVISE_AIX_BUG */ |