diff options
Diffstat (limited to 'newlib/libc/stdio64')
-rw-r--r-- | newlib/libc/stdio64/ftello64.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/newlib/libc/stdio64/ftello64.c b/newlib/libc/stdio64/ftello64.c index 2fdfb784e..51dcd2796 100644 --- a/newlib/libc/stdio64/ftello64.c +++ b/newlib/libc/stdio64/ftello64.c @@ -108,9 +108,12 @@ _DEFUN (_ftello64_r, (ptr, fp), return -1L; } - /* Find offset of underlying I/O object, then - adjust for buffered bytes. */ - _fflush_r (ptr, fp); /* may adjust seek offset on append stream */ + /* Find offset of underlying I/O object, then adjust for buffered + bytes. Flush a write stream, since the offset may be altered if + the stream is appending. Do not flush a read stream, since we + must not lose the ungetc buffer. */ + if (fp->_flags & __SWR) + _fflush_r (ptr, fp); if (fp->_flags & __SOFF) pos = fp->_offset; else |