X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=klibc%2Fklibc%2Fllseek.c;h=857490b3782aeb5df68add1e70f4bc90c998ea97;hp=fdffc16e2ce272bd8e280925a4260917fed70eba;hb=4f8d44c220d811352b63c65b5a66403339005aac;hpb=a41a0e28c2ba0abf99b5e7ea17645ae0e4f05758 diff --git a/klibc/klibc/llseek.c b/klibc/klibc/llseek.c index fdffc16e2..857490b37 100644 --- a/klibc/klibc/llseek.c +++ b/klibc/klibc/llseek.c @@ -1,33 +1,29 @@ /* * llseek.c * - * On 32-bit platforms, we need llseek() as well as lseek() to be - * able to handle large disks + * On 32-bit platforms, we need to use the _llseek() system call + * rather than lseek(), to be able to handle large disks. _llseek() + * isn't just a normal syscall which takes a 64-bit argument; it needs + * to return a 64-bit value and so takes an extra pointer. */ #include #include +#include -#if BITSIZE == 32 +#if _BITSIZE == 32 -static inline _syscall5(int, _llseek, int, fd, unsigned long, hi, unsigned long, lo, loff_t *,res, int, whence); +extern int __llseek(int fd, unsigned long hi, unsigned long lo, off_t *res, int whence); -loff_t llseek(int fd, loff_t offset, int whence) +off_t lseek(int fd, off_t offset, int whence) { - loff_t result; + off_t result; int rv; - rv = _llseek(fd, (unsigned long)(offset >> 32), - (unsigned long)offset, &result, whence); + rv = __llseek(fd, (unsigned long)(offset >> 32), (unsigned long)offset, + &result, whence); - return rv ? (loff_t)-1 : result; -} - -#else - -loff_t llseek(int fd, loff_t offset, int whence) -{ - return lseek(fd, offset, whence); + return rv ? (off_t)-1 : result; } #endif