Files
semi-libc/src/stdio/__stdio_seek.c
T
Rich Felker 2cdfb7ca26 cleaning up syscalls in preparation for x86_64 port
- hide all the legacy xxxxxx32 name cruft in syscall.h so the actual
source files can be clean and uniform across all archs.

- cleanup llseek/lseek and mmap2/mmap handling for 32/64 bit systems

- alternate implementation for nice if the target lacks nice syscall
2011-02-13 22:45:42 -05:00

22 lines
474 B
C

#include "stdio_impl.h"
static off_t retneg1(FILE *f, off_t off, int whence)
{
return -1;
}
off_t __stdio_seek(FILE *f, off_t off, int whence)
{
off_t ret;
#ifdef __NR__llseek
if (syscall5(__NR__llseek, f->fd, off>>32, off, (long)&ret, whence)<0)
ret = -1;
#else
ret = syscall3(__NR_lseek, f->fd, off, whence);
#endif
/* Detect unseekable files and optimize future failures out */
if (ret < 0 && off == 0 && whence == SEEK_CUR)
f->seek = retneg1;
return ret;
}