diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2014-01-08 14:21:28 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2014-01-08 14:21:28 (GMT) |
commit | 57ddf78b6b18d9da6f466b4e6da0437c3271196e (patch) | |
tree | cf55257edc004a09f62e19d67668e30634f17712 /Modules | |
parent | 2bcbc141173e5cd2ed36693a71bed8d5a1a54dd4 (diff) | |
download | cpython-57ddf78b6b18d9da6f466b4e6da0437c3271196e.zip cpython-57ddf78b6b18d9da6f466b4e6da0437c3271196e.tar.gz cpython-57ddf78b6b18d9da6f466b4e6da0437c3271196e.tar.bz2 |
Issue #20113: os.readv() and os.writev() now raise an OSError exception on
error instead of returning -1.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/posixmodule.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index f97d70b..c00ca20 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -8050,14 +8050,14 @@ iov_setup(struct iovec **iov, Py_buffer **buf, PyObject *seq, int cnt, int type) *iov = PyMem_New(struct iovec, cnt); if (*iov == NULL) { PyErr_NoMemory(); - return total; + return -1; } *buf = PyMem_New(Py_buffer, cnt); if (*buf == NULL) { PyMem_Del(*iov); PyErr_NoMemory(); - return total; + return -1; } for (i = 0; i < cnt; i++) { @@ -8082,7 +8082,7 @@ fail: PyBuffer_Release(&(*buf)[j]); } PyMem_Del(*buf); - return 0; + return -1; } static void @@ -8122,7 +8122,7 @@ posix_readv(PyObject *self, PyObject *args) } cnt = PySequence_Size(seq); - if (!iov_setup(&iov, &buf, seq, cnt, PyBUF_WRITABLE)) + if (iov_setup(&iov, &buf, seq, cnt, PyBUF_WRITABLE) < 0) return NULL; Py_BEGIN_ALLOW_THREADS @@ -8130,6 +8130,9 @@ posix_readv(PyObject *self, PyObject *args) Py_END_ALLOW_THREADS iov_cleanup(iov, buf, cnt); + if (n < 0) + return posix_error(); + return PyLong_FromSsize_t(n); } #endif @@ -8254,8 +8257,8 @@ posix_sendfile(PyObject *self, PyObject *args, PyObject *kwdict) Py_ssize_t i = 0; /* Avoid uninitialized warning */ sf.hdr_cnt = PySequence_Size(headers); if (sf.hdr_cnt > 0 && - !(i = iov_setup(&(sf.headers), &hbuf, - headers, sf.hdr_cnt, PyBUF_SIMPLE))) + (i = iov_setup(&(sf.headers), &hbuf, + headers, sf.hdr_cnt, PyBUF_SIMPLE)) < 0) return NULL; #ifdef __APPLE__ sbytes += i; @@ -8271,8 +8274,8 @@ posix_sendfile(PyObject *self, PyObject *args, PyObject *kwdict) Py_ssize_t i = 0; /* Avoid uninitialized warning */ sf.trl_cnt = PySequence_Size(trailers); if (sf.trl_cnt > 0 && - !(i = iov_setup(&(sf.trailers), &tbuf, - trailers, sf.trl_cnt, PyBUF_SIMPLE))) + (i = iov_setup(&(sf.trailers), &tbuf, + trailers, sf.trl_cnt, PyBUF_SIMPLE)) < 0) return NULL; #ifdef __APPLE__ sbytes += i; @@ -8483,7 +8486,7 @@ posix_writev(PyObject *self, PyObject *args) } cnt = PySequence_Size(seq); - if (!iov_setup(&iov, &buf, seq, cnt, PyBUF_SIMPLE)) { + if (iov_setup(&iov, &buf, seq, cnt, PyBUF_SIMPLE) < 0) { return NULL; } @@ -8492,6 +8495,9 @@ posix_writev(PyObject *self, PyObject *args) Py_END_ALLOW_THREADS iov_cleanup(iov, buf, cnt); + if (res < 0) + return posix_error(); + return PyLong_FromSsize_t(res); } #endif |