X-Git-Url: https://harrygodden.com/git/?p=vg.git;a=blobdiff_plain;f=vg_string.c;fp=vg_string.c;h=ef29ef3be597ef7e84b01ddfbee600b22bf38680;hp=1261f5b9479e79ea77b6989772bbcfaa42501194;hb=f8364997f9cd4c55e26522aa1e1f1ad93511b297;hpb=809e802a62579292a64af48937476f4670b2a374 diff --git a/vg_string.c b/vg_string.c index 1261f5b..ef29ef3 100644 --- a/vg_string.c +++ b/vg_string.c @@ -69,37 +69,49 @@ static i32 vg_str_dynamic_grow( vg_str *str ) } } -void vg_strcat( vg_str *str, const char *append ) +static void _vg_strcatch( vg_str *str, char c ) { - if( !append || (str->i == -1) ) return; - - i32 max = vg_str_storage( str ), - i = 0; + if( str->i == -1 ) return; -append: - if( str->i == max ){ + i32 max = vg_str_storage( str ); + if( str->i == max ) + { if( str->len == -1 ) max = vg_str_dynamic_grow( str ); - else{ + else + { str->i = -1; str->buffer[ max-1 ] = '\0'; return; } } - char c = append[ i ++ ]; - str->buffer[ str->i ] = c; + str->buffer[ str->i ++ ] = c; +} + +void vg_strcat( vg_str *str, const char *append ) +{ + if( !append || (str->i == -1) ) return; + + i32 i = 0; + +append:; + char c = append[ i ++ ]; + _vg_strcatch( str, c ); if( c == '\0' ) + { + str->i --; return; - - str->i ++; - goto append; + } + else goto append; } void vg_strcatch( vg_str *str, char c ) { - vg_strcat( str, (char[]){ c, '\0' } ); + _vg_strcatch( str, c ); + _vg_strcatch( str, '\x00' ); + str->i --; } /*