293 static void vstring_extend(
VBUF *bp, ssize_t incr)
295 size_t used = bp->
ptr - bp->
data;
314 msg_fatal(
"vstring_extend: length overflow");
315 new_len = bp->
len + incr;
317 bp->
data[new_len] = 0;
325 static int vstring_buf_get_ready(
VBUF *unused_buf)
327 msg_panic(
"vstring_buf_get: write-only buffer");
332 static int vstring_buf_put_ready(
VBUF *bp)
334 vstring_extend(bp, 1);
340 static int vstring_buf_space(
VBUF *bp, ssize_t len)
345 msg_panic(
"vstring_buf_space: bad length %ld", (
long) len);
346 if ((need = len - bp->
cnt) > 0)
347 vstring_extend(bp, need);
362 msg_panic(
"vstring_alloc: bad length %ld", (
long) len);
399 msg_panic(
"vstring_ctl: unknown code: %d", code);
401 vp->
maxlen = va_arg(ap, ssize_t);
449 while (len-- > 0 && *src) {
473 while (len-- > 0 && *src) {
512 return ((
char *) cp);
526 msg_panic(
"vstring_insert: bad start %ld", (
long) start);
528 msg_panic(
"vstring_insert: bad length %ld", (
long) len);
553 msg_panic(
"vstring_prepend: bad length %ld", (
long) len);
590 vp->
vbuf.
data = (
unsigned char *) str;
606 va_start(ap, format);
628 va_start(ap, format);
652 va_start(ap, format);
675 int main(
int argc,
char **argv)
683 for (n = 1; n <= 5; n++) {
685 printf(
"payload/buffer size %d/%ld, strlen() %ld\n",
686 n, (
long) (vp)->vbuf.len, (
long) strlen(
vstring_str(vp)));
694 printf(
"argv concatenated: %s\n",
vstring_str(vp));
VSTRING * vstring_sprintf_prepend(VSTRING *vp, const char *format,...)
VBUF_GET_READY_FN get_ready
NORETURN msg_panic(const char *fmt,...)
void * myrealloc(void *ptr, ssize_t len)
int main(int argc, char **argv)
VSTRING * vstring_strncat(VSTRING *vp, const char *src, ssize_t len)
VSTRING * vstring_truncate(VSTRING *vp, ssize_t len)
void vstring_ctl(VSTRING *vp,...)
VSTRING * vstring_strcpy(VSTRING *vp, const char *src)
#define VSTRING_TERMINATE(vp)
VSTRING * vstring_prepend(VSTRING *vp, const char *buf, ssize_t len)
VSTRING * vstring_insert(VSTRING *vp, ssize_t start, const char *buf, ssize_t len)
#define VSTRING_ADDCH(vp, ch)
VSTRING * vstring_sprintf_append(VSTRING *vp, const char *format,...)
VSTRING * vstring_vsprintf(VSTRING *vp, const char *format, va_list ap)
#define VSTRING_RESET(vp)
#define VSTRING_FLAG_EXACT
VSTRING * vstring_alloc(ssize_t len)
VSTRING * vstring_sprintf(VSTRING *vp, const char *format,...)
#define VSTRING_CTL_MAXLEN
NORETURN msg_fatal(const char *fmt,...)
VSTRING * vstring_memcat(VSTRING *vp, const char *src, ssize_t len)
VBUF_PUT_READY_FN put_ready
VBUF * vbuf_print(VBUF *bp, const char *format, va_list ap)
#define VSTRING_SPACE(vp, len)
VSTRING * vstring_vsprintf_append(VSTRING *vp, const char *format, va_list ap)
VSTRING * vstring_free(VSTRING *vp)
#define VSTRING_AT_OFFSET(vp, offset)
#define VSTRING_CTL_EXACT
VSTRING * vstring_memcpy(VSTRING *vp, const char *src, ssize_t len)
VSTRING * vstring_import(char *str)
char * vstring_memchr(VSTRING *vp, int ch)
VSTRING * vstring_strncpy(VSTRING *vp, const char *src, ssize_t len)
VSTRING * vstring_strcat(VSTRING *vp, const char *src)
char * vstring_export(VSTRING *vp)
void * mymalloc(ssize_t len)