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 › docs/ › wasm/ › main.zig › unpackInner
unpackInner
main.unpackInner
fn unpackInner (tar_bytes : []u8 ) !void
File
Code
fn unpackInner (tar_bytes : []u8 ) !void {
var reader : std .Io .Reader = .fixed (tar_bytes );
var file_name_buffer : [1024 ]u8 = undefined ;
var link_name_buffer : [1024 ]u8 = undefined ;
var it : std .tar .Iterator = .init (&reader , .{
.file_name_buffer = &file_name_buffer ,
.link_name_buffer = &link_name_buffer ,
});
while (try it .next ()) |tar_file | {
switch (tar_file .kind ) {
.file => {
if (tar_file .size == 0 and tar_file .name .len == 0 ) break ;
if (std .mem .endsWith (u8 , tar_file .name , ".zig" )) {
log .debug ("found file: '{s}'" , .{tar_file .name });
const file_name = try gpa .dupe (u8 , tar_file .name );
if (std .mem .indexOfScalar (u8 , file_name , '/' )) |pkg_name_end | {
const pkg_name = file_name [0 ..pkg_name_end ];
const gop = try Walk .modules .getOrPut (gpa , pkg_name );
const file : Walk .File .Index = @fromBackingInt (@intCast (Walk .files .entries .len ));
if (!gop .found_existing or
std .mem .eql (u8 , file_name [pkg_name_end ..], "/root.zig" ) or
std .mem .eql (u8 , file_name [pkg_name_end + 1 .. file_name .len - ".zig" .len ], pkg_name ))
{
gop .value_ptr .* = file ;
}
const file_bytes = tar_bytes [reader .seek ..][0 ..@intCast (tar_file .size )];
assert (file == try Walk .add_file (file_name , file_bytes ));
}
} else {
log .warn ("skipping: '{s}' - the tar creation should have done that" , .{
tar_file .name ,
});
}
},
else => continue ,
}
}
}