mirror of
https://github.com/ziglang/zig.git
synced 2026-01-05 04:53:17 +00:00
Add std.os.dup()
This commit is contained in:
parent
7611b80f43
commit
71e99c8690
@ -1282,6 +1282,16 @@ pub fn openatW(dir_fd: fd_t, file_path_w: []const u16, flags: u32, mode: mode_t)
|
||||
};
|
||||
}
|
||||
|
||||
pub fn dup(old_fd: fd_t) !fd_t {
|
||||
const rc = system.dup(old_fd);
|
||||
return switch (errno(rc)) {
|
||||
0 => return @intCast(fd_t, rc),
|
||||
EMFILE => error.ProcessFdQuotaExceeded,
|
||||
EBADF => unreachable, // invalid file descriptor
|
||||
else => |err| return unexpectedErrno(err),
|
||||
};
|
||||
}
|
||||
|
||||
pub fn dup2(old_fd: fd_t, new_fd: fd_t) !void {
|
||||
while (true) {
|
||||
switch (errno(system.dup2(old_fd, new_fd))) {
|
||||
|
||||
@ -94,6 +94,10 @@ pub fn getErrno(r: usize) u12 {
|
||||
return if (signed_r > -4096 and signed_r < 0) @intCast(u12, -signed_r) else 0;
|
||||
}
|
||||
|
||||
pub fn dup(old: i32) usize {
|
||||
return syscall1(.dup, @bitCast(usize, @as(isize, old)));
|
||||
}
|
||||
|
||||
pub fn dup2(old: i32, new: i32) usize {
|
||||
if (@hasField(SYS, "dup2")) {
|
||||
return syscall2(.dup2, @bitCast(usize, @as(isize, old)), @bitCast(usize, @as(isize, new)));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user