Skip to content

Commit 964c30c

Browse files
committed
Use readinto
1 parent 3ce72a3 commit 964c30c

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

src/isal/isal_zlibmodule.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,24 +1323,23 @@ static inline ssize_t GzipReader_read_from_file(GzipReader *self)
13231323
current_pos = input_buffer;
13241324
buffer_end = input_buffer + remaining;
13251325
size_t read_in_size = self->buffer_size - remaining;
1326-
PyObject *new_bytes_obj = PyObject_CallMethod(self->fp, "read", "n", read_in_size);
1327-
if (new_bytes_obj == NULL) {
1326+
PyObject *bufview = PyMemoryView_FromMemory((char *)buffer_end, read_in_size, PyBUF_WRITE);
1327+
if (bufview == NULL) {
13281328
return -1;
13291329
}
1330-
if (!PyBytes_CheckExact(new_bytes_obj)) {
1331-
PyErr_Format(
1332-
PyExc_TypeError,
1333-
"fp did not return bytes upon calling read %R",
1334-
self->fp
1335-
);
1330+
PyObject *new_size_obj = PyObject_CallMethod(self->fp, "readinto", "O", bufview);
1331+
Py_DECREF(bufview);
1332+
if (new_size_obj == NULL) {
1333+
return -1;
1334+
}
1335+
Py_ssize_t new_size = PyLong_AsSsize_t(new_size_obj);
1336+
Py_DECREF(new_size_obj);
1337+
if (new_size < 0) {
13361338
return -1;
13371339
}
1338-
size_t new_size = PyBytes_GET_SIZE(new_bytes_obj);
13391340
if (new_size == 0) {
13401341
self->all_bytes_read = 1;
13411342
}
1342-
memcpy(buffer_end, PyBytes_AS_STRING(new_bytes_obj), new_size);
1343-
Py_DECREF(new_bytes_obj);
13441343
buffer_end += new_size;
13451344
self->current_pos = current_pos;
13461345
self->buffer_end = buffer_end;

0 commit comments

Comments
 (0)