X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/f54be224946b5dede1c5279d47b9d4cb0766a9f9..925ff94a516478164fdd01d53332637455e0074d:/progs/cc-progress.c diff --git a/progs/cc-progress.c b/progs/cc-progress.c index 918eb2c4..055556c3 100644 --- a/progs/cc-progress.c +++ b/progs/cc-progress.c @@ -31,6 +31,8 @@ #include "config.h" +#include + #include "cc.h" #ifndef PATHSEP @@ -129,16 +131,15 @@ static void prhuman_data(FILE *fp, off_t n) int fprogress_init(fprogress *f, const char *name, FILE *fp) { const char *p; + struct stat st; off_t o, sz = -1; size_t n; /* --- Set up the offset --- */ - if ((o = ftello(fp)) >= 0 && - fseeko(fp, 0, SEEK_END) >= 0 && - (sz = ftello(fp), - fseeko(fp, o, SEEK_SET) < 0)) - return (-1); + o = lseek(fileno(fp), 0, SEEK_CUR); + if (fstat(fileno(fp), &st)) return (-1); + sz = (S_ISREG(st.st_mode)) ? st.st_size : -1; if (o != -1 && sz != -1) sz -= o; f->o = f->olast = 0; f->sz = sz;