added string buffer support

This commit is contained in:
git@daemon.de
2014-02-13 17:04:59 +01:00
parent 0a8206b3b0
commit 1c46de629b
2 changed files with 39 additions and 0 deletions

View File

@@ -34,12 +34,19 @@ void buffer_init(Buffer *b, size_t blocksize, char *name) {
b->name = ucmalloc(strlen(name)+1);
b->size = blocksize;
b->allocated = 1;
b->isstring = 0;
b->offset = 0;
b->end = 0;
b->blocksize = blocksize;
memcpy(b->name, name, strlen(name)+1);
}
Buffer *buffer_new_str(char *name) {
Buffer *b = buffer_new(256, name);
b->isstring = 1;
return b;
}
void buffer_free(Buffer *b) {
if(b != NULL) {
if(b->allocated == 1) {
@@ -68,6 +75,26 @@ void buffer_add(Buffer *b, const void *data, size_t len) {
b->end += len;
}
void buffer_add_str(Buffer *b, const char * fmt, ...) {
va_list ap;
char *dst;
va_start(ap, fmt);
vasprintf(&dst, fmt, ap);
va_end(ap);
if(b->end > 0)
b->end--;
buffer_add(b, dst, strlen(dst)+1);
free(dst);
}
void buffer_add_hex(Buffer *b, void *data, size_t len) {
size_t i;
unsigned char *d = data;
for(i=0; i<len; ++i) {
buffer_add_str(b, "%02x", d[i]);
}
}
void buffer_add_buf(Buffer *dst, Buffer *src) {
buffer_add(dst, buffer_get(src), buffer_size(src));
}