X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg_platform.h;h=b04ce672b9afa8d0803dec16dffb7f5bcbc48c77;hb=e490893eb0e952a5e0672faeba7250e053e4175e;hp=210192d60e7164fbf6e15ed72940bb74da6b62c6;hpb=167bbf44eec3c76a63a6a14319136a3ee3a3c0ac;p=vg.git diff --git a/vg_platform.h b/vg_platform.h index 210192d..b04ce67 100644 --- a/vg_platform.h +++ b/vg_platform.h @@ -39,17 +39,6 @@ struct vg_achievement #define vg_list_size( A ) (sizeof(A)/sizeof(A[0])) #define VG_MUST_USE_RESULT __attribute__((warn_unused_result)) -VG_STATIC void vg_strncpy( const char *src, char *dst, u32 len ) -{ - for( u32 i=0; i #include #include @@ -58,6 +47,88 @@ VG_STATIC void vg_strncpy( const char *src, char *dst, u32 len ) #include #include +enum strncpy_behaviour{ + k_strncpy_always_add_null = 0, + k_strncpy_allow_cutoff = 1, + k_strncpy_overflow_fatal = 2 +}; + +VG_STATIC void vg_fatal_error( const char *fmt, ... ); +VG_STATIC u32 vg_strncpy( const char *src, char *dst, u32 len, + enum strncpy_behaviour behaviour ) +{ + for( u32 i=0; ibuffer = buffer; + str->buffer[0] = '\0'; + str->i = 0; + str->len = len; +} + +VG_STATIC void vg_strcat( vg_str *str, const char *append ) +{ + for( u32 i=0; str->i < str->len; i++, str->i ++ ){ + str->buffer[ str->i ] = append[i]; + + if( append[i] == '\0' ) return; + } +} + +VG_STATIC int vg_strgood( vg_str *str ) +{ + if( str->i == str->len ){ + if( str->buffer[str->i -1] == '\0' ) return 1; + else return 0; + } + else return 1; +} + +VG_STATIC char *vg_strch( vg_str *str, char c ) +{ + char *ptr = NULL; + for( u32 i=0; ii; i++ ){ + if( str->buffer[i] == c ) + ptr = str->buffer+i; + } + + return ptr; +} + +VG_STATIC u32 vg_strdjb2( const char *str ) +{ + u32 hash = 5381, c; + + while( (c = *str++) ) + hash = ((hash << 5) + hash) + c; /* hash * 33 + c */ + + return hash; +} + #define VG_MIN( A, B ) ((A)<(B)?(A):(B)) #define VG_MAX( A, B ) ((A)>(B)?(A):(B)) #endif