extern structstd.elf.ar_hdr[src]

Fields

ar_name: [16]u8

Member file name, sometimes / terminated.

ar_date: [12]u8

File date, decimal seconds since Epoch.

ar_uid: [6]u8

User ID, in ASCII format.

ar_gid: [6]u8

Group ID, in ASCII format.

ar_mode: [8]u8

File mode, in ASCII octal.

ar_size: [10]u8

File size, in ASCII decimal.

ar_fmag: [2]u8

Always contains ARFMAG.

Functions

Functiondate[src]

pub fn date(self: ar_hdr) std.fmt.ParseIntError!u64

Parameters

self: ar_hdr

Source Code

Source code
pub fn date(self: ar_hdr) std.fmt.ParseIntError!u64 {
    const value = mem.trimRight(u8, &self.ar_date, &[_]u8{0x20});
    return std.fmt.parseInt(u64, value, 10);
}

Functionsize[src]

pub fn size(self: ar_hdr) std.fmt.ParseIntError!u32

Parameters

self: ar_hdr

Source Code

Source code
pub fn size(self: ar_hdr) std.fmt.ParseIntError!u32 {
    const value = mem.trimRight(u8, &self.ar_size, &[_]u8{0x20});
    return std.fmt.parseInt(u32, value, 10);
}

FunctionisStrtab[src]

pub fn isStrtab(self: ar_hdr) bool

Parameters

self: ar_hdr

Source Code

Source code
pub fn isStrtab(self: ar_hdr) bool {
    return mem.eql(u8, &self.ar_name, STRNAME);
}

FunctionisSymtab[src]

pub fn isSymtab(self: ar_hdr) bool

Parameters

self: ar_hdr

Source Code

Source code
pub fn isSymtab(self: ar_hdr) bool {
    return mem.eql(u8, &self.ar_name, SYMNAME);
}

FunctionisSymtab64[src]

pub fn isSymtab64(self: ar_hdr) bool

Parameters

self: ar_hdr

Source Code

Source code
pub fn isSymtab64(self: ar_hdr) bool {
    return mem.eql(u8, &self.ar_name, SYM64NAME);
}

FunctionisSymdef[src]

pub fn isSymdef(self: ar_hdr) bool

Parameters

self: ar_hdr

Source Code

Source code
pub fn isSymdef(self: ar_hdr) bool {
    return mem.eql(u8, &self.ar_name, SYMDEFNAME);
}

FunctionisSymdefSorted[src]

pub fn isSymdefSorted(self: ar_hdr) bool

Parameters

self: ar_hdr

Source Code

Source code
pub fn isSymdefSorted(self: ar_hdr) bool {
    return mem.eql(u8, &self.ar_name, SYMDEFSORTEDNAME);
}

Functionname[src]

pub fn name(self: *const ar_hdr) ?[]const u8

Parameters

self: *const ar_hdr

Source Code

Source code
pub fn name(self: *const ar_hdr) ?[]const u8 {
    const value = &self.ar_name;
    if (value[0] == '/') return null;
    const sentinel = mem.indexOfScalar(u8, value, '/') orelse value.len;
    return value[0..sentinel];
}

FunctionnameOffset[src]

pub fn nameOffset(self: ar_hdr) std.fmt.ParseIntError!?u32

Parameters

self: ar_hdr

Source Code

Source code
pub fn nameOffset(self: ar_hdr) std.fmt.ParseIntError!?u32 {
    const value = &self.ar_name;
    if (value[0] != '/') return null;
    const trimmed = mem.trimRight(u8, value, &[_]u8{0x20});
    return try std.fmt.parseInt(u32, trimmed[1..], 10);
}

Source Code

Source code
pub const ar_hdr = extern struct {
    /// Member file name, sometimes / terminated.
    ar_name: [16]u8,

    /// File date, decimal seconds since Epoch.
    ar_date: [12]u8,

    /// User ID, in ASCII format.
    ar_uid: [6]u8,

    /// Group ID, in ASCII format.
    ar_gid: [6]u8,

    /// File mode, in ASCII octal.
    ar_mode: [8]u8,

    /// File size, in ASCII decimal.
    ar_size: [10]u8,

    /// Always contains ARFMAG.
    ar_fmag: [2]u8,

    pub fn date(self: ar_hdr) std.fmt.ParseIntError!u64 {
        const value = mem.trimRight(u8, &self.ar_date, &[_]u8{0x20});
        return std.fmt.parseInt(u64, value, 10);
    }

    pub fn size(self: ar_hdr) std.fmt.ParseIntError!u32 {
        const value = mem.trimRight(u8, &self.ar_size, &[_]u8{0x20});
        return std.fmt.parseInt(u32, value, 10);
    }

    pub fn isStrtab(self: ar_hdr) bool {
        return mem.eql(u8, &self.ar_name, STRNAME);
    }

    pub fn isSymtab(self: ar_hdr) bool {
        return mem.eql(u8, &self.ar_name, SYMNAME);
    }

    pub fn isSymtab64(self: ar_hdr) bool {
        return mem.eql(u8, &self.ar_name, SYM64NAME);
    }

    pub fn isSymdef(self: ar_hdr) bool {
        return mem.eql(u8, &self.ar_name, SYMDEFNAME);
    }

    pub fn isSymdefSorted(self: ar_hdr) bool {
        return mem.eql(u8, &self.ar_name, SYMDEFSORTEDNAME);
    }

    pub fn name(self: *const ar_hdr) ?[]const u8 {
        const value = &self.ar_name;
        if (value[0] == '/') return null;
        const sentinel = mem.indexOfScalar(u8, value, '/') orelse value.len;
        return value[0..sentinel];
    }

    pub fn nameOffset(self: ar_hdr) std.fmt.ParseIntError!?u32 {
        const value = &self.ar_name;
        if (value[0] != '/') return null;
        const trimmed = mem.trimRight(u8, value, &[_]u8{0x20});
        return try std.fmt.parseInt(u32, trimmed[1..], 10);
    }
}