authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2020-12-18 17:47:03+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2020-12-19 12:19:10+01:00
logf32681033d7e57628db13d5d50fc0ff3e1cce20e
tree028174393762d35e8ef37f5941528ac4c4e05849
parent99578e828b84ba7b308e7bbfac3e99650379edc0

macho: auto-coerce to slice


4 files changed, 23 insertions(+), 23 deletions(-)

src/link/MachO.zig+7-7
...@@ -1674,7 +1674,7 @@ fn allocateTextBlock(self: *MachO, text_block: *TextBlock, new_block_size: u64,...@@ -1674,7 +1674,7 @@ fn allocateTextBlock(self: *MachO, text_block: *TextBlock, new_block_size: u64,
1674pub fn makeStaticString(comptime bytes: []const u8) [16]u8 {1674pub fn makeStaticString(comptime bytes: []const u8) [16]u8 {
1675 var buf = [_]u8{0} ** 16;1675 var buf = [_]u8{0} ** 16;
1676 if (bytes.len > buf.len) @compileError("string too long; max 16 bytes");1676 if (bytes.len > buf.len) @compileError("string too long; max 16 bytes");
1677 mem.copy(u8, buf[0..], bytes);1677 mem.copy(u8, &buf, bytes);
1678 return buf;1678 return buf;
1679}1679}
16801680
...@@ -2048,18 +2048,18 @@ fn parseFromFile(self: *MachO, file: fs.File) !void {...@@ -2048,18 +2048,18 @@ fn parseFromFile(self: *MachO, file: fs.File) !void {
2048 switch (cmd.cmd()) {2048 switch (cmd.cmd()) {
2049 macho.LC_SEGMENT_64 => {2049 macho.LC_SEGMENT_64 => {
2050 const x = cmd.Segment;2050 const x = cmd.Segment;
2051 if (parseAndCmpName(x.inner.segname[0..], "__PAGEZERO")) {2051 if (parseAndCmpName(&x.inner.segname, "__PAGEZERO")) {
2052 self.pagezero_segment_cmd_index = i;2052 self.pagezero_segment_cmd_index = i;
2053 } else if (parseAndCmpName(x.inner.segname[0..], "__LINKEDIT")) {2053 } else if (parseAndCmpName(&x.inner.segname, "__LINKEDIT")) {
2054 self.linkedit_segment_cmd_index = i;2054 self.linkedit_segment_cmd_index = i;
2055 } else if (parseAndCmpName(x.inner.segname[0..], "__TEXT")) {2055 } else if (parseAndCmpName(&x.inner.segname, "__TEXT")) {
2056 self.text_segment_cmd_index = i;2056 self.text_segment_cmd_index = i;
2057 for (x.sections.items) |sect, j| {2057 for (x.sections.items) |sect, j| {
2058 if (parseAndCmpName(sect.sectname[0..], "__text")) {2058 if (parseAndCmpName(&sect.sectname, "__text")) {
2059 self.text_section_index = @intCast(u16, j);2059 self.text_section_index = @intCast(u16, j);
2060 }2060 }
2061 }2061 }
2062 } else if (parseAndCmpName(x.inner.segname[0..], "__DATA")) {2062 } else if (parseAndCmpName(&x.inner.segname, "__DATA")) {
2063 self.data_segment_cmd_index = i;2063 self.data_segment_cmd_index = i;
2064 }2064 }
2065 },2065 },
...@@ -2109,7 +2109,7 @@ fn parseFromFile(self: *MachO, file: fs.File) !void {...@@ -2109,7 +2109,7 @@ fn parseFromFile(self: *MachO, file: fs.File) !void {
2109}2109}
21102110
2111fn parseAndCmpName(name: []const u8, needle: []const u8) bool {2111fn parseAndCmpName(name: []const u8, needle: []const u8) bool {
2112 const len = mem.indexOfScalar(u8, name[0..], @as(u8, 0)) orelse name.len;2112 const len = mem.indexOfScalar(u8, name, @as(u8, 0)) orelse name.len;
2113 return mem.eql(u8, name[0..len], needle);2113 return mem.eql(u8, name[0..len], needle);
2114}2114}
21152115
src/link/MachO/CodeSignature.zig+3-3
...@@ -126,7 +126,7 @@ pub fn calcAdhocSignature(...@@ -126,7 +126,7 @@ pub fn calcAdhocSignature(
126126
127 Sha256.hash(buffer[0..fsize], &hash, .{});127 Sha256.hash(buffer[0..fsize], &hash, .{});
128128
129 cdir.data.appendSliceAssumeCapacity(hash[0..]);129 cdir.data.appendSliceAssumeCapacity(&hash);
130 cdir.inner.nCodeSlots += 1;130 cdir.inner.nCodeSlots += 1;
131 }131 }
132132
...@@ -174,10 +174,10 @@ test "CodeSignature header" {...@@ -174,10 +174,10 @@ test "CodeSignature header" {
174 defer code_sig.deinit();174 defer code_sig.deinit();
175175
176 var buffer: [@sizeOf(macho.SuperBlob)]u8 = undefined;176 var buffer: [@sizeOf(macho.SuperBlob)]u8 = undefined;
177 code_sig.writeHeader(buffer[0..]);177 code_sig.writeHeader(&buffer);
178178
179 const expected = &[_]u8{ 0xfa, 0xde, 0x0c, 0xc0, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0 };179 const expected = &[_]u8{ 0xfa, 0xde, 0x0c, 0xc0, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0 };
180 testing.expect(mem.eql(u8, expected[0..], buffer[0..]));180 testing.expect(mem.eql(u8, expected, &buffer));
181}181}
182182
183pub fn calcCodeSignaturePadding(id: []const u8, file_size: u64) u32 {183pub fn calcCodeSignaturePadding(id: []const u8, file_size: u64) u32 {
src/link/MachO/Trie.zig+4-4
...@@ -531,14 +531,14 @@ test "write Trie to a byte stream" {...@@ -531,14 +531,14 @@ test "write Trie to a byte stream" {
531 {531 {
532 const nwritten = try trie.write(stream.writer());532 const nwritten = try trie.write(stream.writer());
533 testing.expect(nwritten == trie.size);533 testing.expect(nwritten == trie.size);
534 testing.expect(mem.eql(u8, buffer, exp_buffer[0..]));534 testing.expect(mem.eql(u8, buffer, &exp_buffer));
535 }535 }
536 {536 {
537 // Writing finalized trie again should yield the same result.537 // Writing finalized trie again should yield the same result.
538 try stream.seekTo(0);538 try stream.seekTo(0);
539 const nwritten = try trie.write(stream.writer());539 const nwritten = try trie.write(stream.writer());
540 testing.expect(nwritten == trie.size);540 testing.expect(nwritten == trie.size);
541 testing.expect(mem.eql(u8, buffer, exp_buffer[0..]));541 testing.expect(mem.eql(u8, buffer, &exp_buffer));
542 }542 }
543}543}
544544
...@@ -556,7 +556,7 @@ test "parse Trie from byte stream" {...@@ -556,7 +556,7 @@ test "parse Trie from byte stream" {
556 0x3, 0x0, 0x80, 0x20, 0x0, // terminal node556 0x3, 0x0, 0x80, 0x20, 0x0, // terminal node
557 };557 };
558558
559 var in_stream = std.io.fixedBufferStream(in_buffer[0..]);559 var in_stream = std.io.fixedBufferStream(&in_buffer);
560 var trie = Trie.init(gpa);560 var trie = Trie.init(gpa);
561 defer trie.deinit();561 defer trie.deinit();
562 const nread = try trie.read(in_stream.reader());562 const nread = try trie.read(in_stream.reader());
...@@ -571,5 +571,5 @@ test "parse Trie from byte stream" {...@@ -571,5 +571,5 @@ test "parse Trie from byte stream" {
571 const nwritten = try trie.write(out_stream.writer());571 const nwritten = try trie.write(out_stream.writer());
572572
573 testing.expect(nwritten == trie.size);573 testing.expect(nwritten == trie.size);
574 testing.expect(mem.eql(u8, in_buffer[0..], out_buffer));574 testing.expect(mem.eql(u8, &in_buffer, out_buffer));
575}575}
src/link/MachO/commands.zig+9-9
...@@ -26,9 +26,9 @@ pub const LoadCommand = union(enum) {...@@ -26,9 +26,9 @@ pub const LoadCommand = union(enum) {
26 const header = try reader.readStruct(macho.load_command);26 const header = try reader.readStruct(macho.load_command);
27 var buffer = try allocator.alloc(u8, header.cmdsize);27 var buffer = try allocator.alloc(u8, header.cmdsize);
28 defer allocator.free(buffer);28 defer allocator.free(buffer);
29 mem.copy(u8, buffer[0..], mem.asBytes(&header));29 mem.copy(u8, buffer, mem.asBytes(&header));
30 try reader.readNoEof(buffer[@sizeOf(macho.load_command)..]);30 try reader.readNoEof(buffer[@sizeOf(macho.load_command)..]);
31 var stream = io.fixedBufferStream(buffer[0..]);31 var stream = io.fixedBufferStream(buffer);
3232
33 return switch (header.cmd) {33 return switch (header.cmd) {
34 macho.LC_SEGMENT_64 => LoadCommand{34 macho.LC_SEGMENT_64 => LoadCommand{
...@@ -216,7 +216,7 @@ pub fn GenericCommandWithData(comptime Cmd: type) type {...@@ -216,7 +216,7 @@ pub fn GenericCommandWithData(comptime Cmd: type) type {
216 const inner = try reader.readStruct(Cmd);216 const inner = try reader.readStruct(Cmd);
217 var data = try allocator.alloc(u8, inner.cmdsize - @sizeOf(Cmd));217 var data = try allocator.alloc(u8, inner.cmdsize - @sizeOf(Cmd));
218 errdefer allocator.free(data);218 errdefer allocator.free(data);
219 try reader.readNoEof(data[0..]);219 try reader.readNoEof(data);
220 return Self{220 return Self{
221 .inner = inner,221 .inner = inner,
222 .data = data,222 .data = data,
...@@ -309,10 +309,10 @@ test "read-write segment command" {...@@ -309,10 +309,10 @@ test "read-write segment command" {
309 .reserved3 = 0,309 .reserved3 = 0,
310 });310 });
311 defer cmd.deinit(gpa);311 defer cmd.deinit(gpa);
312 try testRead(gpa, in_buffer[0..], LoadCommand{ .Segment = cmd });312 try testRead(gpa, in_buffer, LoadCommand{ .Segment = cmd });
313313
314 var out_buffer: [in_buffer.len]u8 = undefined;314 var out_buffer: [in_buffer.len]u8 = undefined;
315 try testWrite(out_buffer[0..], LoadCommand{ .Segment = cmd }, in_buffer[0..]);315 try testWrite(&out_buffer, LoadCommand{ .Segment = cmd }, in_buffer);
316}316}
317317
318test "read-write generic command with data" {318test "read-write generic command with data" {
...@@ -348,10 +348,10 @@ test "read-write generic command with data" {...@@ -348,10 +348,10 @@ test "read-write generic command with data" {
348 cmd.data[5] = 0x0;348 cmd.data[5] = 0x0;
349 cmd.data[6] = 0x0;349 cmd.data[6] = 0x0;
350 cmd.data[7] = 0x0;350 cmd.data[7] = 0x0;
351 try testRead(gpa, in_buffer[0..], LoadCommand{ .Dylib = cmd });351 try testRead(gpa, in_buffer, LoadCommand{ .Dylib = cmd });
352352
353 var out_buffer: [in_buffer.len]u8 = undefined;353 var out_buffer: [in_buffer.len]u8 = undefined;
354 try testWrite(out_buffer[0..], LoadCommand{ .Dylib = cmd }, in_buffer[0..]);354 try testWrite(&out_buffer, LoadCommand{ .Dylib = cmd }, in_buffer);
355}355}
356356
357test "read-write C struct command" {357test "read-write C struct command" {
...@@ -368,8 +368,8 @@ test "read-write C struct command" {...@@ -368,8 +368,8 @@ test "read-write C struct command" {
368 .entryoff = 16644,368 .entryoff = 16644,
369 .stacksize = 0,369 .stacksize = 0,
370 };370 };
371 try testRead(gpa, in_buffer[0..], LoadCommand{ .Main = cmd });371 try testRead(gpa, in_buffer, LoadCommand{ .Main = cmd });
372372
373 var out_buffer: [in_buffer.len]u8 = undefined;373 var out_buffer: [in_buffer.len]u8 = undefined;
374 try testWrite(out_buffer[0..], LoadCommand{ .Main = cmd }, in_buffer[0..]);374 try testWrite(&out_buffer, LoadCommand{ .Main = cmd }, in_buffer);
375}375}