- for( u32 i=0; str->i < str->len; str->i ++, i ++ ){
- str->buffer[ str->i ] = append[ i ];
+/*
+ * Double the size of the dynamically allocated string. If unallocated, alloc of
+ * 16 bytes minimum.
+ */
+static i32 vg_str_dynamic_grow( vg_str *str ){
+ if( str->buffer ){
+ vg_str_dynamic *hdr = ((vg_str_dynamic *)str->buffer) - 1;
+ i32 total = (hdr->len + sizeof(vg_str_dynamic)) * 2;
+ hdr = realloc( hdr, total );
+ hdr->len = total - sizeof(vg_str_dynamic);
+ str->buffer = (char *)(hdr+1);
+ return hdr->len;
+ }
+ else {
+ vg_str_dynamic *hdr = malloc(16);
+ hdr->len = 16-sizeof(vg_str_dynamic);
+ str->buffer = (char *)(hdr+1);
+ str->buffer[0] = '\0';
+ return hdr->len;
+ }
+}