mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Issue #20113: os.readv() and os.writev() now raise an OSError exception on
error instead of returning -1.
This commit is contained in:
parent
2bcbc14117
commit
57ddf78b6b
4 changed files with 36 additions and 10 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue