authorgravatar for carl@astholm.seCarl Åstholm <carl@astholm.se> 2025-08-20 01:08:41+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-08-19 16:18:02-07:00
log9e9cb3ad6dacf65cb8e48fa095afef14c666c7b9
treefb76ec3bcc3f20ab34170ee7fac599c76586c4f7
parent51a2c0feaf5880e42323b370c2365d1651e02c3b

Fix bugs in Windows readVec implementations


2 files changed, 14 insertions(+), 13 deletions(-)

lib/std/fs/File.zig+13-11
...@@ -1343,14 +1343,15 @@ pub const Reader = struct {...@@ -1343,14 +1343,15 @@ pub const Reader = struct {
1343 if (is_windows) {1343 if (is_windows) {
1344 // Unfortunately, `ReadFileScatter` cannot be used since it1344 // Unfortunately, `ReadFileScatter` cannot be used since it
1345 // requires page alignment.1345 // requires page alignment.
1346 assert(io_reader.seek == io_reader.end);1346 if (io_reader.seek == io_reader.end) {
1347 io_reader.seek = 0;1347 io_reader.seek = 0;
1348 io_reader.end = 0;1348 io_reader.end = 0;
1349 }
1349 const first = data[0];1350 const first = data[0];
1350 if (first.len >= io_reader.buffer.len) {1351 if (first.len >= io_reader.buffer.len - io_reader.end) {
1351 return readPositional(r, first);1352 return readPositional(r, first);
1352 } else {1353 } else {
1353 io_reader.end += try readPositional(r, io_reader.buffer);1354 io_reader.end += try readPositional(r, io_reader.buffer[io_reader.end..]);
1354 return 0;1355 return 0;
1355 }1356 }
1356 }1357 }
...@@ -1391,14 +1392,15 @@ pub const Reader = struct {...@@ -1391,14 +1392,15 @@ pub const Reader = struct {
1391 if (is_windows) {1392 if (is_windows) {
1392 // Unfortunately, `ReadFileScatter` cannot be used since it1393 // Unfortunately, `ReadFileScatter` cannot be used since it
1393 // requires page alignment.1394 // requires page alignment.
1394 assert(io_reader.seek == io_reader.end);1395 if (io_reader.seek == io_reader.end) {
1395 io_reader.seek = 0;1396 io_reader.seek = 0;
1396 io_reader.end = 0;1397 io_reader.end = 0;
1398 }
1397 const first = data[0];1399 const first = data[0];
1398 if (first.len >= io_reader.buffer.len) {1400 if (first.len >= io_reader.buffer.len - io_reader.end) {
1399 return readStreaming(r, first);1401 return readPositional(r, first);
1400 } else {1402 } else {
1401 io_reader.end += try readStreaming(r, io_reader.buffer);1403 io_reader.end += try readPositional(r, io_reader.buffer[io_reader.end..]);
1402 return 0;1404 return 0;
1403 }1405 }
1404 }1406 }
lib/std/net.zig+1-2
...@@ -1992,8 +1992,7 @@ pub const Stream = struct {...@@ -1992,8 +1992,7 @@ pub const Stream = struct {
1992 };1992 };
1993 if (n == 0) return error.EndOfStream;1993 if (n == 0) return error.EndOfStream;
1994 if (n > data_size) {1994 if (n > data_size) {
1995 io_r.seek = 0;1995 io_r.end += n - data_size;
1996 io_r.end = n - data_size;
1997 return data_size;1996 return data_size;
1998 }1997 }
1999 return n;1998 return n;