aboutsummaryrefslogtreecommitdiff
path: root/src/link/MachO/Dylib.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2024-07-22 09:37:32 +0200
committerJakub Konka <kubkon@jakubkonka.com>2024-07-22 12:06:02 +0200
commit06a0da3e8a34d12de7adece6223d4235c4673aaf (patch)
treefc13aa129468878e74c8c0ce19c565dac78b65fb /src/link/MachO/Dylib.zig
parent79fefec599fd940adfd611c9da880c01e2aa842c (diff)
downloadzig-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.zig17
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 {