projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
major improvements to cancellation handling
[musl]
/
src
/
stdio
/
__stdio_seek.c
diff --git
a/src/stdio/__stdio_seek.c
b/src/stdio/__stdio_seek.c
index
fdb9fe7
..
35ae788
100644
(file)
--- 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)
{
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)
{
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 */
/* 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;
}
return ret;
}