From 8c1ab65c0f548d20b7f177bdb736daaf603340e1 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 15:54:38 +0200 Subject: Adding upstream version 0.0~git20221206.8b7148f. Signed-off-by: Daniel Baumann --- libc-top-half/musl/src/unistd/dup3.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 libc-top-half/musl/src/unistd/dup3.c (limited to 'libc-top-half/musl/src/unistd/dup3.c') diff --git a/libc-top-half/musl/src/unistd/dup3.c b/libc-top-half/musl/src/unistd/dup3.c new file mode 100644 index 0000000..f919f79 --- /dev/null +++ b/libc-top-half/musl/src/unistd/dup3.c @@ -0,0 +1,24 @@ +#define _GNU_SOURCE +#include +#include +#include +#include "syscall.h" + +int __dup3(int old, int new, int flags) +{ + int r; +#ifdef SYS_dup2 + if (old==new) return __syscall_ret(-EINVAL); + if (flags & O_CLOEXEC) { + while ((r=__syscall(SYS_dup3, old, new, flags))==-EBUSY); + if (r!=-ENOSYS) return __syscall_ret(r); + } + while ((r=__syscall(SYS_dup2, old, new))==-EBUSY); + if (flags & O_CLOEXEC) __syscall(SYS_fcntl, new, F_SETFD, FD_CLOEXEC); +#else + while ((r=__syscall(SYS_dup3, old, new, flags))==-EBUSY); +#endif + return __syscall_ret(r); +} + +weak_alias(__dup3, dup3); -- cgit v1.2.3