aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTimon Kruiper <timonkruiper@gmail.com>2020-10-06 12:08:12 +0200
committerAndrew Kelley <andrew@ziglang.org>2020-10-06 23:39:58 -0700
commitbd7eab573a5e5f1366cd5dc3639fef28c4acb32a (patch)
treef1f6a4363781197db451e072ea7650595032bc6c /lib
parentfb63a2cfaecb981010e0b9d656fd372dbb331888 (diff)
downloadzig-bd7eab573a5e5f1366cd5dc3639fef28c4acb32a.tar.gz
zig-bd7eab573a5e5f1366cd5dc3639fef28c4acb32a.zip
Fix building the zig compiler for 32-bit targets
Diffstat (limited to 'lib')
-rw-r--r--lib/std/fs/file.zig21
1 files changed, 11 insertions, 10 deletions
diff --git a/lib/std/fs/file.zig b/lib/std/fs/file.zig
index 8d4f5df2e8..e0795f4c1c 100644
--- a/lib/std/fs/file.zig
+++ b/lib/std/fs/file.zig
@@ -615,7 +615,7 @@ pub const File = struct {
}
}
- pub fn pwritev(self: File, iovecs: []os.iovec_const, offset: usize) PWriteError!usize {
+ pub fn pwritev(self: File, iovecs: []os.iovec_const, offset: u64) PWriteError!usize {
if (is_windows) {
// TODO improve this to use WriteFileScatter
if (iovecs.len == 0) return @as(usize, 0);
@@ -632,11 +632,11 @@ pub const File = struct {
/// The `iovecs` parameter is mutable because this function needs to mutate the fields in
/// order to handle partial writes from the underlying OS layer.
- pub fn pwritevAll(self: File, iovecs: []os.iovec_const, offset: usize) PWriteError!void {
+ pub fn pwritevAll(self: File, iovecs: []os.iovec_const, offset: u64) PWriteError!void {
if (iovecs.len == 0) return;
var i: usize = 0;
- var off: usize = 0;
+ var off: u64 = 0;
while (true) {
var amt = try self.pwritev(iovecs[i..], offset + off);
off += amt;
@@ -652,24 +652,25 @@ pub const File = struct {
pub const CopyRangeError = os.CopyFileRangeError;
- pub fn copyRange(in: File, in_offset: u64, out: File, out_offset: u64, len: usize) CopyRangeError!usize {
- return os.copy_file_range(in.handle, in_offset, out.handle, out_offset, len, 0);
+ pub fn copyRange(in: File, in_offset: u64, out: File, out_offset: u64, len: u64) CopyRangeError!usize {
+ const adjusted_len = math.cast(usize, len) catch math.maxInt(usize);
+ return os.copy_file_range(in.handle, in_offset, out.handle, out_offset, adjusted_len, 0);
}
/// Returns the number of bytes copied. If the number read is smaller than `buffer.len`, it
/// means the in file reached the end. Reaching the end of a file is not an error condition.
- pub fn copyRangeAll(in: File, in_offset: u64, out: File, out_offset: u64, len: usize) CopyRangeError!usize {
- var total_bytes_copied: usize = 0;
+ pub fn copyRangeAll(in: File, in_offset: u64, out: File, out_offset: u64, len: u64) CopyRangeError!usize {
+ var total_bytes_copied: u64 = 0;
var in_off = in_offset;
var out_off = out_offset;
while (total_bytes_copied < len) {
- const amt_copied = try copyRange(in, in_off, out, out_off, len - total_bytes_copied);
- if (amt_copied == 0) return total_bytes_copied;
+ const amt_copied = try copyRange(in, in_off, out, out_off, len);
+ if (amt_copied == 0) return @intCast(usize, total_bytes_copied);
total_bytes_copied += amt_copied;
in_off += amt_copied;
out_off += amt_copied;
}
- return total_bytes_copied;
+ return @intCast(usize, total_bytes_copied);
}
pub const WriteFileOptions = struct {