X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/18c831dcd0ae4d660c70ccac69d27ed2a97851be..0335afec2c33fefcd6d3cb2c39d014ab2519b2c2:/struct/dstr.c diff --git a/struct/dstr.c b/struct/dstr.c index 3072c57..eee34cc 100644 --- a/struct/dstr.c +++ b/struct/dstr.c @@ -33,6 +33,7 @@ #include "alloc.h" #include "dstr.h" +#include "growbuf.h" /*----- Tunable constants -------------------------------------------------*/ @@ -91,41 +92,19 @@ void dstr_reset(dstr *d) { DRESET(d); } */ void dstr_ensure(dstr *d, size_t sz) -{ - size_t rq = d->len + sz; - size_t nsz; - - /* --- If we have enough space, just leave it --- */ - - if (rq <= d->sz) - return; - - /* --- Grow the buffer --- */ - - nsz = d->sz; - - if (nsz == 0) - nsz = (DSTR_INITSZ >> 1); - do nsz <<= 1; while (nsz < rq); - - if (d->buf) - d->buf = x_realloc(d->a, d->buf, nsz, d->sz); - else - d->buf = x_alloc(d->a, nsz); - d->sz = nsz; -} + { GROWBUF_EXTEND(d->a, d->buf, d->sz, d->len + sz, DSTR_INITSZ, 1); } /* --- @dstr_putc@ --- * * * Arguments: @dstr *d@ = pointer to a dynamic string block - * @char ch@ = character to append + * @int ch@ = character to append * * Returns: --- * * Use: Appends a character to a string. */ -void dstr_putc(dstr *d, char ch) { DPUTC(d, ch); } +void dstr_putc(dstr *d, int ch) { DPUTC(d, ch); } /* --- @dstr_putz@ --- * *