void printbuf_terminate_string(struct printbuf *const p) { if (p->size <= p->bpos + 1) { if (printbuf_extend(p, p->bpos + 1) < 0) --p->bpos; /* overwrite last byte, best we can do */ } p->buf[p->bpos]= '\0'; }
/* add a single character to printbuf */ void printbuf_memappend_char(struct printbuf *p, const char c) { if (p->size <= p->bpos + 1) { if (printbuf_extend(p, p->bpos + 1) < 0) /* ignore new data, best we can do */ return; } p->buf[p->bpos++]= c; }
/* same as printbuf_memappend(), but contains some performance enhancements */ void printbuf_memappend_no_nul(struct printbuf *p, const char *buf, const int size) { if (p->size <= p->bpos + size) { if (printbuf_extend(p, p->bpos + size) < 0) /* ignore new data, best we can do */ return; } memcpy(p->buf + p->bpos, buf, size); p->bpos += size; }
size_t printbuf_memappend(struct printbuf *p, const char *buf, size_t size) { if (p->size <= p->bpos + size + 1) { if (printbuf_extend(p, p->bpos + size + 1) < 0) return -1; } memcpy(p->buf + p->bpos, buf, size); p->bpos += size; p->buf[p->bpos]= '\0'; return size; }
int printbuf_memset(struct printbuf *pb, int offset, int charvalue, int len) { int size_needed; if (offset == -1) offset = pb->bpos; size_needed = offset + len; if (pb->size < size_needed) { if (printbuf_extend(pb, size_needed) < 0) return -1; } memset(pb->buf + offset, charvalue, len); if (pb->bpos < size_needed) pb->bpos = size_needed; return 0; }