Skip to content

Commit c7f332a

Browse files
committed
std.Io.Writer.Discarding: fix sendFile EndOfStream
1 parent f521aa0 commit c7f332a

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

lib/std/Io/Writer.zig

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2194,8 +2194,10 @@ pub const Discarding = struct {
21942194
const d: *Discarding = @alignCast(@fieldParentPtr("writer", w));
21952195
d.count += w.end;
21962196
w.end = 0;
2197+
if (limit == .nothing) return 0;
21972198
if (file_reader.getSize()) |size| {
21982199
const n = limit.minInt64(size - file_reader.pos);
2200+
if (n == 0) return error.EndOfStream;
21992201
file_reader.seekBy(@intCast(n)) catch return error.Unimplemented;
22002202
w.end = 0;
22012203
d.count += n;
@@ -2522,3 +2524,23 @@ pub const Allocating = struct {
25222524
try testing.expectEqualSlices(u8, "x: 42\ny: 1234\n", a.getWritten());
25232525
}
25242526
};
2527+
2528+
test 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+
}

0 commit comments

Comments
 (0)