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: *Readergpa: Allocatoralignment: std.mem.Alignmentlist: *std.array_list.Aligned(u8, alignment)limit: Limit

Possible Errors

OutOfMemory Error
ReadFailed ShortError

See the Reader implementation for detailed diagnostics.

StreamTooLong

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; }