authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-15 11:32:40-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-15 11:32:40-07:00
logc7f332a260c9d9bbed0a05a0760bb9d4c4e56c52
treeff28821c2c323fbcb517ff8b017dbb101a0be254
parentf521aa0520ac1b881ddbc533b03b4745f7f49820

std.Io.Writer.Discarding: fix sendFile EndOfStream


1 files changed, 22 insertions(+), 0 deletions(-)

lib/std/Io/Writer.zig+22
...@@ -2194,8 +2194,10 @@ pub const Discarding = struct {...@@ -2194,8 +2194,10 @@ pub const Discarding = struct {
2194 const d: *Discarding = @alignCast(@fieldParentPtr("writer", w));2194 const d: *Discarding = @alignCast(@fieldParentPtr("writer", w));
2195 d.count += w.end;2195 d.count += w.end;
2196 w.end = 0;2196 w.end = 0;
2197 if (limit == .nothing) return 0;
2197 if (file_reader.getSize()) |size| {2198 if (file_reader.getSize()) |size| {
2198 const n = limit.minInt64(size - file_reader.pos);2199 const n = limit.minInt64(size - file_reader.pos);
2200 if (n == 0) return error.EndOfStream;
2199 file_reader.seekBy(@intCast(n)) catch return error.Unimplemented;2201 file_reader.seekBy(@intCast(n)) catch return error.Unimplemented;
2200 w.end = 0;2202 w.end = 0;
2201 d.count += n;2203 d.count += n;
...@@ -2522,3 +2524,23 @@ pub const Allocating = struct {...@@ -2522,3 +2524,23 @@ pub const Allocating = struct {
2522 try testing.expectEqualSlices(u8, "x: 42\ny: 1234\n", a.getWritten());2524 try testing.expectEqualSlices(u8, "x: 42\ny: 1234\n", a.getWritten());
2523 }2525 }
2524};2526};
2527
2528test sendFile {
2529 var tmp_dir = testing.tmpDir(.{});
2530 defer tmp_dir.cleanup();
2531
2532 const file = try tmp_dir.dir.createFile("input.txt", .{ .read = true });
2533 defer file.close();
2534 var r_buffer: [256]u8 = undefined;
2535 var file_writer: std.fs.File.Writer = .init(file, &r_buffer);
2536 try file_writer.interface.writeByte('h');
2537 try file_writer.interface.flush();
2538
2539 var file_reader = file_writer.moveToReader();
2540 try file_reader.seekTo(0);
2541
2542 var w_buffer: [256]u8 = undefined;
2543 var discarding: std.io.Writer.Discarding = .init(&w_buffer);
2544
2545 _ = try file_reader.interface.streamRemaining(&discarding.writer);
2546}