diff options
Diffstat (limited to 'libc/sysdeps/linux/common/lseek.c')
-rw-r--r-- | libc/sysdeps/linux/common/lseek.c | 25 |
1 files changed, 23 insertions, 2 deletions
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 <errno.h> +__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) |