From b0d825948a77d0ec3de794680e168ffd0a29e1fe Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 2 May 2025 19:45:51 -0700 Subject: [PATCH] std.fs.File: fix missing end of stream --- lib/std/fs/File.zig | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/std/fs/File.zig b/lib/std/fs/File.zig index e877b2309f..58c07a25ba 100644 --- a/lib/std/fs/File.zig +++ b/lib/std/fs/File.zig @@ -1158,20 +1158,21 @@ pub const Reader = struct { // end. fallback: { if (r.size_err == null and r.seek_err == null) break :fallback; - var trash_buffer: [std.atomic.cache_line]u8 = undefined; + var trash_buffer: [128]u8 = undefined; const trash = &trash_buffer; if (is_windows) { const n = windows.ReadFile(file.handle, trash, null) catch |err| { r.err = err; return error.ReadFailed; }; + if (n == 0) return error.EndOfStream; r.pos = pos + n; return n; } var iovecs: [max_buffers_len]std.posix.iovec = undefined; var iovecs_i: usize = 0; var remaining = @intFromEnum(limit); - while (remaining > 0 and iovecs_i >= iovecs.len) { + while (remaining > 0 and iovecs_i < iovecs.len) { iovecs[iovecs_i] = .{ .base = trash, .len = @min(trash.len, remaining) }; remaining -= iovecs[iovecs_i].len; iovecs_i += 1; @@ -1180,6 +1181,7 @@ pub const Reader = struct { r.err = err; return error.ReadFailed; }; + if (n == 0) return error.EndOfStream; r.pos = pos + n; return n; }