Skip to content

Commit 867ad8a

Browse files
committed
Fix ReadFile/WriteFile overlapped keyword argument
Use FromArgs structs so overlapped parameter can be passed as a keyword argument (overlapped=True), matching the CPython API.
1 parent cefd5fa commit 867ad8a

1 file changed

Lines changed: 28 additions & 15 deletions

File tree

crates/vm/src/stdlib/_winapi.rs

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,18 +1253,24 @@ mod _winapi {
12531253
Ok(())
12541254
}
12551255

1256-
/// WriteFile - Write data to a file or I/O device.
1257-
#[pyfunction]
1258-
fn WriteFile(
1256+
#[derive(FromArgs)]
1257+
struct WriteFileArgs {
1258+
#[pyarg(positional)]
12591259
handle: WinHandle,
1260+
#[pyarg(positional)]
12601261
buffer: crate::function::ArgBytesLike,
1261-
use_overlapped: OptionalArg<bool>,
1262-
vm: &VirtualMachine,
1263-
) -> PyResult<PyObjectRef> {
1262+
#[pyarg(named, default = false)]
1263+
overlapped: bool,
1264+
}
1265+
1266+
/// WriteFile - Write data to a file or I/O device.
1267+
#[pyfunction]
1268+
fn WriteFile(args: WriteFileArgs, vm: &VirtualMachine) -> PyResult<PyObjectRef> {
12641269
use windows_sys::Win32::Storage::FileSystem::WriteFile as WinWriteFile;
12651270

1266-
let use_overlapped = use_overlapped.unwrap_or(false);
1267-
let buf = buffer.borrow_buf();
1271+
let handle = args.handle;
1272+
let use_overlapped = args.overlapped;
1273+
let buf = args.buffer.borrow_buf();
12681274
let len = core::cmp::min(buf.len(), u32::MAX as usize) as u32;
12691275

12701276
if use_overlapped {
@@ -1334,17 +1340,24 @@ mod _winapi {
13341340
.into())
13351341
}
13361342

1337-
/// ReadFile - Read data from a file or I/O device.
1338-
#[pyfunction]
1339-
fn ReadFile(
1343+
#[derive(FromArgs)]
1344+
struct ReadFileArgs {
1345+
#[pyarg(positional)]
13401346
handle: WinHandle,
1347+
#[pyarg(positional)]
13411348
size: u32,
1342-
use_overlapped: OptionalArg<bool>,
1343-
vm: &VirtualMachine,
1344-
) -> PyResult<PyObjectRef> {
1349+
#[pyarg(named, default = false)]
1350+
overlapped: bool,
1351+
}
1352+
1353+
/// ReadFile - Read data from a file or I/O device.
1354+
#[pyfunction]
1355+
fn ReadFile(args: ReadFileArgs, vm: &VirtualMachine) -> PyResult<PyObjectRef> {
13451356
use windows_sys::Win32::Storage::FileSystem::ReadFile as WinReadFile;
13461357

1347-
let use_overlapped = use_overlapped.unwrap_or(false);
1358+
let handle = args.handle;
1359+
let size = args.size;
1360+
let use_overlapped = args.overlapped;
13481361

13491362
if use_overlapped {
13501363
use windows_sys::Win32::Foundation::ERROR_IO_PENDING;

0 commit comments

Comments
 (0)