aboutsummaryrefslogtreecommitdiff
path: root/src/link/MachO/load_commands.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2025-07-01 18:14:45 -0700
committerAndrew Kelley <andrew@ziglang.org>2025-07-07 22:43:52 -0700
commitc8fcd2ff2c032b2de8cc1a57e075552d1cab35df (patch)
tree7155f58049ecd0e948533f6b64cba1553dd33ae2 /src/link/MachO/load_commands.zig
parentf71d97e4cbb0e56213cb76657ad6c9edf6134868 (diff)
downloadzig-c8fcd2ff2c032b2de8cc1a57e075552d1cab35df.tar.gz
zig-c8fcd2ff2c032b2de8cc1a57e075552d1cab35df.zip
MachO: update to new std.io APIs
Diffstat (limited to 'src/link/MachO/load_commands.zig')
-rw-r--r--src/link/MachO/load_commands.zig52
1 files changed, 22 insertions, 30 deletions
diff --git a/src/link/MachO/load_commands.zig b/src/link/MachO/load_commands.zig
index 08ab11e3f9..2d3f0bb231 100644
--- a/src/link/MachO/load_commands.zig
+++ b/src/link/MachO/load_commands.zig
@@ -3,6 +3,7 @@ const assert = std.debug.assert;
const log = std.log.scoped(.link);
const macho = std.macho;
const mem = std.mem;
+const Writer = std.io.Writer;
const Allocator = mem.Allocator;
const DebugSymbols = @import("DebugSymbols.zig");
@@ -180,23 +181,20 @@ pub fn calcMinHeaderPadSize(macho_file: *MachO) !u32 {
return offset;
}
-pub fn writeDylinkerLC(writer: anytype) !void {
+pub fn writeDylinkerLC(bw: *Writer) Writer.Error!void {
const name_len = mem.sliceTo(default_dyld_path, 0).len;
const cmdsize = @as(u32, @intCast(mem.alignForward(
u64,
@sizeOf(macho.dylinker_command) + name_len,
@sizeOf(u64),
)));
- try writer.writeStruct(macho.dylinker_command{
+ try bw.writeStruct(macho.dylinker_command{
.cmd = .LOAD_DYLINKER,
.cmdsize = cmdsize,
.name = @sizeOf(macho.dylinker_command),
});
- try writer.writeAll(mem.sliceTo(default_dyld_path, 0));
- const padding = cmdsize - @sizeOf(macho.dylinker_command) - name_len;
- if (padding > 0) {
- try writer.writeByteNTimes(0, padding);
- }
+ try bw.writeAll(mem.sliceTo(default_dyld_path, 0));
+ try bw.splatByteAll(0, cmdsize - @sizeOf(macho.dylinker_command) - name_len);
}
const WriteDylibLCCtx = struct {
@@ -207,14 +205,14 @@ const WriteDylibLCCtx = struct {
compatibility_version: u32 = 0x10000,
};
-pub fn writeDylibLC(ctx: WriteDylibLCCtx, writer: anytype) !void {
+pub fn writeDylibLC(ctx: WriteDylibLCCtx, bw: *Writer) !void {
const name_len = ctx.name.len + 1;
- const cmdsize = @as(u32, @intCast(mem.alignForward(
+ const cmdsize: u32 = @intCast(mem.alignForward(
u64,
@sizeOf(macho.dylib_command) + name_len,
@sizeOf(u64),
- )));
- try writer.writeStruct(macho.dylib_command{
+ ));
+ try bw.writeStruct(macho.dylib_command{
.cmd = ctx.cmd,
.cmdsize = cmdsize,
.dylib = .{
@@ -224,12 +222,9 @@ pub fn writeDylibLC(ctx: WriteDylibLCCtx, writer: anytype) !void {
.compatibility_version = ctx.compatibility_version,
},
});
- try writer.writeAll(ctx.name);
- try writer.writeByte(0);
- const padding = cmdsize - @sizeOf(macho.dylib_command) - name_len;
- if (padding > 0) {
- try writer.writeByteNTimes(0, padding);
- }
+ try bw.writeAll(ctx.name);
+ try bw.writeByte(0);
+ try bw.splatByteAll(0, cmdsize - @sizeOf(macho.dylib_command) - name_len);
}
pub fn writeDylibIdLC(macho_file: *MachO, writer: anytype) !void {
@@ -258,26 +253,23 @@ pub fn writeDylibIdLC(macho_file: *MachO, writer: anytype) !void {
}, writer);
}
-pub fn writeRpathLC(rpath: []const u8, writer: anytype) !void {
+pub fn writeRpathLC(bw: *Writer, rpath: []const u8) !void {
const rpath_len = rpath.len + 1;
const cmdsize = @as(u32, @intCast(mem.alignForward(
u64,
@sizeOf(macho.rpath_command) + rpath_len,
@sizeOf(u64),
)));
- try writer.writeStruct(macho.rpath_command{
+ try bw.writeStruct(macho.rpath_command{
.cmdsize = cmdsize,
.path = @sizeOf(macho.rpath_command),
});
- try writer.writeAll(rpath);
- try writer.writeByte(0);
- const padding = cmdsize - @sizeOf(macho.rpath_command) - rpath_len;
- if (padding > 0) {
- try writer.writeByteNTimes(0, padding);
- }
+ try bw.writeAll(rpath);
+ try bw.writeByte(0);
+ try bw.splatByteAll(0, cmdsize - @sizeOf(macho.rpath_command) - rpath_len);
}
-pub fn writeVersionMinLC(platform: MachO.Platform, sdk_version: ?std.SemanticVersion, writer: anytype) !void {
+pub fn writeVersionMinLC(bw: *Writer, platform: MachO.Platform, sdk_version: ?std.SemanticVersion) Writer.Error!void {
const cmd: macho.LC = switch (platform.os_tag) {
.macos => .VERSION_MIN_MACOSX,
.ios => .VERSION_MIN_IPHONEOS,
@@ -285,7 +277,7 @@ pub fn writeVersionMinLC(platform: MachO.Platform, sdk_version: ?std.SemanticVer
.watchos => .VERSION_MIN_WATCHOS,
else => unreachable,
};
- try writer.writeAll(mem.asBytes(&macho.version_min_command{
+ try bw.writeAll(mem.asBytes(&macho.version_min_command{
.cmd = cmd,
.version = platform.toAppleVersion(),
.sdk = if (sdk_version) |ver|
@@ -295,9 +287,9 @@ pub fn writeVersionMinLC(platform: MachO.Platform, sdk_version: ?std.SemanticVer
}));
}
-pub fn writeBuildVersionLC(platform: MachO.Platform, sdk_version: ?std.SemanticVersion, writer: anytype) !void {
+pub fn writeBuildVersionLC(bw: *Writer, platform: MachO.Platform, sdk_version: ?std.SemanticVersion) Writer.Error!void {
const cmdsize = @sizeOf(macho.build_version_command) + @sizeOf(macho.build_tool_version);
- try writer.writeStruct(macho.build_version_command{
+ try bw.writeStruct(macho.build_version_command{
.cmdsize = cmdsize,
.platform = platform.toApplePlatform(),
.minos = platform.toAppleVersion(),
@@ -307,7 +299,7 @@ pub fn writeBuildVersionLC(platform: MachO.Platform, sdk_version: ?std.SemanticV
platform.toAppleVersion(),
.ntools = 1,
});
- try writer.writeAll(mem.asBytes(&macho.build_tool_version{
+ try bw.writeAll(mem.asBytes(&macho.build_tool_version{
.tool = .ZIG,
.version = 0x0,
}));