void gbuf_add_bytes(struct gbuf *buf, const void *data, size_t len) { gbuf_grow(buf, len); memcpy(buf->buffer + buf->len, data, len); buf->len += len; buf->buffer[buf->len] = 0; }
void gbuf_set(struct gbuf *buf, int c, size_t count) { gbuf_grow(buf, count); memset(buf->buffer + buf->len, c, count); buf->len += count; buf->buffer[buf->len] = 0; }
void gbuf_make_space(struct gbuf *buf, size_t pos, size_t len) { BUG_ON(pos > buf->len); gbuf_grow(buf, len); memmove(buf->buffer + pos + len, buf->buffer + pos, buf->len - pos); buf->len += len; buf->buffer[buf->len] = 0; }
void gbuf_add_buf(struct gbuf *buf, const char *ptr, size_t len) { if (!len) return; gbuf_grow(buf, len); memcpy(buf->buffer + buf->len, ptr, len); buf->len += len; buf->buffer[buf->len] = 0; }
void gbuf_add_str(struct gbuf *buf, const char *str) { int len = strlen(str); if (!len) return; gbuf_grow(buf, len); memcpy(buf->buffer + buf->len, str, len + 1); buf->len += len; }
void gbuf_addf(struct gbuf *buf, const char *fmt, ...) { va_list ap; int slen; va_start(ap, fmt); slen = vsnprintf(buf->buffer + buf->len, buf->alloc - buf->len, fmt, ap); va_end(ap); if (slen > gbuf_avail(buf)) { gbuf_grow(buf, slen + 1); va_start(ap, fmt); slen = vsnprintf(buf->buffer + buf->len, buf->alloc - buf->len, fmt, ap); va_end(ap); } buf->len += slen; }
void gbuf_add_ch(struct gbuf *buf, char ch) { gbuf_grow(buf, 1); buf->buffer[buf->len++] = ch; buf->buffer[buf->len] = 0; }