7 #define STRBUFFER_MIN_SIZE 16
8 #define STRBUFFER_FACTOR 2
10 int strbuffer_init(strbuffer_t *strbuff)
12 strbuff->size = STRBUFFER_MIN_SIZE;
15 strbuff->value = malloc(strbuff->size);
19 memset(strbuff->value, 0, strbuff->size);
23 void strbuffer_close(strbuffer_t *strbuff)
28 strbuff->value = NULL;
31 const char *strbuffer_value(strbuffer_t *strbuff)
33 return strbuff->value;
36 char *strbuffer_steal_value(strbuffer_t *strbuff)
38 char *result = strbuff->value;
39 strbuffer_init(strbuff);
43 int strbuffer_append(strbuffer_t *strbuff, const char *string)
45 return strbuffer_append_bytes(strbuff, string, strlen(string));
48 int strbuffer_append_bytes(strbuffer_t *strbuff, const char *data, int size)
50 if(strbuff->length + size >= strbuff->size)
52 strbuff->size = max(strbuff->size * STRBUFFER_FACTOR,
53 strbuff->length + size + 1);
55 strbuff->value = realloc(strbuff->value, strbuff->size);
59 memset(strbuff->value + strbuff->length + size, 0,
60 strbuff->size - strbuff->length - size);
63 memcpy(strbuff->value + strbuff->length, data, size);
64 strbuff->length += size;