Skip to content

Commit 8a539d0

Browse files
committed
BytesIO readinto()
1 parent 9e924bc commit 8a539d0

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

Lib/pickle.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,6 @@ def commit_frame(self, force=False):
218218
if self.current_frame:
219219
f = self.current_frame
220220
if f.tell() >= self._FRAME_SIZE_TARGET or force:
221-
# XXX RUSTPYTHON TODO: memoryview + BytesIO.getbuffer()
222221
# data = f.getbuffer()
223222
data = f.getvalue()
224223
write = self.file_write
@@ -1387,10 +1386,8 @@ def load_bytearray8(self):
13871386
if len > maxsize:
13881387
raise UnpicklingError("BYTEARRAY8 exceeds system's maximum size "
13891388
"of %d bytes" % maxsize)
1390-
# XXX RUSTPYTHON TODO: BytesIO.readinto()
1391-
# b = bytearray(len)
1392-
# self.readinto(b)
1393-
b = self.read(len)
1389+
b = bytearray(len)
1390+
self.readinto(b)
13941391
self.append(b)
13951392
dispatch[BYTEARRAY8[0]] = load_bytearray8
13961393

vm/src/stdlib/io.rs

+12-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ mod _io {
1717
use num_traits::ToPrimitive;
1818
use std::io::{self, prelude::*, Cursor, SeekFrom};
1919

20-
use crate::byteslike::PyBytesLike;
20+
use crate::byteslike::{PyBytesLike, PyRwBytesLike};
2121
use crate::common::cell::{PyRwLock, PyRwLockWriteGuard};
2222
use crate::exceptions::{IntoPyException, PyBaseExceptionRef};
2323
use crate::function::{Args, KwArgs, OptionalArg, OptionalOption, PyFuncArgs};
@@ -1007,6 +1007,17 @@ mod _io {
10071007
Ok(buf)
10081008
}
10091009

1010+
#[pymethod]
1011+
fn readinto(self, obj: PyRwBytesLike, vm: &VirtualMachine) -> PyResult<usize> {
1012+
let mut buf = self.buffer(vm)?;
1013+
let ret = buf
1014+
.cursor
1015+
.read(&mut *obj.borrow_value())
1016+
.map_err(|_| vm.new_value_error("Error readinto from Take".to_owned()))?;
1017+
1018+
Ok(ret)
1019+
}
1020+
10101021
//skip to the jth position
10111022
#[pymethod]
10121023
fn seek(

0 commit comments

Comments
 (0)