structstd.tar.Iterator.File[src]

Types

TypeReader[src]

Source Code

Source code
pub const Reader = std.io.Reader(File, ReaderType.Error, File.read)

Fields

name: []const u8
link_name: []const u8
size: u64 = 0
mode: u32 = 0
kind: FileKind = .file
unread_bytes: *u64
parent_reader: ReaderType

Functions

Functionreader[src]

pub fn reader(self: File) Reader

Parameters

self: File

Source Code

Source code
pub fn reader(self: File) Reader {
    return .{ .context = self };
}

Functionread[src]

pub fn read(self: File, dest: []u8) ReaderType.Error!usize

Parameters

self: File
dest: []u8

Source Code

Source code
pub fn read(self: File, dest: []u8) ReaderType.Error!usize {
    const buf = dest[0..@min(dest.len, self.unread_bytes.*)];
    const n = try self.parent_reader.read(buf);
    self.unread_bytes.* -= n;
    return n;
}

FunctionwriteAll[src]

pub fn writeAll(self: File, out_writer: anytype) !void

Parameters

self: File

Source Code

Source code
pub fn writeAll(self: File, out_writer: anytype) !void {
    var buffer: [4096]u8 = undefined;

    while (self.unread_bytes.* > 0) {
        const buf = buffer[0..@min(buffer.len, self.unread_bytes.*)];
        try self.parent_reader.readNoEof(buf);
        try out_writer.writeAll(buf);
        self.unread_bytes.* -= buf.len;
    }
}

Source Code

Source code
pub const File = struct {
    name: []const u8, // name of file, symlink or directory
    link_name: []const u8, // target name of symlink
    size: u64 = 0, // size of the file in bytes
    mode: u32 = 0,
    kind: FileKind = .file,

    unread_bytes: *u64,
    parent_reader: ReaderType,

    pub const Reader = std.io.Reader(File, ReaderType.Error, File.read);

    pub fn reader(self: File) Reader {
        return .{ .context = self };
    }

    pub fn read(self: File, dest: []u8) ReaderType.Error!usize {
        const buf = dest[0..@min(dest.len, self.unread_bytes.*)];
        const n = try self.parent_reader.read(buf);
        self.unread_bytes.* -= n;
        return n;
    }

    // Writes file content to writer.
    pub fn writeAll(self: File, out_writer: anytype) !void {
        var buffer: [4096]u8 = undefined;

        while (self.unread_bytes.* > 0) {
            const buf = buffer[0..@min(buffer.len, self.unread_bytes.*)];
            try self.parent_reader.readNoEof(buf);
            try out_writer.writeAll(buf);
            self.unread_bytes.* -= buf.len;
        }
    }
}