7 #define STRBUFFER_MIN_SIZE 16
8 #define STRBUFFER_FACTOR 2
10 void strbuffer_init(strbuffer_t *strbuff)
12 strbuff->value = NULL;
17 void strbuffer_close(strbuffer_t *strbuff)
20 strbuffer_init(strbuff);
23 char *strbuffer_value(strbuffer_t *strbuff)
25 return strdup(strbuff->value);
28 char *strbuffer_steal_value(strbuffer_t *strbuff)
30 char *result = strbuff->value;
31 strbuffer_init(strbuff);
35 int strbuffer_append(strbuffer_t *strbuff, const char *string)
37 return strbuffer_append_bytes(strbuff, string, strlen(string));
40 int strbuffer_append_bytes(strbuffer_t *strbuff, const char *data, int size)
42 if(strbuff->length + size > strbuff->size)
44 if(strbuff->length == 0)
45 strbuff->size = STRBUFFER_MIN_SIZE;
47 strbuff->size = max(strbuff->size * STRBUFFER_FACTOR,
48 strbuff->length + size + 1);
50 strbuff->value = realloc(strbuff->value, strbuff->size);
54 memset(strbuff->value + strbuff->length + size, 0,
55 strbuff->size - strbuff->length - size);
58 memcpy(strbuff->value + strbuff->length, data, size);
59 strbuff->length += size;