| author | |
| committer | |
| log | ee048d65692c6db9d084da951d3113af7db367aa |
| tree | 932e8e4c154ddd42fe6c212a9aec9ca84d167c2f |
| parent | 2d4c4396524d7572d2869d79a209e5772a33a59b |
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))); |