diff options
Diffstat (limited to 'src/stdio/ftell.c')
-rw-r--r-- | src/stdio/ftell.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/stdio/ftell.c b/src/stdio/ftell.c index 5ca41654..1a2afbbc 100644 --- a/src/stdio/ftell.c +++ b/src/stdio/ftell.c @@ -5,12 +5,16 @@ off_t __ftello_unlocked(FILE *f) { off_t pos = f->seek(f, 0, - (f->flags & F_APP) && f->wpos > f->wbase + (f->flags & F_APP) && f->wpos != f->wbase ? SEEK_END : SEEK_CUR); if (pos < 0) return pos; /* Adjust for data in buffer. */ - return pos - (f->rend - f->rpos) + (f->wpos - f->wbase); + if (f->rend) + pos += f->rpos - f->rend; + else if (f->wbase) + pos += f->wpos - f->wbase; + return pos; } off_t __ftello(FILE *f) |