From 24edbbd53a382f35a4365ae065f61d56579f52f1 Mon Sep 17 00:00:00 2001 From: "Peter S. Mazinger" Date: Thu, 21 Apr 2011 23:45:12 +0200 Subject: 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 Signed-off-by: Bernhard Reutner-Fischer --- libc/sysdeps/linux/common/lseek.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'libc/sysdeps/linux/common/lseek.c') 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 #include +#include #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 -__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 -- cgit v1.2.3