From 29a778aa191e819b9a8f0a0e4c591588fe50e446 Mon Sep 17 00:00:00 2001 From: "Peter S. Mazinger" Date: Fri, 15 Apr 2011 23:06:40 +0200 Subject: avoid circular dependency in lseek and llseek, providing a stub lseek Signed-off-by: Peter S. Mazinger Signed-off-by: Bernhard Reutner-Fischer --- libc/sysdeps/linux/common/llseek.c | 15 +++++---------- libc/sysdeps/linux/common/lseek.c | 25 +++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 12 deletions(-) (limited to 'libc') diff --git a/libc/sysdeps/linux/common/llseek.c b/libc/sysdeps/linux/common/llseek.c index ff16917e2..8b7cb7525 100644 --- a/libc/sysdeps/linux/common/llseek.c +++ b/libc/sysdeps/linux/common/llseek.c @@ -7,8 +7,8 @@ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */ +#include <_lfs_64.h> #include -#include #include /* Newer kernel ports have llseek() instead of _llseek() */ @@ -16,24 +16,19 @@ # define __NR__llseek __NR_llseek #endif -#if defined __NR__llseek && defined __UCLIBC_HAS_LFS__ - +#ifdef __NR__llseek loff_t lseek64(int fd, loff_t offset, int whence) { loff_t result; - return (loff_t)(INLINE_SYSCALL(_llseek, 5, fd, (off_t) (offset >> 32), - (off_t) (offset & 0xffffffff), &result, whence) ?: result); + return (loff_t)INLINE_SYSCALL(_llseek, 5, fd, (off_t) (offset >> 32), + (off_t) (offset & 0xffffffff), &result, whence) ?: result; } - #else - loff_t lseek64(int fd, loff_t offset, int whence) { - return (loff_t)(lseek(fd, (off_t) (offset), whence)); + return (loff_t)lseek(fd, (off_t) (offset), whence); } - #endif - #ifndef __LINUXTHREADS_OLD__ libc_hidden_def(lseek64) #else diff --git a/libc/sysdeps/linux/common/lseek.c b/libc/sysdeps/linux/common/lseek.c index 9ff424048..1ed956e84 100644 --- a/libc/sysdeps/linux/common/lseek.c +++ b/libc/sysdeps/linux/common/lseek.c @@ -12,12 +12,33 @@ #ifdef __NR_lseek _syscall3(__off_t, lseek, int, fildes, __off_t, offset, int, whence) -#else - +#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); } +#else +# include +__off_t lseek(int fildes, __off_t offset attribute_unused, int whence) +{ + if (fildes < 0) { + __set_errno(EBADF); + return -1; + } + + switch(whence) { + case SEEK_SET: + case SEEK_CUR: + case SEEK_END: + break; + default: + __set_errno(EINVAL); + return -1; + } + + __set_errno(ENOSYS); + return -1; +} #endif #ifndef __LINUXTHREADS_OLD__ libc_hidden_def(lseek) -- cgit v1.2.3