authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-15 10:14:03-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-15 14:18:20-08:00
log8527ec9c7b229bcc8a15824e885d16abbab57534
tree12d2c2a27e9c900717a5b1e45329cc641748bf3e
parent3c708b19fea5e855197c6f3f8130a39a903b3f77

std.Io.Threaded: implement mmap fallback for Windows


1 files changed, 23 insertions(+), 5 deletions(-)

lib/std/Io/Threaded.zig+23-5
......@@ -8153,14 +8153,17 @@ fn fileReadPositionalWindows(userdata: ?*anyopaque, file: File, data: []const []
81538153 const t: *Threaded = @ptrCast(@alignCast(userdata));
81548154 _ = t;
81558155
8156 const DWORD = windows.DWORD;
8157
81588156 var index: usize = 0;
81598157 while (index < data.len and data[index].len == 0) index += 1;
81608158 if (index == data.len) return 0;
81618159 const buffer = data[index];
8162 const want_read_count: DWORD = @min(std.math.maxInt(DWORD), buffer.len);
81638160
8161 return readFilePositionalWindows(file, buffer, offset);
8162}
8163
8164fn readFilePositionalWindows(file: File, buffer: []u8, offset: u64) File.ReadPositionalError!usize {
8165 const DWORD = windows.DWORD;
8166 const want_read_count: DWORD = @min(std.math.maxInt(DWORD), buffer.len);
81648167 var overlapped: windows.OVERLAPPED = .{
81658168 .Internal = 0,
81668169 .InternalHigh = 0,
......@@ -16478,7 +16481,17 @@ fn fileMemoryMapWrite(userdata: ?*anyopaque, mm: *File.MemoryMap) File.WritePosi
1647816481
1647916482fn mmSyncRead(file: File, memory: []u8, offset: u64) File.ReadPositionalError!void {
1648016483 if (is_windows) {
16481 @panic("TODO");
16484 var i: usize = 0;
16485 while (true) {
16486 const buf = memory[i..];
16487 if (buf.len == 0) break;
16488 const n = try readFilePositionalWindows(file, buf, offset + i);
16489 if (n == 0) {
16490 @memset(memory[i..], 0);
16491 break;
16492 }
16493 i += n;
16494 }
1648216495 } else if (native_os == .wasi and !builtin.link_libc) {
1648316496 var i: usize = 0;
1648416497 const syscall: Syscall = try .start();
......@@ -16569,7 +16582,12 @@ fn mmSyncRead(file: File, memory: []u8, offset: u64) File.ReadPositionalError!vo
1656916582
1657016583fn mmSyncWrite(file: File, memory: []u8, offset: u64) File.WritePositionalError!void {
1657116584 if (is_windows) {
16572 @panic("TODO");
16585 var i: usize = 0;
16586 while (true) {
16587 const buf = memory[i..];
16588 if (buf.len == 0) break;
16589 i += try writeFilePositionalWindows(file.handle, memory[i..], offset + i);
16590 }
1657316591 } else if (native_os == .wasi and !builtin.link_libc) {
1657416592 var i: usize = 0;
1657516593 var n: usize = undefined;