X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/c6e0eaf00cd09a4e5237e70d8351049ec91d7653..4f6d400bf0d6324faa343ea121f465017032d72b:/dstr.c diff --git a/dstr.c b/dstr.c index d15fba8..273c53a 100644 --- a/dstr.c +++ b/dstr.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: dstr.c,v 1.12 1999/12/10 23:42:04 mdw Exp $ + * $Id: dstr.c,v 1.15 2000/07/16 12:29:16 mdw Exp $ * * Handle dynamically growing strings * @@ -30,6 +30,15 @@ /*----- Revision history --------------------------------------------------* * * $Log: dstr.c,v $ + * Revision 1.15 2000/07/16 12:29:16 mdw + * Change to arena `realloc' interface, to fix a design bug. + * + * Revision 1.14 2000/06/17 10:37:39 mdw + * Add support for arena management. + * + * Revision 1.13 1999/12/22 15:39:28 mdw + * Fix overflow in dstr_putline. + * * Revision 1.12 1999/12/10 23:42:04 mdw * Change header file guard names. * @@ -153,9 +162,9 @@ void dstr_ensure(dstr *d, size_t sz) do nsz <<= 1; while (nsz < rq); if (d->buf) - d->buf = xrealloc(d->buf, nsz); + d->buf = x_realloc(d->a, d->buf, nsz, d->sz); else - d->buf = xmalloc(nsz); + d->buf = x_alloc(d->a, nsz); d->sz = nsz; } @@ -234,7 +243,7 @@ void dstr_putm(dstr *d, const void *p, size_t sz) { DPUTM(d, p, sz); } void dstr_tidy(dstr *d) { - d->buf = xrealloc(d->buf, d->len + 1); + d->buf = x_realloc(d->a, d->buf, d->len + 1, d->sz); d->buf[d->len] = 0; d->sz = d->len + 1; } @@ -273,6 +282,7 @@ int dstr_putline(dstr *d, FILE *fp) /* --- Make sure there's some buffer space --- */ if (!left) { + d->len = off; dstr_ensure(d, 1); left = d->sz - off; }