Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › compress/ › xz/ › Decompress.zig › readIndirect
readIndirect
Decompress.readIndirect
fn readIndirect (r : *Reader ) Reader .Error !usize
File
Code
fn readIndirect (r : *Reader ) Reader .Error !usize {
const d : *Decompress = @alignCast (@fieldParentPtr ("reader" , r ));
const gpa = d .gpa ;
const input = d .input ;
var allocating = Writer .Allocating .initOwnedSlice (gpa , r .buffer );
allocating .writer .end = r .end ;
defer {
r .buffer = allocating .writer .buffer ;
r .end = allocating .writer .end ;
}
if (d .err != null ) return error .ReadFailed ;
if (d .block_count == std .math .maxInt (usize )) return error .EndOfStream ;
readBlock (input , &allocating ) catch |err | switch (err ) {
error .WriteFailed => {
d .err = error .OutOfMemory ;
return error .ReadFailed ;
},
error .SuccessfulEndOfStream => {
finish (d ) catch |finish_err | {
d .err = finish_err ;
return error .ReadFailed ;
};
d .block_count = std .math .maxInt (usize );
return error .EndOfStream ;
},
else => |e | {
d .err = e ;
return error .ReadFailed ;
},
};
switch (d .check ) {
.none => {},
.crc32 => {
const declared_checksum = try input .takeInt (u32 , .little );
//const hash_a = Crc32.hash(unpacked_bytes);
//if (hash_a != hash_b) return error.WrongChecksum;
_ = declared_checksum ;
},
.crc64 => {
const declared_checksum = try input .takeInt (u64 , .little );
//const hash_a = Crc64.hash(unpacked_bytes);
//if (hash_a != hash_b) return error.WrongChecksum;
_ = declared_checksum ;
},
.sha256 => {
const declared_hash = try input .take (Sha256 .digest_length );
//var hash_a: [Sha256.digest_length]u8 = undefined;
//Sha256.hash(unpacked_bytes, &hash_a, .{});
//if (!std.mem.eql(u8, &hash_a, &hash_b))
// return error.WrongChecksum;
_ = declared_hash ;
},
else => {
d .err = error .Unsupported ;
return error .ReadFailed ;
},
}
d .block_count += 1 ;
return 0 ;
}