OSDN Git Service

if fcntl() is called with a 64bit command and LFS is enabled, pass the command along...
authorMike Frysinger <vapier@gentoo.org>
Thu, 28 Jul 2005 22:19:41 +0000 (22:19 -0000)
committerMike Frysinger <vapier@gentoo.org>
Thu, 28 Jul 2005 22:19:41 +0000 (22:19 -0000)
libc/sysdeps/linux/common/__syscall_fcntl.c

index 6256852..0a58129 100644 (file)
 #include <stdarg.h>
 #include <fcntl.h>
 
-#define __NR___syscall_fcntl __NR_fcntl
 #ifdef __UCLIBC_HAS_LFS__
-static inline
+extern int __libc_fcntl64(int fd, int cmd, long arg);
 #endif
+
+#define __NR___syscall_fcntl __NR_fcntl
+static inline
 _syscall3(int, __syscall_fcntl, int, fd, int, cmd, long, arg);
 
 int __libc_fcntl(int fd, int cmd, ...)
@@ -22,13 +24,18 @@ int __libc_fcntl(int fd, int cmd, ...)
        long arg;
        va_list list;
 
+       va_start(list, cmd);
+       arg = va_arg(list, long);
+       va_end(list);
+
        if (cmd == F_GETLK64 || cmd == F_SETLK64 || cmd == F_SETLKW64) {
+#ifdef __UCLIBC_HAS_LFS__
+               return __libc_fcntl64(fd, cmd, arg);
+#else
                __set_errno(ENOSYS);
                return -1;
+#endif
        }
-       va_start(list, cmd);
-       arg = va_arg(list, long);
-       va_end(list);
        return (__syscall_fcntl(fd, cmd, arg));
 }