| ... | @@ -90,6 +90,20 @@ pub fn readAll(br: *BufferedReader, bw: *BufferedWriter, limit: Reader.Limit) Re | ... | @@ -90,6 +90,20 @@ pub fn readAll(br: *BufferedReader, bw: *BufferedWriter, limit: Reader.Limit) Re |
| 90 | } | 90 | } |
| 91 | } | 91 | } |
| 92 | | 92 | |
| | 93 | /// "Pump" data from the reader to the writer, handling `error.EndOfStream` as |
| | 94 | /// a success case. |
| | 95 | /// |
| | 96 | /// Returns total number of bytes written to `bw`. |
| | 97 | pub fn readRemaining(br: *BufferedReader, bw: *BufferedWriter) Reader.RwRemainingError!usize { |
| | 98 | var offset: usize = 0; |
| | 99 | while (true) { |
| | 100 | offset += br.read(bw, .unlimited) catch |err| switch (err) { |
| | 101 | error.EndOfStream => return offset, |
| | 102 | else => |e| return e, |
| | 103 | }; |
| | 104 | } |
| | 105 | } |
| | 106 | |
| 93 | /// Equivalent to `readVec` but reads at most `limit` bytes. | 107 | /// Equivalent to `readVec` but reads at most `limit` bytes. |
| 94 | pub fn readVecLimit(br: *BufferedReader, data: []const []u8, limit: Reader.Limit) Reader.Error!usize { | 108 | pub fn readVecLimit(br: *BufferedReader, data: []const []u8, limit: Reader.Limit) Reader.Error!usize { |
| 95 | _ = br; | 109 | _ = br; |