authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-02-13 18:57:49+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-02-13 18:57:49+01:00
logde30b30202f8327fd152dba8c74e40849c2ddad3
treea2235b6ede1a17d408126dbceec1b1dec8e2920b
parente5483b4ffc20614463e42741f132a55d58c01880

elf: scrap reader for preads when parsing archives


1 files changed, 7 insertions(+), 9 deletions(-)

src/link/Elf/Archive.zig+7-9
......@@ -21,18 +21,17 @@ pub fn parse(self: *Archive, elf_file: *Elf, path: []const u8, handle_index: Fil
2121 const handle = elf_file.fileHandle(handle_index);
2222 const size = (try handle.stat()).size;
2323
24 const reader = handle.reader();
25 _ = try reader.readBytesNoEof(elf.ARMAG.len);
26
2724 var pos: usize = elf.ARMAG.len;
2825 while (true) {
2926 if (pos >= size) break;
30 if (!mem.isAligned(pos, 2)) {
31 try handle.seekBy(1);
32 pos += 1;
33 }
27 if (!mem.isAligned(pos, 2)) pos += 1;
3428
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)).*;
3635 pos += @sizeOf(elf.ar_hdr);
3736
3837 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
4443
4544 const obj_size = try hdr.size();
4645 defer {
47 _ = handle.seekBy(obj_size) catch {};
4846 pos += obj_size;
4947 }
5048