X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fstdio%2F__stdio_seek.c;h=35ae788cd1aface51136b4d53ffa6e493e98a37d;hb=bf619d82c82052741323aa63c107fbd346c8aaba;hp=fdb9fe7f2ff086ee364065fa68506c0b6eed1563;hpb=0b44a0315b47dd8eced9f3b7f31580cf14bbfc01;p=musl diff --git a/src/stdio/__stdio_seek.c b/src/stdio/__stdio_seek.c index fdb9fe7f..35ae788c 100644 --- a/src/stdio/__stdio_seek.c +++ b/src/stdio/__stdio_seek.c @@ -2,14 +2,20 @@ static off_t retneg1(FILE *f, off_t off, int whence) { + errno = ESPIPE; return -1; } off_t __stdio_seek(FILE *f, off_t off, int whence) { - off_t ret = __syscall_lseek(f->fd, off, whence); + off_t ret; +#ifdef SYS__llseek + if (syscall(SYS__llseek, f->fd, off>>32, off, &ret, whence)<0) + ret = -1; +#else + ret = syscall(SYS_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; + if (ret < 0 && errno == ESPIPE) f->seek = retneg1; return ret; }