| ... | ... | @@ -29,8 +29,19 @@ pub fn openFile(self: Dir, sub_path: [:0]const u8, flags: OpenFileFlags) !File { |
| 29 | 29 | .write_only => sys.O.WRONLY, |
| 30 | 30 | .read_write => sys.O.RDWR, |
| 31 | 31 | }; |
| 32 | if (os != .linux) oflag |= switch (flags.lock) { |
| 33 | .none => 0, |
| 34 | .shared => sys.O.SHLOCK, |
| 35 | .exclusive => sys.O.EXLOCK, |
| 36 | }; |
| 32 | 37 | oflag |= sys.O.CLOEXEC; |
| 33 | | return .{ .fd = @enumFromInt(try sys.openat(@intFromEnum(self.fd), sub_path.ptr, oflag)) }; |
| 38 | const fd = try sys.openat(@intFromEnum(self.fd), sub_path.ptr, oflag); |
| 39 | if (os == .linux) switch (flags.lock) { |
| 40 | .none => {}, |
| 41 | .shared => try sys.flock(fd, sys.LOCK.SH), |
| 42 | .exclusive => try sys.flock(fd, sys.LOCK.EX), |
| 43 | }; |
| 44 | return .{ .fd = @enumFromInt(fd) }; |
| 34 | 45 | } |
| 35 | 46 | pub fn openFileC(self: Dir, sub_path: []const u8, flags: OpenFileFlags) !File { |
| 36 | 47 | std.debug.assert(sub_path.len <= sys.PATH_MAX); |
| ... | ... | @@ -42,6 +53,7 @@ pub fn openFileC(self: Dir, sub_path: []const u8, flags: OpenFileFlags) !File { |
| 42 | 53 | |
| 43 | 54 | pub const OpenFileFlags = packed struct { |
| 44 | 55 | mode: enum(u8) { read_only, write_only, read_write } = .read_only, |
| 56 | lock: enum(u8) { none, shared, exclusive } = .none, |
| 45 | 57 | }; |
| 46 | 58 | |
| 47 | 59 | pub fn openDir(self: Dir, sub_path: [:0]const u8, flags: OpenDirFlags) !Dir { |