| ... | @@ -21,8 +21,14 @@ pub fn close(self: Dir) void { | ... | @@ -21,8 +21,14 @@ pub fn close(self: Dir) void { |
| 21 | } | 21 | } |
| 22 | | 22 | |
| 23 | pub fn openFile(self: Dir, sub_path: [:0]const u8, flags: OpenFileFlags) !File { | 23 | pub fn openFile(self: Dir, sub_path: [:0]const u8, flags: OpenFileFlags) !File { |
| 24 | _ = flags; | 24 | var oflag: c_int = 0; |
| 25 | return .{ .fd = @enumFromInt(try sys.openat(@intFromEnum(self.fd), sub_path.ptr, sys.O.RDONLY)) }; | 25 | oflag |= switch (flags.mode) { |
| | 26 | .read_only => sys.O.RDONLY, |
| | 27 | .write_only => sys.O.WRONLY, |
| | 28 | .read_write => sys.O.RDWR, |
| | 29 | }; |
| | 30 | oflag |= sys.O.CLOEXEC; |
| | 31 | return .{ .fd = @enumFromInt(try sys.openat(@intFromEnum(self.fd), sub_path.ptr, oflag)) }; |
| 26 | } | 32 | } |
| 27 | pub fn openFileC(self: Dir, sub_path: []const u8, flags: OpenFileFlags) !File { | 33 | pub fn openFileC(self: Dir, sub_path: []const u8, flags: OpenFileFlags) !File { |
| 28 | std.debug.assert(sub_path.len <= sys.PATH_MAX); | 34 | std.debug.assert(sub_path.len <= sys.PATH_MAX); |
| ... | @@ -33,7 +39,7 @@ pub fn openFileC(self: Dir, sub_path: []const u8, flags: OpenFileFlags) !File { | ... | @@ -33,7 +39,7 @@ pub fn openFileC(self: Dir, sub_path: []const u8, flags: OpenFileFlags) !File { |
| 33 | } | 39 | } |
| 34 | | 40 | |
| 35 | pub const OpenFileFlags = packed struct { | 41 | pub const OpenFileFlags = packed struct { |
| 36 | // | 42 | mode: enum(u8) { read_only, write_only, read_write } = .read_only, |
| 37 | }; | 43 | }; |
| 38 | | 44 | |
| 39 | pub fn openDir(self: Dir, sub_path: [:0]const u8, flags: OpenDirFlags) !Dir { | 45 | pub fn openDir(self: Dir, sub_path: [:0]const u8, flags: OpenDirFlags) !Dir { |