zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 4eff48b12ea90ddeb86f8f089f258ae2d615c7c4 (tree)
parent f66a607607c20841ed59a1fe11486333f8621426
Author: LeRoyce Pearson <leroycepearson@geemili.xyz>
Date:   Mon,  9 Mar 2020 22:57:07 -0600

Add flock command paramter to `os.fcntlFlock`

Also, replace `os.fcntlFlockBlocking` with `os.fcntlFlock`

Diffstat:
Mlib/std/fs.zig | 2+-
Mlib/std/os.zig | 17+++++++++++++++--
2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/lib/std/fs.zig b/lib/std/fs.zig @@ -688,7 +688,7 @@ pub const Dir = struct { flock.l_start = 0; flock.l_len = 0; flock.l_pid = 0; - try os.fcntlFlockBlocking(fd, &flock); + try os.fcntlFlock(fd, .SetLockBlocking, &flock); locked = true; } diff --git a/lib/std/os.zig b/lib/std/os.zig @@ -1140,9 +1140,22 @@ pub fn freeNullDelimitedEnvMap(allocator: *mem.Allocator, envp_buf: []?[*:0]u8) allocator.free(envp_buf); } +pub const LockCmd = enum { + GetLock, + SetLock, + SetLockBlocking, +}; + /// Attempts to get lock the file, blocking if the file is locked. -pub fn fcntlFlockBlocking(fd: fd_t, flock_p: *const Flock) OpenError!void { - const rc = system.fcntl(fd, F_SETLKW, flock_p); +pub fn fcntlFlock(fd: fd_t, lock_cmd: LockCmd, flock_p: *const Flock) OpenError!void { + const cmd: i32 = cmdval: { + switch (lock_cmd) { + .GetLock => break :cmdval F_GETLK, + .SetLock => break :cmdval F_SETLK, + .SetLockBlocking => break :cmdval F_SETLKW, + } + }; + const rc = system.fcntl(fd, cmd, flock_p); if (rc < 0) { std.debug.panic("fcntl error: {}\n", .{rc}); }