diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2024-07-22 09:37:32 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2024-07-22 12:06:02 +0200 |
| commit | 06a0da3e8a34d12de7adece6223d4235c4673aaf (patch) | |
| tree | fc13aa129468878e74c8c0ce19c565dac78b65fb /src/link/MachO/Dylib.zig | |
| parent | 79fefec599fd940adfd611c9da880c01e2aa842c (diff) | |
| download | zig-06a0da3e8a34d12de7adece6223d4235c4673aaf.tar.gz zig-06a0da3e8a34d12de7adece6223d4235c4673aaf.zip | |
macho: cache string len
Diffstat (limited to 'src/link/MachO/Dylib.zig')
| -rw-r--r-- | src/link/MachO/Dylib.zig | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/link/MachO/Dylib.zig b/src/link/MachO/Dylib.zig index 41e2f4941f..decaf054a3 100644 --- a/src/link/MachO/Dylib.zig +++ b/src/link/MachO/Dylib.zig @@ -610,15 +610,18 @@ pub inline fn getUmbrella(self: Dylib, macho_file: *MachO) *Dylib { return macho_file.getFile(self.umbrella).?.dylib; } -fn addString(self: *Dylib, allocator: Allocator, name: []const u8) !u32 { +fn addString(self: *Dylib, allocator: Allocator, name: []const u8) !MachO.String { const off = @as(u32, @intCast(self.strtab.items.len)); - try self.strtab.writer(allocator).print("{s}\x00", .{name}); - return off; + try self.strtab.ensureUnusedCapacity(allocator, name.len + 1); + self.strtab.appendSliceAssumeCapacity(name); + self.strtab.appendAssumeCapacity(0); + return .{ .pos = off, .len = @intCast(name.len + 1) }; } -pub fn getString(self: Dylib, off: u32) [:0]const u8 { - assert(off < self.strtab.items.len); - return mem.sliceTo(@as([*:0]const u8, @ptrCast(self.strtab.items.ptr + off)), 0); +pub fn getString(self: Dylib, string: MachO.String) [:0]const u8 { + assert(string.pos < self.strtab.items.len and string.pos + string.len <= self.strtab.items.len); + if (string.len == 0) return ""; + return self.strtab.items[string.pos..][0 .. string.len - 1 :0]; } pub fn asFile(self: *Dylib) File { @@ -932,7 +935,7 @@ pub const Id = struct { }; const Export = struct { - name: u32, + name: MachO.String, flags: Flags, const Flags = packed struct { |
