/*
* Sherlock Library -- Large File Support
*
- * (c) 1999--2000 Martin Mares, <mj@atrey.karlin.mff.cuni.cz>
+ * (c) 1999--2001 Martin Mares <mj@ucw.cz>
*/
#ifndef _SHERLOCK_LFS_H
#define _SHERLOCK_LFS_H
+#include <fcntl.h>
+#include <unistd.h>
+
#ifdef SHERLOCK_CONFIG_LFS
#ifdef SHERLOCK_CONFIG_LFS_LIBC
#define sh_seek lseek64
#define sh_pread pread64
#define sh_pwrite pwrite64
+#define sh_ftruncate ftruncate64
#define SHERLOCK_HAVE_PREAD
#else
/*
- * Talk directly with the kernel. The LFS implementations of LFS in Linux 2.2
+ * Talk directly with the kernel. The implementations of LFS in Linux 2.2
* and 2.4 differ, but fortunately for us only in things like stat64 which
* we don't need to use.
*/
#endif
#endif
-extern inline int
+static inline int
sh_open(char *name, int flags, int mode)
{
return open(name, flags | O_LARGEFILE, mode);
_syscall5(int, _llseek, int, fd, int, hi, int, lo, loff_t *, result, int, whence);
-extern inline loff_t sh_seek(int fd, sh_off_t pos, int whence)
+static inline loff_t sh_seek(int fd, sh_off_t pos, int whence)
{
loff_t result;
int err;
#define sh_open open
#define sh_seek(f,o,w) lseek(f,o,w)
+#define sh_ftruncate(f,o) ftruncate(f,o)
#endif /* !SHERLOCK_CONFIG_LFS */
#elif defined(i386)
/* old libc on i386 -> call syscalls directly the old way */
#include <asm/unistd.h>
+#include <errno.h>
static _syscall4(int, pread, unsigned int, fd, void *, buf, size_t, size, loff_t, where);
static _syscall4(int, pwrite, unsigned int, fd, void *, buf, size_t, size, loff_t, where);
#define sh_pread pread
#endif /* !SHERLOCK_HAVE_PREAD */
-#ifndef SHERLOCK_HAVE_PREAD
-#error pread/pwrite not available, need to work around
-#endif
-
#endif /* !_SHERLOCK_LFS_H */