X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Funistd%2Fpipe2.c;h=973e8ec3e56aa3063a4b5dae34b3460c8f41d99b;hb=5652d70054daf3c2c9b6d475fdf9d24a940e51aa;hp=83282bb9c918976cc2203680ae75ad7da4e37c09;hpb=dc62790deec183697489d5fddea03c82f725e7fd;p=musl diff --git a/src/unistd/pipe2.c b/src/unistd/pipe2.c index 83282bb9..973e8ec3 100644 --- a/src/unistd/pipe2.c +++ b/src/unistd/pipe2.c @@ -1,8 +1,22 @@ -#define _GNU_SOURCE #include +#include +#include #include "syscall.h" -int pipe2(int fd[2], int flg) +int pipe2(int fd[2], int flag) { - return syscall(SYS_pipe2, fd, flg); + if (!flag) return syscall(SYS_pipe, fd); + int ret = __syscall(SYS_pipe2, fd, flag); + if (ret != -ENOSYS) return __syscall_ret(ret); + ret = __syscall(SYS_pipe, fd); + if (ret) return __syscall_ret(ret); + if (flag & O_CLOEXEC) { + fcntl(fd[0], F_SETFD, FD_CLOEXEC); + fcntl(fd[1], F_SETFD, FD_CLOEXEC); + } + if (flag & O_NONBLOCK) { + fcntl(fd[0], F_SETFL, fcntl(fd[0], F_GETFL) | O_NONBLOCK); + fcntl(fd[1], F_SETFL, fcntl(fd[1], F_GETFL) | O_NONBLOCK); + } + return 0; }