summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/fcntl.h9
-rw-r--r--libc/sysdeps/linux/common/syscalls.c23
2 files changed, 32 insertions, 0 deletions
diff --git a/include/fcntl.h b/include/fcntl.h
index 951fd8016..1ab84f2a9 100644
--- a/include/fcntl.h
+++ b/include/fcntl.h
@@ -57,7 +57,16 @@ __BEGIN_DECLS
/* Do the file control operation described by CMD on FD.
The remaining arguments are interpreted depending on CMD. */
+#ifndef __USE_FILE_OFFSET64
extern int fcntl (int __fd, int __cmd, ...) __THROW;
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT (fcntl, (int __fd, int __cmd, ...) __THROW,
+ fcntl64);
+# else
+# define fcntl fcntl64
+# endif
+#endif
/* Open FILE and return a new file descriptor for it, or -1 on error.
OFLAG determines the type of access used. If O_CREAT is on OFLAG,
diff --git a/libc/sysdeps/linux/common/syscalls.c b/libc/sysdeps/linux/common/syscalls.c
index 2059c9875..ddadc3134 100644
--- a/libc/sysdeps/linux/common/syscalls.c
+++ b/libc/sysdeps/linux/common/syscalls.c
@@ -1533,6 +1533,29 @@ _syscall3(int, getdents64, int, fd, char *, dirp, size_t, count);
#endif /* __UCLIBC_HAVE_LFS__ */
//#define __NR_fcntl64 221
+#ifdef __UCLIBC_HAVE_LFS__
+#define __NR__fcntl64 __NR_fcntl64
+#ifdef L__fcntl64
+#include <stdarg.h>
+#include <fcntl.h>
+extern int _fcntl64(int fd, int cmd, long arg);
+
+_syscall3(int, _fcntl64, int, fd, int, cmd, long, arg);
+
+int fcntl64(int fd, int command, ...)
+{
+ long arg;
+ va_list list;
+
+ va_start(list, command);
+ arg = va_arg(list, long);
+
+ va_end(list);
+ return _fcntl64(fd, command, arg);
+}
+#endif
+#endif
+
//#define __NR_security 223 /* syscall for security modules */
//#define __NR_gettid 224
//#define __NR_readahead 225