| ... | @@ -21,18 +21,17 @@ pub fn parse(self: *Archive, elf_file: *Elf, path: []const u8, handle_index: Fil | ... | @@ -21,18 +21,17 @@ pub fn parse(self: *Archive, elf_file: *Elf, path: []const u8, handle_index: Fil |
| 21 | const handle = elf_file.fileHandle(handle_index); | 21 | const handle = elf_file.fileHandle(handle_index); |
| 22 | const size = (try handle.stat()).size; | 22 | const size = (try handle.stat()).size; |
| 23 | | 23 | |
| 24 | const reader = handle.reader(); | | |
| 25 | _ = try reader.readBytesNoEof(elf.ARMAG.len); | | |
| 26 | | | |
| 27 | var pos: usize = elf.ARMAG.len; | 24 | var pos: usize = elf.ARMAG.len; |
| 28 | while (true) { | 25 | while (true) { |
| 29 | if (pos >= size) break; | 26 | if (pos >= size) break; |
| 30 | if (!mem.isAligned(pos, 2)) { | 27 | if (!mem.isAligned(pos, 2)) pos += 1; |
| 31 | try handle.seekBy(1); | | |
| 32 | pos += 1; | | |
| 33 | } | | |
| 34 | | 28 | |
| 35 | const hdr = try reader.readStruct(elf.ar_hdr); | 29 | var hdr_buffer: [@sizeOf(elf.ar_hdr)]u8 = undefined; |
| | 30 | { |
| | 31 | const amt = try handle.preadAll(&hdr_buffer, pos); |
| | 32 | if (amt != @sizeOf(elf.ar_hdr)) return error.InputOutput; |
| | 33 | } |
| | 34 | const hdr = @as(*align(1) const elf.ar_hdr, @ptrCast(&hdr_buffer)).*; |
| 36 | pos += @sizeOf(elf.ar_hdr); | 35 | pos += @sizeOf(elf.ar_hdr); |
| 37 | | 36 | |
| 38 | if (!mem.eql(u8, &hdr.ar_fmag, elf.ARFMAG)) { | 37 | 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 | ... | @@ -44,7 +43,6 @@ pub fn parse(self: *Archive, elf_file: *Elf, path: []const u8, handle_index: Fil |
| 44 | | 43 | |
| 45 | const obj_size = try hdr.size(); | 44 | const obj_size = try hdr.size(); |
| 46 | defer { | 45 | defer { |
| 47 | _ = handle.seekBy(obj_size) catch {}; | | |
| 48 | pos += obj_size; | 46 | pos += obj_size; |
| 49 | } | 47 | } |
| 50 | | 48 | |