From 8634c257b85ff504ffa90f6d8b84f7c2b567964d Mon Sep 17 00:00:00 2001 From: Michal Vaner Date: Wed, 23 Jul 2008 20:55:49 +0200 Subject: [PATCH] Libucw: Split ff-string.c. Stk strings now have their own file (ff-stkstring.c). --- ucw/Makefile | 2 +- ucw/ff-stkstring.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++ ucw/ff-string.c | 63 ------------------------------------ 3 files changed, 81 insertions(+), 64 deletions(-) create mode 100644 ucw/ff-stkstring.c diff --git a/ucw/Makefile b/ucw/Makefile index a10c4657..e2574f83 100644 --- a/ucw/Makefile +++ b/ucw/Makefile @@ -14,7 +14,7 @@ LIBUCW_MODS= \ conf-alloc conf-dump conf-input conf-intr conf-journal conf-parse conf-section \ ipaccess \ profile \ - fastbuf ff-binary ff-string ff-printf ff-unicode \ + fastbuf ff-binary ff-string ff-printf ff-unicode ff-stkstring \ fb-file carefulio fb-mem fb-temp tempfile fb-mmap fb-limfd fb-buffer fb-grow fb-pool fb-atomic fb-param fb-socket \ char-cat char-upper char-lower unicode stkstring \ wildmatch regex \ diff --git a/ucw/ff-stkstring.c b/ucw/ff-stkstring.c new file mode 100644 index 00000000..50b2c3e8 --- /dev/null +++ b/ucw/ff-stkstring.c @@ -0,0 +1,80 @@ +/* + * UCW Library -- Fast Buffered I/O: Strings on stack + * + * (c) 2008 Michal Vaner + * + * Code taken from ff-string.c by: + * + * (c) 1997--2006 Martin Mares + * (c) 2006 Pavel Charvat + * + * This software may be freely distributed and used according to the terms + * of the GNU Lesser General Public License. + */ + +#include "ucw/lib.h" +#include "ucw/fastbuf.h" + +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; +} + diff --git a/ucw/ff-string.c b/ucw/ff-string.c index 5b4b8b9c..366092bf 100644 --- a/ucw/ff-string.c +++ b/ucw/ff-string.c @@ -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) { -- 2.39.2