| ... | ... | @@ -8153,14 +8153,17 @@ fn fileReadPositionalWindows(userdata: ?*anyopaque, file: File, data: []const [] |
| 8153 | 8153 | const t: *Threaded = @ptrCast(@alignCast(userdata)); |
| 8154 | 8154 | _ = t; |
| 8155 | 8155 | |
| 8156 | | const DWORD = windows.DWORD; |
| 8157 | | |
| 8158 | 8156 | var index: usize = 0; |
| 8159 | 8157 | while (index < data.len and data[index].len == 0) index += 1; |
| 8160 | 8158 | if (index == data.len) return 0; |
| 8161 | 8159 | const buffer = data[index]; |
| 8162 | | const want_read_count: DWORD = @min(std.math.maxInt(DWORD), buffer.len); |
| 8163 | 8160 | |
| 8161 | return readFilePositionalWindows(file, buffer, offset); |
| 8162 | } |
| 8163 | |
| 8164 | fn 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); |
| 8164 | 8167 | var overlapped: windows.OVERLAPPED = .{ |
| 8165 | 8168 | .Internal = 0, |
| 8166 | 8169 | .InternalHigh = 0, |
| ... | ... | @@ -16478,7 +16481,17 @@ fn fileMemoryMapWrite(userdata: ?*anyopaque, mm: *File.MemoryMap) File.WritePosi |
| 16478 | 16481 | |
| 16479 | 16482 | fn mmSyncRead(file: File, memory: []u8, offset: u64) File.ReadPositionalError!void { |
| 16480 | 16483 | 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 | } |
| 16482 | 16495 | } else if (native_os == .wasi and !builtin.link_libc) { |
| 16483 | 16496 | var i: usize = 0; |
| 16484 | 16497 | const syscall: Syscall = try .start(); |
| ... | ... | @@ -16569,7 +16582,12 @@ fn mmSyncRead(file: File, memory: []u8, offset: u64) File.ReadPositionalError!vo |
| 16569 | 16582 | |
| 16570 | 16583 | fn mmSyncWrite(file: File, memory: []u8, offset: u64) File.WritePositionalError!void { |
| 16571 | 16584 | 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 | } |
| 16573 | 16591 | } else if (native_os == .wasi and !builtin.link_libc) { |
| 16574 | 16592 | var i: usize = 0; |
| 16575 | 16593 | var n: usize = undefined; |