Transfers all bytes from the current position to the end of the stream, up
to limit, appending them to list.
If limit is reached or exceeded, error.StreamTooLong is returned
instead. In such case, the next byte that would be read will be the first
one to exceed limit, and all preceeding bytes have been appended to
list.
See also:
appendRemainingallocRemainingAlignedpub fn appendRemainingAligned(
r: *Reader,
gpa: Allocator,
comptime alignment: std.mem.Alignment,
list: *std.array_list.Aligned(u8, alignment),
limit: Limit,
) LimitedAllocError!void
pub fn appendRemainingAligned(
r: *Reader,
gpa: Allocator,
comptime alignment: std.mem.Alignment,
list: *std.array_list.Aligned(u8, alignment),
limit: Limit,
) LimitedAllocError!void {
var a = std.Io.Writer.Allocating.fromArrayListAligned(gpa, alignment, list);
defer list.* = a.toArrayListAligned(alignment);
var remaining = limit;
while (remaining != .nothing) {
const n = stream(r, &a.writer, remaining) catch |err| switch (err) {
error.EndOfStream => return,
error.WriteFailed => return error.OutOfMemory,
error.ReadFailed => |e| return e,
};
remaining = remaining.subtract(n).?;
}
return error.StreamTooLong;
}