/*----- Header files ------------------------------------------------------*/
#include <stdio.h>
-#include <stdlib.h>
#include <string.h>
#include "alloc.h"
#include "dstr.h"
+#include "growbuf.h"
/*----- Tunable constants -------------------------------------------------*/
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(size_t, 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@ --- *
*