Commit e7912dee9b

Robin Voetter <robin@voetter.nl>
2019-09-01 16:10:36
Fix up preadv, preadv2, pwritev and pwritev2
1 parent e9d795b
Changed files (1)
std
std/os/linux.zig
@@ -210,11 +210,26 @@ pub fn read(fd: i32, buf: [*]u8, count: usize) usize {
 }
 
 pub fn preadv(fd: i32, iov: [*]const iovec, count: usize, offset: u64) usize {
-    return syscall4(SYS_preadv, @bitCast(usize, isize(fd)), @ptrToInt(iov), count, offset);
+    return syscall5(
+        SYS_preadv,
+        @bitCast(usize, isize(fd)),
+        @ptrToInt(iov),
+        count,
+        @truncate(usize, offset),
+        @truncate(usize, offset >> 32),
+    );
 }
 
 pub fn preadv2(fd: i32, iov: [*]const iovec, count: usize, offset: u64, flags: kernel_rwf) usize {
-    return syscall5(SYS_preadv2, @bitCast(usize, isize(fd)), @ptrToInt(iov), count, offset, flags);
+    return syscall6(
+        SYS_preadv2,
+        @bitCast(usize, isize(fd)),
+        @ptrToInt(iov),
+        count,
+        @truncate(usize, offset),
+        @truncate(usize, offset >> 32),
+        flags
+    );
 }
 
 pub fn readv(fd: i32, iov: [*]const iovec, count: usize) usize {
@@ -226,11 +241,26 @@ pub fn writev(fd: i32, iov: [*]const iovec_const, count: usize) usize {
 }
 
 pub fn pwritev(fd: i32, iov: [*]const iovec_const, count: usize, offset: u64) usize {
-    return syscall4(SYS_pwritev, @bitCast(usize, isize(fd)), @ptrToInt(iov), count, offset);
+    return syscall5(
+        SYS_pwritev,
+        @bitCast(usize, isize(fd)),
+        @ptrToInt(iov),
+        count,
+        @truncate(usize, offset),
+        @truncate(usize, offset >> 32),
+    );
 }
 
 pub fn pwritev2(fd: i32, iov: [*]const iovec_const, count: usize, offset: u64, flags: kernel_rwf) usize {
-    return syscall5(SYS_pwritev2, @bitCast(usize, isize(fd)), @ptrToInt(iov), count, offset, flags);
+    return syscall6(
+        SYS_pwritev2,
+        @bitCast(usize, isize(fd)),
+        @ptrToInt(iov),
+        count,
+        @truncate(usize, offset),
+        @truncate(usize, offset >> 32),
+        flags
+    );
 }
 
 // TODO https://github.com/ziglang/zig/issues/265
@@ -503,9 +533,9 @@ pub fn setgid(gid: u32) usize {
 
 pub fn setreuid(ruid: u32, euid: u32) usize {
     if (@hasDecl(@This(), "SYS_setreuid32")) {
-        return syscall2(SYS_setreuid32, ruid, euid));
+        return syscall2(SYS_setreuid32, ruid, euid);
     } else {
-        return syscall2(SYS_setreuid, ruid, euid));
+        return syscall2(SYS_setreuid, ruid, euid);
     }
 }