#include "stdio_impl.h"
+#include <limits.h>
+#include <errno.h>
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. */