X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Ffb-mem.c;h=bacdf03ff10260d7eb83ff2527297d18bb89f60d;hb=521609b4721376161eabe89c9431aa221e87e263;hp=cddb169a8c690f2c2f29de1cb137b4c12f2514d7;hpb=e8060fa4647c5c4ccf07efb91a35f65c543dfc4f;p=libucw.git diff --git a/ucw/fb-mem.c b/ucw/fb-mem.c index cddb169a..bacdf03f 100644 --- a/ucw/fb-mem.c +++ b/ucw/fb-mem.c @@ -112,10 +112,10 @@ fbmem_seek(struct fastbuf *f, ucw_off_t pos, int whence) { if (pos <= b->pos + (ucw_off_t)b->size) /* <=, because we need to be able to seek just after file end */ { - f->buffer = b->data; + f->buffer = f->bstop = b->data; f->bptr = b->data + (pos - b->pos); - f->bufend = f->bstop = b->data + b->size; - f->pos = b->pos + b->size; + f->bufend = b->data + b->size; + f->pos = b->pos; FB_MEM(f)->block = b; return 1; } @@ -123,12 +123,12 @@ fbmem_seek(struct fastbuf *f, ucw_off_t pos, int whence) if (!m->first && !pos) { /* Seeking to offset 0 in an empty file needs an exception */ - f->buffer = f->bptr = f->bufend = NULL; + f->buffer = f->bptr = f->bstop = f->bufend = NULL; f->pos = 0; FB_MEM(f)->block = NULL; return 1; } - die("fbmem_seek to invalid offset"); + bthrow(f, "fb.seek", "fbmem_seek to invalid offset"); } static void @@ -162,7 +162,7 @@ fbmem_create(unsigned blocksize) f->name = ""; f->spout = fbmem_spout; f->close = fbmem_close; - return f; + return fb_tie(f); } struct fastbuf * @@ -180,7 +180,7 @@ fbmem_clone_read(struct fastbuf *b) f->seek = fbmem_seek; f->close = fbmem_close; f->can_overwrite_buffer = 1; - return f; + return fb_tie(f); } #ifdef TEST @@ -213,6 +213,7 @@ int main(void) printf("", (int)btell(r)); while ((t = bgetc(r)) >= 0) putchar(t); + putchar('\n'); fflush(stdout); bclose(r); return 0;