X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Ffb-limfd.c;h=351f0032daa15f710b0d0a45a02ab3ce4a15dbab;hb=8107422b6cc0fda08e55218a3a79ff1580779a95;hp=7e07e328f94a0d6de2bac582d9641fb412d86511;hpb=61da975c346c50ccf9bb9cb7271ef538dc15ab32;p=libucw.git diff --git a/lib/fb-limfd.c b/lib/fb-limfd.c index 7e07e328..351f0032 100644 --- a/lib/fb-limfd.c +++ b/lib/fb-limfd.c @@ -1,8 +1,7 @@ /* * Sherlock Library -- Fast Buffered Input on Limited File Descriptors * - * (c) 2003 Martin Mares - * (c) 2004 Robert Spalek + * (c) 2003--2004 Martin Mares * * This software may be freely distributed and used according to the terms * of the GNU Lesser General Public License. @@ -18,18 +17,18 @@ struct fb_limfd { struct fastbuf fb; int fd; /* File descriptor */ int limit; - int can_overwrite; }; #define FB_LIMFD(f) ((struct fb_limfd *)(f)->is_fastbuf) +#define FB_BUFFER(f) (byte *)(FB_LIMFD(f) + 1) static int bfl_refill(struct fastbuf *f) { + f->bptr = f->buffer = FB_BUFFER(f); int max = MIN(FB_LIMFD(f)->limit - f->pos, f->bufend - f->buffer); int l = read(FB_LIMFD(f)->fd, f->buffer, max); if (l < 0) die("Error reading %s: %m", f->name); - f->bptr = f->buffer; f->bstop = f->buffer + l; f->pos += l; return l; @@ -41,21 +40,6 @@ bfl_close(struct fastbuf *f) xfree(f); } -static int -bfl_config(struct fastbuf *f, uns item, int value) -{ - switch (item) - { - case BCONFIG_CAN_OVERWRITE: ; - int old_value = FB_LIMFD(f)->can_overwrite; - if (value >= 0 && value <= 2) - FB_LIMFD(f)->can_overwrite = value; - return old_value; - default: - return -1; - } -} - struct fastbuf * bopen_limited_fd(int fd, uns buflen, uns limit) { @@ -71,8 +55,7 @@ bopen_limited_fd(int fd, uns buflen, uns limit) F->limit = limit; f->refill = bfl_refill; f->close = bfl_close; - f->config = bfl_config; - F->can_overwrite = 2; + f->can_overwrite_buffer = 2; return f; }