diff options
Diffstat (limited to 'src/stdio')
-rw-r--r-- | src/stdio/__fdopen.c | 1 | ||||
-rw-r--r-- | src/stdio/ftell.c | 4 |
2 files changed, 4 insertions, 1 deletions
diff --git a/src/stdio/__fdopen.c b/src/stdio/__fdopen.c index 59690f6d..a2ca62b1 100644 --- a/src/stdio/__fdopen.c +++ b/src/stdio/__fdopen.c @@ -33,6 +33,7 @@ FILE *__fdopen(int fd, const char *mode) if (*mode == 'a') { int flags = __syscall(SYS_fcntl, fd, F_GETFL); __syscall(SYS_fcntl, fd, F_SETFL, flags | O_APPEND); + f->flags |= F_APP; } f->fd = fd; diff --git a/src/stdio/ftell.c b/src/stdio/ftell.c index 82371e37..bb62897a 100644 --- a/src/stdio/ftell.c +++ b/src/stdio/ftell.c @@ -4,7 +4,9 @@ off_t __ftello_unlocked(FILE *f) { - off_t pos = f->seek(f, 0, SEEK_CUR); + off_t pos = f->seek(f, 0, + (f->flags & F_APP) && f->wpos > f->wbase + ? SEEK_END : SEEK_CUR); if (pos < 0) return pos; /* Adjust for data in buffer. */ |