summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/common/lseek.c
diff options
context:
space:
mode:
authorPeter S. Mazinger <ps.m@gmx.net>2011-04-21 23:45:12 +0200
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2012-06-15 14:00:41 +0200
commit24edbbd53a382f35a4365ae065f61d56579f52f1 (patch)
tree54556db6c9e65bb555734cd644d932ba9713489b /libc/sysdeps/linux/common/lseek.c
parentfae8e7e498eadf7b859b49a5c6fe103ca447838b (diff)
lseek, lseek64: add cancellation for all THREADS
LT_OLD provides cancellable versions, do it for all THREADS. llseek.c: use newly added macros for offset handling. Add a comment about endianness issue around offset. Compile llseek.c only on 32bit archs. Provide aliases for 64bit archs or if syscall is not available. Signed-off-by: Peter S. Mazinger <ps.m@gmx.net> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'libc/sysdeps/linux/common/lseek.c')
-rw-r--r--libc/sysdeps/linux/common/lseek.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/libc/sysdeps/linux/common/lseek.c b/libc/sysdeps/linux/common/lseek.c
index 1ed956e84..688f2d0f9 100644
--- a/libc/sysdeps/linux/common/lseek.c
+++ b/libc/sysdeps/linux/common/lseek.c
@@ -9,19 +9,16 @@
#include <sys/syscall.h>
#include <unistd.h>
+#include <cancel.h>
#ifdef __NR_lseek
-_syscall3(__off_t, lseek, int, fildes, __off_t, offset, int, whence)
-#elif defined __UCLIBC_HAS_LFS__ && defined __NR__llseek /* avoid circular dependency */
-__off_t lseek(int fildes, __off_t offset, int whence)
-{
- return lseek64(fildes, offset, whence);
-}
+# define __NR___lseek_nocancel __NR_lseek
+_syscall3(off_t, __NC(lseek), int, fd, off_t, offset, int, whence)
#else
# include <errno.h>
-__off_t lseek(int fildes, __off_t offset attribute_unused, int whence)
+off_t __NC(lseek)(int fd, off_t offset attribute_unused, int whence)
{
- if (fildes < 0) {
+ if (fd < 0) {
__set_errno(EBADF);
return -1;
}
@@ -40,9 +37,10 @@ __off_t lseek(int fildes, __off_t offset attribute_unused, int whence)
return -1;
}
#endif
-#ifndef __LINUXTHREADS_OLD__
-libc_hidden_def(lseek)
-#else
-libc_hidden_weak(lseek)
-strong_alias(lseek,__libc_lseek)
+CANCELLABLE_SYSCALL(off_t, lseek, (int fd, off_t offset, int whence), (fd, offset, whence))
+lt_libc_hidden(lseek)
+#if defined __UCLIBC_HAS_LFS__ && (__WORDSIZE == 64 || !defined __NR__llseek)
+strong_alias_untyped(__NC(lseek),__NC(lseek64))
+strong_alias_untyped(lseek,lseek64)
+lt_libc_hidden(lseek64)
#endif