X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Fff-string.c;h=ed7815bc7028c472022feb057302d09a42577e12;hb=244c4fe7e6cf5ae78cbe6343fe7f9b6dfc29b11a;hp=5b4b8b9c61316ed4a449c7ee961edd43f397494c;hpb=031256ad2e123eec58521f8e3eb9496c197641d2;p=libucw.git diff --git a/ucw/ff-string.c b/ucw/ff-string.c index 5b4b8b9c..ed7815bc 100644 --- a/ucw/ff-string.c +++ b/ucw/ff-string.c @@ -8,10 +8,10 @@ * of the GNU Lesser General Public License. */ -#include "ucw/lib.h" -#include "ucw/fastbuf.h" -#include "ucw/mempool.h" -#include "ucw/bbuf.h" +#include +#include +#include +#include char * /* Non-standard */ bgets(struct fastbuf *f, char *b, uns l) @@ -35,7 +35,7 @@ bgets(struct fastbuf *f, char *b, uns l) *b++ = v; } if (unlikely(cnt == l)) - die("%s: Line too long", f->name); + bthrow(f, "toolong", "%s: Line too long", f->name); l -= cnt; bdirect_read_commit(f, src); src_len = bdirect_read_prepare(f, &src); @@ -114,7 +114,7 @@ bgets_bb(struct fastbuf *f, struct bb_t *bb, uns limit) if (cnt == buf_len) { if (unlikely(len == limit)) - die("%s: Line too long", f->name); + bthrow(f, "toolong", "%s: Line too long", f->name); bb_do_grow(bb, len + 1); buf = bb->ptr + len; buf_len = MIN(bb->len, limit) - len; @@ -190,69 +190,6 @@ exit: ; #undef BLOCK_SIZE } -void -bgets_stk_init(struct bgets_stk_struct *s) -{ - s->src_len = bdirect_read_prepare(s->f, &s->src); - if (!s->src_len) - { - s->cur_buf = NULL; - s->cur_len = 0; - } - else - { - s->old_buf = NULL; - s->cur_len = 256; - } -} - -void -bgets_stk_step(struct bgets_stk_struct *s) -{ - byte *buf = s->cur_buf; - uns buf_len = s->cur_len; - if (s->old_buf) - { - memcpy( s->cur_buf, s->old_buf, s->old_len); - buf += s->old_len; - buf_len -= s->old_len; - } - do - { - uns cnt = MIN(s->src_len, buf_len); - for (uns i = cnt; i--;) - { - byte v = *s->src++; - if (v == '\n') - { - bdirect_read_commit(s->f, s->src); - goto exit; - } - *buf++ = v; - } - if (cnt == s->src_len) - { - bdirect_read_commit(s->f, s->src); - s->src_len = bdirect_read_prepare(s->f, &s->src); - } - else - s->src_len -= cnt; - if (cnt == buf_len) - { - s->old_len = s->cur_len; - s->old_buf = s->cur_buf; - s->cur_len *= 2; - return; - } - else - buf_len -= cnt; - } - while (s->src_len); -exit: - *buf = 0; - s->cur_len = 0; -} - char * bgets0(struct fastbuf *f, char *b, uns l) { @@ -275,7 +212,7 @@ bgets0(struct fastbuf *f, char *b, uns l) b++; } if (unlikely(cnt == l)) - die("%s: Line too long", f->name); + bthrow(f, "toolong", "%s: Line too long", f->name); l -= cnt; bdirect_read_commit(f, src); src_len = bdirect_read_prepare(f, &src);