diff options
-rw-r--r-- | lib/libc/stdio/fseek.c | 10 | ||||
-rw-r--r-- | lib/libc/stdio/stdio.c | 7 |
2 files changed, 12 insertions, 5 deletions
diff --git a/lib/libc/stdio/fseek.c b/lib/libc/stdio/fseek.c index 2278f31..9dc8bd2 100644 --- a/lib/libc/stdio/fseek.c +++ b/lib/libc/stdio/fseek.c @@ -297,11 +297,6 @@ abspos: dumb: if (__sflush(fp) || _sseek(fp, (fpos_t)offset, whence) == POS_ERR) return (-1); - if (ltest && fp->_offset > LONG_MAX) { - fp->_flags |= __SERR; - errno = EOVERFLOW; - return (-1); - } /* success: clear EOF indicator and discard ungetc() data */ if (HASUB(fp)) FREEUB(fp); @@ -309,5 +304,10 @@ dumb: fp->_r = 0; /* fp->_w = 0; */ /* unnecessary (I think...) */ fp->_flags &= ~__SEOF; + if (ltest && fp->_offset > LONG_MAX) { + fp->_flags |= __SERR; + errno = EOVERFLOW; + return (-1); + } return (0); } diff --git a/lib/libc/stdio/stdio.c b/lib/libc/stdio/stdio.c index 4bee608..7f66fa8 100644 --- a/lib/libc/stdio/stdio.c +++ b/lib/libc/stdio/stdio.c @@ -171,6 +171,13 @@ _sseek(fp, offset, whence) */ if (ret < 0) { if (errret == 0) { + if (offset != 0 || whence != SEEK_CUR) { + if (HASUB(fp)) + FREEUB(fp); + fp->_p = fp->_bf._base; + fp->_r = 0; + fp->_flags &= ~__SEOF; + } fp->_flags |= __SERR; errno = EINVAL; } else if (errret == ESPIPE) |