zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 9e9cb3ad6dacf65cb8e48fa095afef14c666c7b9 (tree)
parent 51a2c0feaf5880e42323b370c2365d1651e02c3b
Author: Carl Ã…stholm <carl@astholm.se>
Date:   Wed, 20 Aug 2025 01:08:41 +0200

Fix bugs in Windows readVec implementations

Diffstat:
Mlib/std/fs/File.zig | 24+++++++++++++-----------
Mlib/std/net.zig | 3+--
2 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/lib/std/fs/File.zig b/lib/std/fs/File.zig @@ -1343,14 +1343,15 @@ pub const Reader = struct { if (is_windows) { // Unfortunately, `ReadFileScatter` cannot be used since it // requires page alignment. - assert(io_reader.seek == io_reader.end); - io_reader.seek = 0; - io_reader.end = 0; + if (io_reader.seek == io_reader.end) { + io_reader.seek = 0; + io_reader.end = 0; + } const first = data[0]; - if (first.len >= io_reader.buffer.len) { + if (first.len >= io_reader.buffer.len - io_reader.end) { return readPositional(r, first); } else { - io_reader.end += try readPositional(r, io_reader.buffer); + io_reader.end += try readPositional(r, io_reader.buffer[io_reader.end..]); return 0; } } @@ -1391,14 +1392,15 @@ pub const Reader = struct { if (is_windows) { // Unfortunately, `ReadFileScatter` cannot be used since it // requires page alignment. - assert(io_reader.seek == io_reader.end); - io_reader.seek = 0; - io_reader.end = 0; + if (io_reader.seek == io_reader.end) { + io_reader.seek = 0; + io_reader.end = 0; + } const first = data[0]; - if (first.len >= io_reader.buffer.len) { - return readStreaming(r, first); + if (first.len >= io_reader.buffer.len - io_reader.end) { + return readPositional(r, first); } else { - io_reader.end += try readStreaming(r, io_reader.buffer); + io_reader.end += try readPositional(r, io_reader.buffer[io_reader.end..]); return 0; } } diff --git a/lib/std/net.zig b/lib/std/net.zig @@ -1992,8 +1992,7 @@ pub const Stream = struct { }; if (n == 0) return error.EndOfStream; if (n > data_size) { - io_r.seek = 0; - io_r.end = n - data_size; + io_r.end += n - data_size; return data_size; } return n;