| ... | @@ -1140,9 +1140,22 @@ pub fn freeNullDelimitedEnvMap(allocator: *mem.Allocator, envp_buf: []?[*:0]u8) | ... | @@ -1140,9 +1140,22 @@ pub fn freeNullDelimitedEnvMap(allocator: *mem.Allocator, envp_buf: []?[*:0]u8) |
| 1140 | allocator.free(envp_buf); | 1140 | allocator.free(envp_buf); |
| 1141 | } | 1141 | } |
| 1142 | | 1142 | |
| | 1143 | pub const LockCmd = enum { |
| | 1144 | GetLock, |
| | 1145 | SetLock, |
| | 1146 | SetLockBlocking, |
| | 1147 | }; |
| | 1148 | |
| 1143 | /// Attempts to get lock the file, blocking if the file is locked. | 1149 | /// Attempts to get lock the file, blocking if the file is locked. |
| 1144 | pub fn fcntlFlockBlocking(fd: fd_t, flock_p: *const Flock) OpenError!void { | 1150 | pub fn fcntlFlock(fd: fd_t, lock_cmd: LockCmd, flock_p: *const Flock) OpenError!void { |
| 1145 | const rc = system.fcntl(fd, F_SETLKW, flock_p); | 1151 | const cmd: i32 = cmdval: { |
| | 1152 | switch (lock_cmd) { |
| | 1153 | .GetLock => break :cmdval F_GETLK, |
| | 1154 | .SetLock => break :cmdval F_SETLK, |
| | 1155 | .SetLockBlocking => break :cmdval F_SETLKW, |
| | 1156 | } |
| | 1157 | }; |
| | 1158 | const rc = system.fcntl(fd, cmd, flock_p); |
| 1146 | if (rc < 0) { | 1159 | if (rc < 0) { |
| 1147 | std.debug.panic("fcntl error: {}\n", .{rc}); | 1160 | std.debug.panic("fcntl error: {}\n", .{rc}); |
| 1148 | } | 1161 | } |