+static int
+fb_cc_refill(struct fastbuf *f)
+{
+ struct conv_context *ct = &FB_CC(f)->ctxt;
+ int flags;
+
+ f->bptr = f->bstop = f->buffer;
+ do
+ {
+ byte *src;
+ uns len = bdirect_read_prepare(FB_CC(f)->orig, &src);
+ if (!len)
+ break;
+ ct->source = src;
+ ct->source_end = ct->source + len;
+ ct->dest = ct->dest_start = f->bstop;
+ ct->dest_end = f->bufend;
+ flags = conv_run(ct);
+ bdirect_read_commit(FB_CC(f)->orig, (byte*)ct->source);
+ f->bstop = ct->dest;
+ }
+ while (!(flags & CONV_DEST_END));
+ return (f->bstop > f->bptr);
+}
+