mirror of
https://github.com/ziglang/zig.git
synced 2026-01-04 12:33:19 +00:00
elf: scrap reader for preads when parsing archives
This commit is contained in:
parent
e5483b4ffc
commit
de30b30202
@ -21,18 +21,17 @@ pub fn parse(self: *Archive, elf_file: *Elf, path: []const u8, handle_index: Fil
|
||||
const handle = elf_file.fileHandle(handle_index);
|
||||
const size = (try handle.stat()).size;
|
||||
|
||||
const reader = handle.reader();
|
||||
_ = try reader.readBytesNoEof(elf.ARMAG.len);
|
||||
|
||||
var pos: usize = elf.ARMAG.len;
|
||||
while (true) {
|
||||
if (pos >= size) break;
|
||||
if (!mem.isAligned(pos, 2)) {
|
||||
try handle.seekBy(1);
|
||||
pos += 1;
|
||||
}
|
||||
if (!mem.isAligned(pos, 2)) pos += 1;
|
||||
|
||||
const hdr = try reader.readStruct(elf.ar_hdr);
|
||||
var hdr_buffer: [@sizeOf(elf.ar_hdr)]u8 = undefined;
|
||||
{
|
||||
const amt = try handle.preadAll(&hdr_buffer, pos);
|
||||
if (amt != @sizeOf(elf.ar_hdr)) return error.InputOutput;
|
||||
}
|
||||
const hdr = @as(*align(1) const elf.ar_hdr, @ptrCast(&hdr_buffer)).*;
|
||||
pos += @sizeOf(elf.ar_hdr);
|
||||
|
||||
if (!mem.eql(u8, &hdr.ar_fmag, elf.ARFMAG)) {
|
||||
@ -44,7 +43,6 @@ pub fn parse(self: *Archive, elf_file: *Elf, path: []const u8, handle_index: Fil
|
||||
|
||||
const obj_size = try hdr.size();
|
||||
defer {
|
||||
_ = handle.seekBy(obj_size) catch {};
|
||||
pos += obj_size;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user