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