authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-09-07 19:16:30+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-09-07 22:42:59+02:00
log678e07b924a717e79f412b78895ead1136a722bc
tree7f624017a427d9394516ed0689fc4517090a3810
parent639237c7b4655d7d4c38c24d9b36a145bbfb1e1c

macho+wasm: unify and clean up closing file handles


6 files changed, 6 insertions(+), 5 deletions(-)

src/link/MachO.zig-3
...@@ -1437,7 +1437,6 @@ fn parseArchive(self: *MachO, path: []const u8, force_load: bool) !bool {...@@ -1437,7 +1437,6 @@ fn parseArchive(self: *MachO, path: []const u8, force_load: bool) !bool {
14371437
1438 if (force_load) {1438 if (force_load) {
1439 defer archive.deinit(gpa);1439 defer archive.deinit(gpa);
1440 defer file.close();
1441 // Get all offsets from the ToC1440 // Get all offsets from the ToC
1442 var offsets = std.AutoArrayHashMap(u32, void).init(gpa);1441 var offsets = std.AutoArrayHashMap(u32, void).init(gpa);
1443 defer offsets.deinit();1442 defer offsets.deinit();
...@@ -3015,7 +3014,6 @@ pub fn deinit(self: *MachO) void {...@@ -3015,7 +3014,6 @@ pub fn deinit(self: *MachO) void {
3015 }3014 }
30163015
3017 if (self.d_sym) |*d_sym| {3016 if (self.d_sym) |*d_sym| {
3018 d_sym.file.close();
3019 d_sym.deinit(gpa);3017 d_sym.deinit(gpa);
3020 }3018 }
30213019
...@@ -3044,7 +3042,6 @@ pub fn deinit(self: *MachO) void {...@@ -3044,7 +3042,6 @@ pub fn deinit(self: *MachO) void {
3044 self.objects.deinit(gpa);3042 self.objects.deinit(gpa);
30453043
3046 for (self.archives.items) |*archive| {3044 for (self.archives.items) |*archive| {
3047 archive.file.close();
3048 archive.deinit(gpa);3045 archive.deinit(gpa);
3049 }3046 }
3050 self.archives.deinit(gpa);3047 self.archives.deinit(gpa);
src/link/MachO/Archive.zig+1
...@@ -88,6 +88,7 @@ const ar_hdr = extern struct {...@@ -88,6 +88,7 @@ const ar_hdr = extern struct {
88};88};
8989
90pub fn deinit(self: *Archive, allocator: Allocator) void {90pub fn deinit(self: *Archive, allocator: Allocator) void {
91 self.file.close();
91 for (self.toc.keys()) |*key| {92 for (self.toc.keys()) |*key| {
92 allocator.free(key.*);93 allocator.free(key.*);
93 }94 }
src/link/MachO/DebugSymbols.zig+1
...@@ -306,6 +306,7 @@ pub fn flushModule(self: *DebugSymbols, allocator: Allocator, options: link.Opti...@@ -306,6 +306,7 @@ pub fn flushModule(self: *DebugSymbols, allocator: Allocator, options: link.Opti
306}306}
307307
308pub fn deinit(self: *DebugSymbols, allocator: Allocator) void {308pub fn deinit(self: *DebugSymbols, allocator: Allocator) void {
309 self.file.close();
309 self.segments.deinit(allocator);310 self.segments.deinit(allocator);
310 self.sections.deinit(allocator);311 self.sections.deinit(allocator);
311 self.dwarf.deinit();312 self.dwarf.deinit();
src/link/Wasm.zig-2
...@@ -648,12 +648,10 @@ pub fn deinit(self: *Wasm) void {...@@ -648,12 +648,10 @@ pub fn deinit(self: *Wasm) void {
648 gpa.free(segment_info.name);648 gpa.free(segment_info.name);
649 }649 }
650 for (self.objects.items) |*object| {650 for (self.objects.items) |*object| {
651 object.file.?.close();
652 object.deinit(gpa);651 object.deinit(gpa);
653 }652 }
654653
655 for (self.archives.items) |*archive| {654 for (self.archives.items) |*archive| {
656 archive.file.close();
657 archive.deinit(gpa);655 archive.deinit(gpa);
658 }656 }
659657
src/link/Wasm/Archive.zig+1
...@@ -95,6 +95,7 @@ const ar_hdr = extern struct {...@@ -95,6 +95,7 @@ const ar_hdr = extern struct {
95};95};
9696
97pub fn deinit(archive: *Archive, allocator: Allocator) void {97pub fn deinit(archive: *Archive, allocator: Allocator) void {
98 archive.file.close();
98 for (archive.toc.keys()) |*key| {99 for (archive.toc.keys()) |*key| {
99 allocator.free(key.*);100 allocator.free(key.*);
100 }101 }
src/link/Wasm/Object.zig+3
...@@ -141,6 +141,9 @@ pub fn create(gpa: Allocator, file: std.fs.File, name: []const u8, maybe_max_siz...@@ -141,6 +141,9 @@ pub fn create(gpa: Allocator, file: std.fs.File, name: []const u8, maybe_max_siz
141/// Frees all memory of `Object` at once. The given `Allocator` must be141/// Frees all memory of `Object` at once. The given `Allocator` must be
142/// the same allocator that was used when `init` was called.142/// the same allocator that was used when `init` was called.
143pub fn deinit(self: *Object, gpa: Allocator) void {143pub fn deinit(self: *Object, gpa: Allocator) void {
144 if (self.file) |file| {
145 file.close();
146 }
144 for (self.func_types) |func_ty| {147 for (self.func_types) |func_ty| {
145 gpa.free(func_ty.params);148 gpa.free(func_ty.params);
146 gpa.free(func_ty.returns);149 gpa.free(func_ty.returns);