Commit 2e30bf23aa

Jakub Konka <kubkon@jakubkonka.com>
2021-07-31 16:06:50
macho: cleanup extracting objects from archives
1 parent 0b15ba8
Changed files (2)
src
src/link/MachO/Archive.zig
@@ -215,8 +215,8 @@ fn parseTableOfContents(self: *Archive, allocator: *Allocator, reader: anytype)
     }
 }
 
-pub fn extractObject(self: Archive, allocator: *Allocator, offset: u32) !Object {
-    var reader = self.file.reader();
+pub fn parseObject(self: Archive, allocator: *Allocator, arch: Arch, offset: u32) !Object {
+    const reader = self.file.reader();
     try reader.context.seekTo(offset + self.library_offset);
 
     const object_header = try reader.readStruct(ar_hdr);
@@ -244,6 +244,7 @@ pub fn extractObject(self: Archive, allocator: *Allocator, offset: u32) !Object
         .mtime = try self.header.?.date(),
     };
 
+    try object.parse(allocator, arch);
     try reader.context.seekTo(0);
 
     return object;
src/link/MachO.zig
@@ -2231,8 +2231,11 @@ fn resolveSymbols(self: *MachO) !void {
 
             const object_id = @intCast(u16, self.objects.items.len);
             const object = try self.objects.addOne(self.base.allocator);
-            object.* = try archive.extractObject(self.base.allocator, offsets.items[0]);
-            try object.parse(self.base.allocator, self.base.options.target.cpu.arch);
+            object.* = try archive.parseObject(
+                self.base.allocator,
+                self.base.options.target.cpu.arch,
+                offsets.items[0],
+            );
             try self.resolveSymbolsInObject(object_id);
 
             continue :loop;