| author | |
| committer | |
| log | 71e99c869012194cc4a23c5842b746533c1ae2bb |
| tree | dfe8deff0e277fd83ebb3c32c918f916ed1f177e |
| parent | 7611b80f432be29f3fa83ea1891002fd20f0a07f |
2 files changed, 14 insertions(+), 0 deletions(-)
lib/std/os.zig+10| ... | @@ -1282,6 +1282,16 @@ pub fn openatW(dir_fd: fd_t, file_path_w: []const u16, flags: u32, mode: mode_t) | ... | @@ -1282,6 +1282,16 @@ pub fn openatW(dir_fd: fd_t, file_path_w: []const u16, flags: u32, mode: mode_t) |
| 1282 | }; | 1282 | }; |
| 1283 | } | 1283 | } |
| 1284 | 1284 | ||
| 1285 | pub fn dup(old_fd: fd_t) !fd_t { | ||
| 1286 | const rc = system.dup(old_fd); | ||
| 1287 | return switch (errno(rc)) { | ||
| 1288 | 0 => return @intCast(fd_t, rc), | ||
| 1289 | EMFILE => error.ProcessFdQuotaExceeded, | ||
| 1290 | EBADF => unreachable, // invalid file descriptor | ||
| 1291 | else => |err| return unexpectedErrno(err), | ||
| 1292 | }; | ||
| 1293 | } | ||
| 1294 | |||
| 1285 | pub fn dup2(old_fd: fd_t, new_fd: fd_t) !void { | 1295 | pub fn dup2(old_fd: fd_t, new_fd: fd_t) !void { |
| 1286 | while (true) { | 1296 | while (true) { |
| 1287 | switch (errno(system.dup2(old_fd, new_fd))) { | 1297 | switch (errno(system.dup2(old_fd, new_fd))) { |
lib/std/os/linux.zig+4| ... | @@ -94,6 +94,10 @@ pub fn getErrno(r: usize) u12 { | ... | @@ -94,6 +94,10 @@ pub fn getErrno(r: usize) u12 { |
| 94 | return if (signed_r > -4096 and signed_r < 0) @intCast(u12, -signed_r) else 0; | 94 | return if (signed_r > -4096 and signed_r < 0) @intCast(u12, -signed_r) else 0; |
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | pub fn dup(old: i32) usize { | ||
| 98 | return syscall1(.dup, @bitCast(usize, @as(isize, old))); | ||
| 99 | } | ||
| 100 | |||
| 97 | pub fn dup2(old: i32, new: i32) usize { | 101 | pub fn dup2(old: i32, new: i32) usize { |
| 98 | if (@hasField(SYS, "dup2")) { | 102 | if (@hasField(SYS, "dup2")) { |
| 99 | return syscall2(.dup2, @bitCast(usize, @as(isize, old)), @bitCast(usize, @as(isize, new))); | 103 | return syscall2(.dup2, @bitCast(usize, @as(isize, old)), @bitCast(usize, @as(isize, new))); |