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

Function ReadFile

crates/vm/src/stdlib/_winapi.rs:1396–1470  ·  view source on GitHub ↗
(args: ReadFileArgs, vm: &VirtualMachine)

Source from the content-addressed store, hash-verified

1394 /// ReadFile - Read data from a file or I/O device.
1395 #[pyfunction]
1396 fn ReadFile(args: ReadFileArgs, vm: &VirtualMachine) -> PyResult<PyObjectRef> {
1397 use windows_sys::Win32::Storage::FileSystem::ReadFile as WinReadFile;
1398
1399 let handle = args.handle;
1400 let size = args.size;
1401 let use_overlapped = args.overlapped;
1402
1403 if use_overlapped {
1404 use windows_sys::Win32::Foundation::ERROR_IO_PENDING;
1405
1406 let ov = Overlapped::new_with_handle(handle.0);
1407 let err = {
1408 let mut inner = ov.inner.lock();
1409 inner.read_buffer = Some(vec![0u8; size as usize]);
1410 let read_buf = inner.read_buffer.as_mut().unwrap();
1411 let mut nread: u32 = 0;
1412 let ret = unsafe {
1413 WinReadFile(
1414 handle.0,
1415 read_buf.as_mut_ptr() as *mut _,
1416 size,
1417 &mut nread,
1418 &mut *inner.overlapped,
1419 )
1420 };
1421
1422 let err = if ret == 0 {
1423 unsafe { windows_sys::Win32::Foundation::GetLastError() }
1424 } else {
1425 0
1426 };
1427
1428 if ret == 0 && err != ERROR_IO_PENDING && err != ERROR_MORE_DATA {
1429 return Err(vm.new_last_os_error());
1430 }
1431 if ret == 0 && err == ERROR_IO_PENDING {
1432 inner.pending = true;
1433 }
1434
1435 err
1436 };
1437 let result = vm
1438 .ctx
1439 .new_tuple(vec![ov.into_pyobject(vm), vm.ctx.new_int(err).into()]);
1440 return Ok(result.into());
1441 }
1442
1443 let mut buf = vec![0u8; size as usize];
1444 let mut nread: u32 = 0;
1445 let ret = unsafe {
1446 WinReadFile(
1447 handle.0,
1448 buf.as_mut_ptr() as *mut _,
1449 size,
1450 &mut nread,
1451 null_mut(),
1452 )
1453 };

Callers 3

ReadFileMethod · 0.85
ReadFileIntoMethod · 0.85
exec_queryFunction · 0.85

Calls 10

as_mut_ptrMethod · 0.80
new_last_os_errorMethod · 0.80
GetLastErrorFunction · 0.70
SomeClass · 0.50
ErrClass · 0.50
lockMethod · 0.45
unwrapMethod · 0.45
as_mutMethod · 0.45
new_tupleMethod · 0.45
truncateMethod · 0.45

Tested by

no test coverage detected