Function decodeZStandardFrameBlocks [src]

Prototype

pub fn decodeZStandardFrameBlocks( dest: []u8, src: []const u8, frame_context: *FrameContext, ) (error{ ContentTooLarge, UnknownContentSizeUnsupported } || FrameError)!ReadWriteCount

Parameters

dest: []u8src: []const u8frame_context: *FrameContext

Source

pub fn decodeZStandardFrameBlocks( dest: []u8, src: []const u8, frame_context: *FrameContext, ) (error{ ContentTooLarge, UnknownContentSizeUnsupported } || FrameError)!ReadWriteCount { const content_size = frame_context.content_size orelse return error.UnknownContentSizeUnsupported; if (dest.len < content_size) return error.ContentTooLarge; var consumed_count: usize = 0; const written_count = decodeFrameBlocksInner( dest[0..content_size], src[consumed_count..], &consumed_count, if (frame_context.hasher_opt) |*hasher| hasher else null, frame_context.block_size_max, ) catch |err| switch (err) { error.DestTooSmall => return error.BadContentSize, inline else => |e| return e, }; if (written_count != content_size) return error.BadContentSize; if (frame_context.has_checksum) { if (src.len < consumed_count + 4) return error.EndOfStream; const checksum = std.mem.readInt(u32, src[consumed_count..][0..4], .little); consumed_count += 4; if (frame_context.hasher_opt) |*hasher| { if (checksum != computeChecksum(hasher)) return error.ChecksumFailure; } } return ReadWriteCount{ .read_count = consumed_count, .write_count = written_count }; }