- struct fastbuf *b = xmalloc_zero(sizeof(struct fastbuf) + buflen + namelen);
-
- b->buflen = buflen;
- b->buffer = (char *)(b+1);
- b->bptr = b->bstop = b->buffer;
- b->bufend = b->buffer + buflen;
- b->name = b->bufend;
- strcpy(b->name, name);
- b->fd = fd;
- b->refill = bfd_refill;
- b->spout = bfd_spout;
- b->seek = bfd_seek;
- b->close = bfd_close;
- return b;
+ struct fb_file *F = xmalloc(sizeof(struct fb_file) + buflen + namelen);
+ struct fastbuf *f = &F->fb;
+
+ bzero(F, sizeof(*F));
+ f->buffer = (byte *)(F+1);
+ f->bptr = f->bstop = f->buffer;
+ f->bufend = f->buffer + buflen;
+ f->name = f->bufend;
+ memcpy(f->name, name, namelen);
+ F->fd = fd;
+ f->refill = bfd_refill;
+ f->spout = bfd_spout;
+ f->seek = bfd_seek;
+ f->close = bfd_close;
+ f->config = bfd_config;
+ f->can_overwrite_buffer = 2;
+ return f;