| ... | ... | @@ -935,17 +935,24 @@ pub fn sendFileReading(w: *Writer, file_reader: *File.Reader, limit: Limit) File |
| 935 | 935 | /// |
| 936 | 936 | /// Asserts nonzero buffer capacity. |
| 937 | 937 | pub fn sendFileAll(w: *Writer, file_reader: *File.Reader, limit: Limit) FileAllError!usize { |
| 938 | | // The fallback sendFileReadingAll() path asserts non-zero buffer capacity. |
| 939 | | // Explicitly assert it here as well to ensure the assert is hit even if |
| 940 | | // the fallback path is not taken. |
| 938 | // The fallback case uses `stream`. For `File.Reader`, this requires a minumum buffer size of |
| 939 | // one since it uses `writableSliceGreedy(1)`. Asserting this here ensures that this will be |
| 940 | // hit even when the fallback is not needed. |
| 941 | 941 | assert(w.buffer.len > 0); |
| 942 | |
| 942 | 943 | var remaining = @intFromEnum(limit); |
| 943 | 944 | while (remaining > 0) { |
| 944 | 945 | const n = sendFile(w, file_reader, .limited(remaining)) catch |err| switch (err) { |
| 945 | 946 | error.EndOfStream => break, |
| 946 | 947 | error.Unimplemented => { |
| 947 | 948 | file_reader.mode = file_reader.mode.toReading(); |
| 948 | | remaining -= try w.sendFileReadingAll(file_reader, .limited(remaining)); |
| 949 | while (remaining > 0) { |
| 950 | remaining -= file_reader.interface.stream(w, .limited(remaining)) catch |e| switch (e) { |
| 951 | error.EndOfStream => break, |
| 952 | error.ReadFailed => return error.ReadFailed, |
| 953 | error.WriteFailed => return error.WriteFailed, |
| 954 | }; |
| 955 | } |
| 949 | 956 | break; |
| 950 | 957 | }, |
| 951 | 958 | else => |e| return e, |