From: Markos Chandras <markos.chand...@imgtec.com>

Signed-off-by: Markos Chandras <markos.chand...@imgtec.com>
---
 libc/sysdeps/linux/common/__syscall_fcntl.c   | 57 +++++++++++++++++++++++++--
 libc/sysdeps/linux/common/__syscall_fcntl64.c |  5 +++
 2 files changed, 59 insertions(+), 3 deletions(-)

diff --git a/libc/sysdeps/linux/common/__syscall_fcntl.c 
b/libc/sysdeps/linux/common/__syscall_fcntl.c
index 6d4c339..7cc598c 100644
--- a/libc/sysdeps/linux/common/__syscall_fcntl.c
+++ b/libc/sysdeps/linux/common/__syscall_fcntl.c
@@ -19,6 +19,53 @@
 extern __typeof(fcntl) __libc_fcntl;
 libc_hidden_proto(__libc_fcntl)
 
+
+#if defined(__NR_fcntl64) && !defined (__NR_fcntl)
+
+int __libc_fcntl (int fd, int cmd, ...)
+{
+       va_list ap;
+       void *arg;
+
+       va_start (ap, cmd);
+       arg = va_arg (ap, void*);
+       va_end (ap);
+
+       return INLINE_SYSCALL(fcntl64, 3, fd, cmd, arg);
+}
+libc_hidden_def(__libc_fcntl)
+
+int __fcntl_nocancel (int fd, int cmd, ...)
+{
+       va_list ap;
+       void *arg;
+
+       va_start (ap, cmd);
+       arg = va_arg (ap, void*);
+       va_end (ap);
+
+#ifdef __UCLIBC_HAS_THREADS_NATIVE__
+       if (SINGLE_THREAD_P)
+               return INLINE_SYSCALL(fcntl64, 3, fd, cmd, arg);
+
+       int oldtype = LIBC_CANCEL_ASYNC ();
+
+       int result = INLINE_SYSCALL(fcntl64, 3, fd, cmd, arg);
+
+       LIBC_CANCEL_RESET (oldtype);
+
+       return result;
+
+#else
+
+       return INLINE_SYSCALL (fcntl64, 3, fd, cmd, arg);
+
+#endif
+}
+libc_hidden_def(__fcntl_nocancel)
+
+#else
+
 int __fcntl_nocancel (int fd, int cmd, ...)
 {
        va_list ap;
@@ -70,7 +117,9 @@ int __libc_fcntl (int fd, int cmd, ...)
        LIBC_CANCEL_RESET (oldtype);
 
        return result;
-#else
+
+#else /* __UCLIBC_HAS_THREADS_NATIVE__ */
+
 # if __WORDSIZE == 32
        if (cmd == F_GETLK64 || cmd == F_SETLK64 || cmd == F_SETLKW64) {
 #  if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64
@@ -80,12 +129,14 @@ int __libc_fcntl (int fd, int cmd, ...)
                return -1;
 #  endif
        }
-# endif
+# endif /* __WORDSIZE */
        return INLINE_SYSCALL (fcntl, 3, fd, cmd, arg);
-#endif
+#endif /* __UCLIBC_HAS_THREADS_NATIVE__ */
 }
 libc_hidden_def(__libc_fcntl)
 
+#endif
+
 libc_hidden_proto(fcntl)
 weak_alias(__libc_fcntl,fcntl)
 libc_hidden_weak(fcntl)
diff --git a/libc/sysdeps/linux/common/__syscall_fcntl64.c 
b/libc/sysdeps/linux/common/__syscall_fcntl64.c
index e8782e9..96f1bae 100644
--- a/libc/sysdeps/linux/common/__syscall_fcntl64.c
+++ b/libc/sysdeps/linux/common/__syscall_fcntl64.c
@@ -27,4 +27,9 @@ int fcntl64(int fd, int cmd, ...)
        return (__syscall_fcntl64(fd, cmd, arg));
 }
 libc_hidden_def(fcntl64)
+
+#if !defined(__NR_fcntl)
+strong_alias(fcntl64, fcntl)
+#endif /* !__NR_fcntl__ */
+
 #endif
-- 
1.8.0


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

Reply via email to