| ... | ... | @@ -2528,6 +2528,29 @@ pub fn pipe() PipeError![2]fd_t { |
| 2528 | 2528 | } |
| 2529 | 2529 | |
| 2530 | 2530 | pub fn pipe2(flags: u32) PipeError![2]fd_t { |
| 2531 | if (comptime std.Target.current.isDarwin()) { |
| 2532 | var fds: [2]fd_t = undefined; |
| 2533 | switch (errno(system.pipe(&fds, flags))) { |
| 2534 | 0 => {}, |
| 2535 | EINVAL => unreachable, // Invalid flags |
| 2536 | EFAULT => unreachable, // Invalid fds pointer |
| 2537 | ENFILE => return error.SystemFdQuotaExceeded, |
| 2538 | EMFILE => return error.ProcessFdQuotaExceeded, |
| 2539 | else => |err| return unexpectedErrno(err), |
| 2540 | } |
| 2541 | errdefer { |
| 2542 | close(fds[0]); |
| 2543 | close(fds[1]); |
| 2544 | } |
| 2545 | for (fds) |fd| switch (errno(system.fcntl(fd, F_SETFL, flags))) { |
| 2546 | 0 => {}, |
| 2547 | EINVAL => unreachable, // Invalid flags |
| 2548 | EBADF => unreachable, // Always a race condition |
| 2549 | else => |err| return unexpectedErrno(err), |
| 2550 | }; |
| 2551 | return fds; |
| 2552 | } |
| 2553 | |
| 2531 | 2554 | var fds: [2]fd_t = undefined; |
| 2532 | 2555 | switch (errno(system.pipe2(&fds, flags))) { |
| 2533 | 2556 | 0 => return fds, |