aboutsummaryrefslogtreecommitdiff
path: root/lib/std/os/linux.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-11-05 17:23:00 -0500
committerGitHub <noreply@github.com>2020-11-05 17:23:00 -0500
commitf85d7199521290121ade4506ea53acdaf6284982 (patch)
treec4d4c4f312b8950a2004ed105f1a5c9479ab78a4 /lib/std/os/linux.zig
parente7b60b219be3885718425d8ddf25d38d3808e90e (diff)
parent8193f558200da27531304b77c1e80c16bb728420 (diff)
downloadzig-f85d7199521290121ade4506ea53acdaf6284982.tar.gz
zig-f85d7199521290121ade4506ea53acdaf6284982.zip
Merge pull request #6895 from jorangreef/fallocate
linux: add fallocate()
Diffstat (limited to 'lib/std/os/linux.zig')
-rw-r--r--lib/std/os/linux.zig24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig
index c5fbd0bcfe..c422826f13 100644
--- a/lib/std/os/linux.zig
+++ b/lib/std/os/linux.zig
@@ -136,6 +136,30 @@ pub fn utimensat(dirfd: i32, path: ?[*:0]const u8, times: *const [2]timespec, fl
return syscall4(.utimensat, @bitCast(usize, @as(isize, dirfd)), @ptrToInt(path), @ptrToInt(times), flags);
}
+pub fn fallocate(fd: i32, mode: i32, offset: u64, length: u64) usize {
+ if (@sizeOf(usize) == 4) {
+ const offset_halves = splitValue64(offset);
+ const length_halves = splitValue64(length);
+ return syscall6(
+ .fallocate,
+ @bitCast(usize, @as(isize, fd)),
+ @bitCast(usize, @as(isize, mode)),
+ offset_halves[0],
+ offset_halves[1],
+ length_halves[0],
+ length_halves[1],
+ );
+ } else {
+ return syscall4(
+ .fallocate,
+ @bitCast(usize, @as(isize, fd)),
+ @bitCast(usize, @as(isize, mode)),
+ offset,
+ length,
+ );
+ }
+}
+
pub fn futex_wait(uaddr: *const i32, futex_op: u32, val: i32, timeout: ?*timespec) usize {
return syscall4(.futex, @ptrToInt(uaddr), futex_op, @bitCast(u32, val), @ptrToInt(timeout));
}