X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Fff-string.c;h=913c33535599d46531f86f880530728be2044bfd;hb=e772e1bde20eb3866ecb7c63d2276b3ae4ea95d5;hp=0f4c0b112dcf236689c4187e7d3c7edb9fdcb3d3;hpb=7e57a82e2c3feea0754251a90d8eac8745636af4;p=libucw.git diff --git a/lib/ff-string.c b/lib/ff-string.c index 0f4c0b11..913c3353 100644 --- a/lib/ff-string.c +++ b/lib/ff-string.c @@ -11,9 +11,10 @@ #include "lib/lib.h" #include "lib/fastbuf.h" #include "lib/mempool.h" +#include "lib/bbuf.h" -byte * /* Non-standard */ -bgets(struct fastbuf *f, byte *b, uns l) +char * /* Non-standard */ +bgets(struct fastbuf *f, char *b, uns l) { ASSERT(l); byte *src; @@ -46,7 +47,7 @@ exit: } int -bgets_nodie(struct fastbuf *f, byte *b, uns l) +bgets_nodie(struct fastbuf *f, char *b, uns l) { ASSERT(l); byte *src, *start = b; @@ -75,19 +76,20 @@ bgets_nodie(struct fastbuf *f, byte *b, uns l) while (src_len); exit: *b++ = 0; - return b - start; + return b - (char *)start; } uns -bgets_bb(struct fastbuf *f, bb_t *bb) +bgets_bb(struct fastbuf *f, struct bb_t *bb, uns limit) { + ASSERT(limit); byte *src; uns src_len = bdirect_read_prepare(f, &src); if (!src_len) return 0; bb_grow(bb, 1); byte *buf = bb->ptr; - uns len = 0, buf_len = bb->len; + uns len = 0, buf_len = MIN(bb->len, limit); do { uns cnt = MIN(src_len, buf_len); @@ -111,9 +113,11 @@ bgets_bb(struct fastbuf *f, bb_t *bb) src_len -= cnt; if (cnt == buf_len) { + if (unlikely(len == limit)) + die("%s: Line too long", f->name); bb_do_grow(bb, len + 1); buf = bb->ptr + len; - buf_len = bb->len - len; + buf_len = MIN(bb->len, limit) - len; } else buf_len -= cnt; @@ -124,7 +128,7 @@ exit: return buf - bb->ptr; } -byte * +char * bgets_mp(struct fastbuf *f, struct mempool *mp) { byte *src; @@ -249,8 +253,8 @@ exit: s->cur_len = 0; } -byte * -bgets0(struct fastbuf *f, byte *b, uns l) +char * +bgets0(struct fastbuf *f, char *b, uns l) { ASSERT(l); byte *src;