MCPcopy Index your code
hub / github.com/RustPython/RustPython / read_all

Method read_all

crates/vm/src/stdlib/_io.rs:1375–1444  ·  view source on GitHub ↗
(&mut self, vm: &VirtualMachine)

Source from the content-addressed store, hash-verified

1373 }
1374
1375 fn read_all(&mut self, vm: &VirtualMachine) -> PyResult<Option<PyBytesRef>> {
1376 let buf = self.active_read_slice();
1377 let data = if buf.is_empty() {
1378 None
1379 } else {
1380 let b = buf.to_vec();
1381 self.pos += buf.len() as Offset;
1382 Some(b)
1383 };
1384
1385 if self.writable() {
1386 self.flush_rewind(vm)?;
1387 }
1388
1389 let readall = vm
1390 .get_str_method(self.raw.clone().unwrap(), "readall")
1391 .transpose()?;
1392 if let Some(readall) = readall {
1393 let res = readall.call((), vm)?;
1394 let res = <Option<PyBytesRef>>::try_from_object(vm, res)?;
1395 let ret = if let Some(mut data) = data {
1396 if let Some(bytes) = res {
1397 data.extend_from_slice(bytes.as_bytes());
1398 }
1399 Some(PyBytes::from(data).into_ref(&vm.ctx))
1400 } else {
1401 res
1402 };
1403 return Ok(ret);
1404 }
1405
1406 let mut chunks = Vec::new();
1407
1408 let mut read_size = 0;
1409 loop {
1410 // Loop with EINTR handling (PEP 475)
1411 let read_data = loop {
1412 let res = vm.call_method(self.raw.as_ref().unwrap(), "read", ());
1413 match trap_eintr(res, vm)? {
1414 Some(val) => break val,
1415 None => continue,
1416 }
1417 };
1418 let read_data = <Option<PyBytesRef>>::try_from_object(vm, read_data)?;
1419
1420 match read_data {
1421 Some(b) if !b.as_bytes().is_empty() => {
1422 let l = b.as_bytes().len();
1423 read_size += l;
1424 if self.abs_pos != -1 {
1425 self.abs_pos += l as Offset;
1426 }
1427 chunks.push(b);
1428 }
1429 read_data => {
1430 let ret = if data.is_none() && read_size == 0 {
1431 read_data
1432 } else {

Callers 1

readMethod · 0.80

Calls 15

newFunction · 0.85
trap_eintrFunction · 0.85
active_read_sliceMethod · 0.80
to_vecMethod · 0.80
flush_rewindMethod · 0.80
get_str_methodMethod · 0.80
SomeClass · 0.50
is_emptyMethod · 0.45
lenMethod · 0.45
writableMethod · 0.45
unwrapMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected