X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fstdio%2Fftell.c;h=1e1a08d8281dc6f7a79b4010adf5302f08716bc3;hb=ea3b40a321e751e016948087ef23ae7b9e8e0150;hp=aa1f5381e9774adbc814449708465652ae990c20;hpb=0b44a0315b47dd8eced9f3b7f31580cf14bbfc01;p=musl diff --git a/src/stdio/ftell.c b/src/stdio/ftell.c index aa1f5381..1e1a08d8 100644 --- a/src/stdio/ftell.c +++ b/src/stdio/ftell.c @@ -1,14 +1,20 @@ #include "stdio_impl.h" +#include +#include off_t __ftello_unlocked(FILE *f) { - off_t pos = f->seek(f, 0, SEEK_CUR); - if (pos < 0) { - FUNLOCK(f); - return pos; - } + 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. */ - 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) @@ -31,5 +37,3 @@ long ftell(FILE *f) } weak_alias(__ftello, ftello); - -LFS64(ftello);