authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-10-07 00:42:58-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-10-07 00:42:58-07:00
logf2d374e8465042fa5cb6bf2be7b9b086948f3a94
tree28b7a8997249dafa8b1171e789fbb0dfce2a9d56
parentfb63a2cfaecb981010e0b9d656fd372dbb331888
parentb2b0bf0506e708e6b8c143eb438a84592310b5a9

Merge branch 'FireFox317-fix-32-bit-target'


6 files changed, 19 insertions(+), 13 deletions(-)

lib/std/fs/file.zig+9-7
......@@ -615,7 +615,7 @@ pub const File = struct {
615615 }
616616 }
617617
618 pub fn pwritev(self: File, iovecs: []os.iovec_const, offset: usize) PWriteError!usize {
618 pub fn pwritev(self: File, iovecs: []os.iovec_const, offset: u64) PWriteError!usize {
619619 if (is_windows) {
620620 // TODO improve this to use WriteFileScatter
621621 if (iovecs.len == 0) return @as(usize, 0);
......@@ -632,11 +632,11 @@ pub const File = struct {
632632
633633 /// The `iovecs` parameter is mutable because this function needs to mutate the fields in
634634 /// order to handle partial writes from the underlying OS layer.
635 pub fn pwritevAll(self: File, iovecs: []os.iovec_const, offset: usize) PWriteError!void {
635 pub fn pwritevAll(self: File, iovecs: []os.iovec_const, offset: u64) PWriteError!void {
636636 if (iovecs.len == 0) return;
637637
638638 var i: usize = 0;
639 var off: usize = 0;
639 var off: u64 = 0;
640640 while (true) {
641641 var amt = try self.pwritev(iovecs[i..], offset + off);
642642 off += amt;
......@@ -652,14 +652,16 @@ pub const File = struct {
652652
653653 pub const CopyRangeError = os.CopyFileRangeError;
654654
655 pub fn copyRange(in: File, in_offset: u64, out: File, out_offset: u64, len: usize) CopyRangeError!usize {
656 return os.copy_file_range(in.handle, in_offset, out.handle, out_offset, len, 0);
655 pub fn copyRange(in: File, in_offset: u64, out: File, out_offset: u64, len: u64) CopyRangeError!u64 {
656 const adjusted_len = math.cast(usize, len) catch math.maxInt(usize);
657 const result = try os.copy_file_range(in.handle, in_offset, out.handle, out_offset, adjusted_len, 0);
658 return result;
657659 }
658660
659661 /// Returns the number of bytes copied. If the number read is smaller than `buffer.len`, it
660662 /// means the in file reached the end. Reaching the end of a file is not an error condition.
661 pub fn copyRangeAll(in: File, in_offset: u64, out: File, out_offset: u64, len: usize) CopyRangeError!usize {
662 var total_bytes_copied: usize = 0;
663 pub fn copyRangeAll(in: File, in_offset: u64, out: File, out_offset: u64, len: u64) CopyRangeError!u64 {
664 var total_bytes_copied: u64 = 0;
663665 var in_off = in_offset;
664666 var out_off = out_offset;
665667 while (total_bytes_copied < len) {
src/codegen.zig+1-1
......@@ -32,7 +32,7 @@ pub const BlockData = struct {
3232/// comptime assert that makes sure we guessed correctly about the size. This only
3333/// exists so that we can bitcast an arch-independent field to and from the real MCValue.
3434pub const AnyMCValue = extern struct {
35 a: u64,
35 a: usize,
3636 b: u64,
3737};
3838
src/link/Elf.zig+2-2
......@@ -2911,7 +2911,7 @@ fn pwriteDbgLineNops(
29112911 prev_padding_size: usize,
29122912 buf: []const u8,
29132913 next_padding_size: usize,
2914 offset: usize,
2914 offset: u64,
29152915) !void {
29162916 const tracy = trace(@src());
29172917 defer tracy.end();
......@@ -2990,7 +2990,7 @@ fn pwriteDbgInfoNops(
29902990 buf: []const u8,
29912991 next_padding_size: usize,
29922992 trailing_zero: bool,
2993 offset: usize,
2993 offset: u64,
29942994) !void {
29952995 const tracy = trace(@src());
29962996 defer tracy.end();
src/link/MachO.zig+5-1
......@@ -1264,10 +1264,14 @@ fn updateString(self: *MachO, old_str_off: u32, new_name: []const u8) !u32 {
12641264 return self.makeString(new_name);
12651265}
12661266
1267/// TODO This should not heap allocate, instead it should utilize a fixed size, statically allocated
1268/// global const array. You could even use pwritev to write the same buffer multiple times with only
1269/// 1 syscall if you needed to, for example, write 8192 bytes using a buffer of only 4096 bytes.
1270/// This size parameter should probably be a usize not u64.
12671271fn addPadding(self: *MachO, size: u64, file_offset: u64) !void {
12681272 if (size == 0) return;
12691273
1270 const buf = try self.base.allocator.alloc(u8, size);
1274 const buf = try self.base.allocator.alloc(u8, @intCast(usize, size));
12711275 defer self.base.allocator.free(buf);
12721276
12731277 mem.set(u8, buf[0..], 0);
src/main.zig+1-1
......@@ -2554,7 +2554,7 @@ fn fmtPathFile(
25542554 const source_code = source_file.readToEndAllocOptions(
25552555 fmt.gpa,
25562556 max_src_size,
2557 stat.size,
2557 std.math.cast(usize, stat.size) catch return error.FileTooBig,
25582558 @alignOf(u8),
25592559 null,
25602560 ) catch |err| switch (err) {
src/value.zig+1-1
......@@ -842,7 +842,7 @@ pub const Value = extern union {
842842 .int_u64 => {
843843 const x = self.cast(Payload.Int_u64).?.int;
844844 if (x == 0) return 0;
845 return std.math.log2(x) + 1;
845 return @intCast(usize, std.math.log2(x) + 1);
846846 },
847847 .int_i64 => {
848848 @panic("TODO implement i64 intBitCountTwosComp");