| ... | @@ -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 | |
| | 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 | } |