Function sendFileAll [src]
Number of bytes logically written is returned. This excludes bytes from
buffer because they have already been logically written.
The caller is responsible for flushing. Although the buffer may be bypassed
as an optimization, this is not a guarantee.
Asserts nonzero buffer capacity.
Prototype
pub fn sendFileAll(w: *Writer, file_reader: *File.Reader, limit: Limit) FileAllError!usize
Parameters
w: *Writer
file_reader: *File.Reader
limit: Limit
Possible Errors
Detailed diagnostics are found on the File.Reader
struct.
See the Writer
implementation for detailed diagnostics.
Source
pub fn sendFileAll(w: *Writer, file_reader: *File.Reader, limit: Limit) FileAllError!usize {
// The fallback sendFileReadingAll() path asserts non-zero buffer capacity.
// Explicitly assert it here as well to ensure the assert is hit even if
// the fallback path is not taken.
assert(w.buffer.len > 0);
var remaining = @intFromEnum(limit);
while (remaining > 0) {
const n = sendFile(w, file_reader, .limited(remaining)) catch |err| switch (err) {
error.EndOfStream => break,
error.Unimplemented => {
file_reader.mode = file_reader.mode.toReading();
remaining -= try w.sendFileReadingAll(file_reader, .limited(remaining));
break;
},
else => |e| return e,
};
remaining -= n;
}
return @intFromEnum(limit) - remaining;
}