Function iterator [src]

Iterates over files in tar archive. next returns each file in tar archive.

Prototype

pub fn iterator(reader: anytype, options: IteratorOptions) Iterator(@TypeOf(reader))

Parameters

options: IteratorOptions

Example

test iterator { // Example tar file is created from this tree structure: // $ tree example // example // ├── a // │   └── file // ├── b // │   └── symlink -> ../a/file // └── empty // $ cat example/a/file // content // $ tar -cf example.tar example // $ tar -tvf example.tar // example/ // example/b/ // example/b/symlink -> ../a/file // example/a/ // example/a/file // example/empty/ const data = @embedFile("tar/testdata/example.tar"); var fbs = std.io.fixedBufferStream(data); // User provided buffers to the iterator var file_name_buffer: [std.fs.max_path_bytes]u8 = undefined; var link_name_buffer: [std.fs.max_path_bytes]u8 = undefined; // Create iterator var iter = iterator(fbs.reader(), .{ .file_name_buffer = &file_name_buffer, .link_name_buffer = &link_name_buffer, }); // Iterate over files in example.tar var file_no: usize = 0; while (try iter.next()) |file| : (file_no += 1) { switch (file.kind) { .directory => { switch (file_no) { 0 => try testing.expectEqualStrings("example/", file.name), 1 => try testing.expectEqualStrings("example/b/", file.name), 3 => try testing.expectEqualStrings("example/a/", file.name), 5 => try testing.expectEqualStrings("example/empty/", file.name), else => unreachable, } }, .file => { try testing.expectEqualStrings("example/a/file", file.name); // Read file content var buf: [16]u8 = undefined; const n = try file.reader().readAll(&buf); try testing.expectEqualStrings("content\n", buf[0..n]); }, .sym_link => { try testing.expectEqualStrings("example/b/symlink", file.name); try testing.expectEqualStrings("../a/file", file.link_name); }, } } }

Source

pub fn iterator(reader: anytype, options: IteratorOptions) Iterator(@TypeOf(reader)) { return .{ .reader = reader, .diagnostics = options.diagnostics, .file_name_buffer = options.file_name_buffer, .link_name_buffer = options.link_name_buffer, }; }