Function appendRemainingAligned [src]
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:
appendRemaining
allocRemainingAligned
Prototype
pub fn appendRemainingAligned( r: *Reader, gpa: Allocator, comptime alignment: std.mem.Alignment, list: *std.array_list.Aligned(u8, alignment), limit: Limit, ) LimitedAllocError!void
Parameters
r: *Reader
gpa: Allocator
alignment: std.mem.Alignment
list: *std.array_list.Aligned(u8, alignment)
limit: Limit
Possible Errors
See the Reader
implementation for detailed diagnostics.
Source
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.nonzero()) {
const n = stream(r, &a.writer, remaining) catch |err| switch (err) {
error.EndOfStream => return,
error.WriteFailed => return error.OutOfMemory,
error.ReadFailed => return error.ReadFailed,
};
remaining = remaining.subtract(n).?;
}
return error.StreamTooLong;
}