_io__RawIOBase_readall_impl(PyObject *self)
/*[clinic end generated code: output=1987b9ce929425a0 input=688874141213622a]*/
{
- int r;
- PyObject *chunks = PyList_New(0);
- PyObject *result;
-
- if (chunks == NULL)
+ PyBytesWriter *writer = PyBytesWriter_Create(0);
+ if (writer == NULL) {
return NULL;
+ }
while (1) {
PyObject *data = _PyObject_CallMethod(self, &_Py_ID(read),
if (_PyIO_trap_eintr()) {
continue;
}
- Py_DECREF(chunks);
+ PyBytesWriter_Discard(writer);
return NULL;
}
if (data == Py_None) {
- if (PyList_GET_SIZE(chunks) == 0) {
- Py_DECREF(chunks);
+ if (PyBytesWriter_GetSize(writer) == 0) {
+ PyBytesWriter_Discard(writer);
return data;
}
Py_DECREF(data);
break;
}
if (!PyBytes_Check(data)) {
- Py_DECREF(chunks);
Py_DECREF(data);
PyErr_SetString(PyExc_TypeError, "read() should return bytes");
+ PyBytesWriter_Discard(writer);
return NULL;
}
if (PyBytes_GET_SIZE(data) == 0) {
Py_DECREF(data);
break;
}
- r = PyList_Append(chunks, data);
- Py_DECREF(data);
- if (r < 0) {
- Py_DECREF(chunks);
+ if (PyBytesWriter_WriteBytes(writer,
+ PyBytes_AS_STRING(data),
+ PyBytes_GET_SIZE(data)) < 0) {
+ Py_DECREF(data);
+ PyBytesWriter_Discard(writer);
return NULL;
}
+ Py_DECREF(data);
}
- result = PyBytes_Join((PyObject *)&_Py_SINGLETON(bytes_empty), chunks);
- Py_DECREF(chunks);
- return result;
+ return PyBytesWriter_Finish(writer);
}
static PyObject *