Signed-off-by: Mark Salter <msal...@redhat.com>
---
 libc/sysdeps/linux/common/dup2.c |   22 ++++++++++++++++++++++
 libc/sysdeps/linux/common/pipe.c |    7 +++++++
 2 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/libc/sysdeps/linux/common/dup2.c b/libc/sysdeps/linux/common/dup2.c
index 006f06b..792e81e 100644
--- a/libc/sysdeps/linux/common/dup2.c
+++ b/libc/sysdeps/linux/common/dup2.c
@@ -11,5 +11,27 @@
 #include <unistd.h>
 
 
+#ifdef __NR_dup2
 _syscall2(int, dup2, int, oldfd, int, newfd)
+#elif defined __NR_dup3
+#include <fcntl.h>
+
+int
+dup2 (int fd, int fd2)
+{
+       /* For the degenerate case, check if the fd is valid (by trying to
+          get the file status flags) and return it, or else return EBADF.  */
+       if (fd == fd2) {
+               int err;
+#ifdef __NR_fcntl64
+               err = INLINE_SYSCALL(fcntl64, 3, fd, F_GETFL, 0);
+#else
+               err = INLINE_SYSCALL(fcntl, 3, fd, F_GETFL, 0);
+#endif
+               return err < 0 ? -1 : fd;
+       }
+
+       return INLINE_SYSCALL(dup3, 3, fd, fd2, 0);
+}
+#endif
 libc_hidden_def(dup2)
diff --git a/libc/sysdeps/linux/common/pipe.c b/libc/sysdeps/linux/common/pipe.c
index 8eae27c..bc316f8 100644
--- a/libc/sysdeps/linux/common/pipe.c
+++ b/libc/sysdeps/linux/common/pipe.c
@@ -11,5 +11,12 @@
 #include <unistd.h>
 
 
+#if defined(__NR_pipe)
 _syscall1(int, pipe, int *, filedes)
+#elif defined(__NR_pipe2)
+int pipe(int filedes[2])
+{
+       return INLINE_SYSCALL(pipe2, 2, filedes, 0);
+}
+#endif
 libc_hidden_def(pipe)
-- 
1.7.9.1

_______________________________________________
uClibc mailing list
uClibc@uclibc.org
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to