diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/internal/stdio_impl.h | 1 | ||||
| -rw-r--r-- | src/stdio/__fdopen.c | 1 | ||||
| -rw-r--r-- | src/stdio/ftell.c | 4 | 
3 files changed, 5 insertions, 1 deletions
| diff --git a/src/internal/stdio_impl.h b/src/internal/stdio_impl.h index 2083b2fe..79be9fdb 100644 --- a/src/internal/stdio_impl.h +++ b/src/internal/stdio_impl.h @@ -17,6 +17,7 @@  #define F_EOF 16  #define F_ERR 32  #define F_SVB 64 +#define F_APP 128  struct _IO_FILE {  	unsigned flags; 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. */ | 
