From d573625b41141d7946a72327982171001140ef6f Mon Sep 17 00:00:00 2001 From: hgn Date: Sun, 8 Oct 2023 11:41:02 +0100 Subject: [PATCH] improved vg_str functions --- vg_platform.h | 57 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/vg_platform.h b/vg_platform.h index 30751f2..b22f989 100644 --- a/vg_platform.h +++ b/vg_platform.h @@ -77,40 +77,62 @@ static u32 vg_strncpy( const char *src, char *dst, u32 len, typedef struct vg_str vg_str; struct vg_str{ char *buffer; - u32 i, len; + i32 i, len; }; -static void vg_strnull( vg_str *str, char *buffer, u32 len ) -{ +static void vg_strnull( vg_str *str, char *buffer, i32 len ){ str->buffer = buffer; str->buffer[0] = '\0'; str->i = 0; str->len = len; + + assert(len); } -static void vg_strcat( vg_str *str, const char *append ) -{ +static void vg_strcat( vg_str *str, const char *append ){ if( !append ) return; - for( u32 i=0; str->i < str->len; i++, str->i ++ ){ - str->buffer[ str->i ] = append[i]; + if( str->i == -1 ) return; + + for( u32 i=0; str->i < str->len; str->i ++, i ++ ){ + str->buffer[ str->i ] = append[ i ]; - if( append[i] == '\0' ) return; + if( append[ i ] == '\0' ) + return; } + + /* overflow */ + str->buffer[ str->i ] = '\0'; + str->i = -1; } -static int vg_strgood( vg_str *str ) -{ - if( str->i == str->len ){ - if( str->buffer[str->i -1] == '\0' ) return 1; - else return 0; +static void vg_strcati32( vg_str *str, i32 value ){ + if( value ){ + char temp[32]; + int i=0; + while( value && (i<31) ){ + temp[ i ++ ] = '0' + (value % 10); + value /= 10; + } + + char reverse[32]; + for( int j=0; ji == -1 ) return 0; else return 1; } -static char *vg_strch( vg_str *str, char c ) -{ +static char *vg_strch( vg_str *str, char c ){ char *ptr = NULL; - for( u32 i=0; ii; i++ ){ + for( i32 i=0; ii; i++ ){ if( str->buffer[i] == c ) ptr = str->buffer+i; } @@ -118,8 +140,7 @@ static char *vg_strch( vg_str *str, char c ) return ptr; } -static u32 vg_strdjb2( const char *str ) -{ +static u32 vg_strdjb2( const char *str ){ u32 hash = 5381, c; while( (c = *str++) ) -- 2.25.1