Browse Source

fcntl: Use fcntl64 is arch does not have the fcntl syscall

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>

Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Markos Chandras 13 years ago
parent
commit
d62c716242
1 changed files with 16 additions and 2 deletions
  1. 16 2
      libc/sysdeps/linux/common/__syscall_fcntl.c

+ 16 - 2
libc/sysdeps/linux/common/__syscall_fcntl.c

@@ -18,15 +18,21 @@ int __NC(fcntl)(int fd, int cmd, long arg)
 {
 #if __WORDSIZE == 32
 	if (cmd == F_GETLK64 || cmd == F_SETLK64 || cmd == F_SETLKW64) {
-# if defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64
-		return __NC(fcntl64)(fd, cmd, arg);
+# if (defined __UCLIBC_HAS_LFS__ && defined __NR_fcntl64) || !defined __NR_fcntl
+		return INLINE_SYSCALL(fcntl64, 3, fd, cmd, arg);
 # else
 		__set_errno(ENOSYS);
 		return -1;
 # endif
 	}
 #endif
+
+#if defined __NR_fcntl
 	return INLINE_SYSCALL(fcntl, 3, fd, cmd, arg);
+#else
+	__set_errno(ENOSYS);
+	return -1;
+#endif
 }
 
 int fcntl(int fd, int cmd, ...)
@@ -39,10 +45,18 @@ int fcntl(int fd, int cmd, ...)
 	va_end (ap);
 
 	if (SINGLE_THREAD_P || (cmd != F_SETLKW && cmd != F_SETLKW64))
+#if defined __NR_fcntl
 		return __NC(fcntl)(fd, cmd, arg);
+#else
+		return INLINE_SYSCALL(fcntl64, 3, fd, cmd, arg);
+#endif
 #ifdef __NEW_THREADS
 	int oldtype = LIBC_CANCEL_ASYNC ();
+#if defined __NR_fcntl
 	int result = __NC(fcntl)(fd, cmd, arg);
+#else
+	int result = INLINE_SYSCALL(fcntl64, 3, fd, cmd, arg);
+#endif
 	LIBC_CANCEL_RESET (oldtype);
 	return result;
 #endif