X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Ffb-grow.c;h=25f521ec5dc424de32541843848031c41b6f2164;hb=a6368763d08042207963c941b1c52b5fafcb0cb3;hp=27b5bf038b0a8329b8e9ca3e939b838a4762d7c4;hpb=f20ecabf44f24743a1383f2ae2148adb660aa8f5;p=libucw.git diff --git a/ucw/fb-grow.c b/ucw/fb-grow.c index 27b5bf03..25f521ec 100644 --- a/ucw/fb-grow.c +++ b/ucw/fb-grow.c @@ -7,9 +7,9 @@ * of the GNU Lesser General Public License. */ -#include "ucw/lib.h" -#include "ucw/fastbuf.h" -#include "ucw/mempool.h" +#include +#include +#include #include #include @@ -19,7 +19,7 @@ struct fb_gbuf { struct mempool *mp; byte *end; }; -#define FB_GBUF(f) ((struct fb_gbuf *)(f)->is_fastbuf) +#define FB_GBUF(f) ((struct fb_gbuf *)(f)) static int fbgrow_refill(struct fastbuf *b) { @@ -32,7 +32,7 @@ static void fbgrow_spout(struct fastbuf *b) { if (b->bptr == b->bufend) { - uns len = b->bufend - b->buffer; + uint len = b->bufend - b->buffer; if (FB_GBUF(b)->mp) { byte *old = b->buffer; @@ -56,7 +56,7 @@ static int fbgrow_seek(struct fastbuf *b, ucw_off_t pos, int whence) if (whence == SEEK_END) pos += len; if (pos < 0 || pos > len) - bthrow(b, "fb.seek", "Seek out of range"); + bthrow(b, "seek", "Seek out of range"); b->bptr = b->buffer + pos; b->bstop = b->buffer; b->pos = 0; @@ -69,7 +69,7 @@ static void fbgrow_close(struct fastbuf *b) xfree(b); } -struct fastbuf *fbgrow_create_mp(struct mempool *mp, unsigned basic_size) +struct fastbuf *fbgrow_create_mp(struct mempool *mp, uint basic_size) { ASSERT(basic_size); struct fastbuf *b; @@ -92,11 +92,10 @@ struct fastbuf *fbgrow_create_mp(struct mempool *mp, unsigned basic_size) b->spout = fbgrow_spout; b->seek = fbgrow_seek; b->can_overwrite_buffer = 1; - fb_tie(b); return b; } -struct fastbuf *fbgrow_create(unsigned basic_size) +struct fastbuf *fbgrow_create(uint basic_size) { return fbgrow_create_mp(NULL, basic_size); } @@ -112,15 +111,24 @@ void fbgrow_rewind(struct fastbuf *b) brewind(b); } +uint fbgrow_get_buf(struct fastbuf *b, byte **buf) +{ + byte *end = FB_GBUF(b)->end; + end = MAX(end, b->bptr); + if (buf) + *buf = b->buffer; + return end - b->buffer; +} + #ifdef TEST int main(void) { struct fastbuf *f; - uns t; + uint t; f = fbgrow_create(3); - for (uns i=0; i<5; i++) + for (uint i=0; i<5; i++) { fbgrow_reset(f); bwrite(f, "12345", 5);