X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Ffastbuf.c;h=f83b40210132db4a87258d9d77f9078f0465b6bd;hb=d1a5b69d490ce61a0f41db08263580487720bf2f;hp=d2e08f8648def7918c8fc04404f530aa18fabd0b;hpb=d6279d601cfb3f86e0bbe3fb78b4daa9af824bf3;p=libucw.git diff --git a/lib/fastbuf.c b/lib/fastbuf.c index d2e08f86..f83b4021 100644 --- a/lib/fastbuf.c +++ b/lib/fastbuf.c @@ -1,7 +1,7 @@ /* - * Sherlock Library -- Fast Buffered I/O + * UCW Library -- Fast Buffered I/O * - * (c) 1997--2004 Martin Mares + * (c) 1997--2005 Martin Mares * * This software may be freely distributed and used according to the terms * of the GNU Lesser General Public License. @@ -343,15 +343,30 @@ brewind(struct fastbuf *f) bsetpos(f, 0); } -void -bskip(struct fastbuf *f, uns len) +int +bskip_slow(struct fastbuf *f, uns len) { while (len) { byte *buf; uns l = bdirect_read_prepare(f, &buf); + if (!l) + return 0; l = MIN(l, len); bdirect_read_commit(f, buf+l); len -= l; } + return 1; +} + +sh_off_t +bfilesize(struct fastbuf *f) +{ + if (!f) + return 0; + sh_off_t pos = btell(f); + bseek(f, 0, SEEK_END); + sh_off_t len = btell(f); + bsetpos(f, pos); + return len; }