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:
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;