X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg_platform.h;h=b04ce672b9afa8d0803dec16dffb7f5bcbc48c77;hb=e490893eb0e952a5e0672faeba7250e053e4175e;hp=c7e178b93df5dbb8a891e52e30d09da31bc8c843;hpb=8340e9c7406c7292f85266f9f30f4b5ff246dcd3;p=vg.git diff --git a/vg_platform.h b/vg_platform.h index c7e178b..b04ce67 100644 --- a/vg_platform.h +++ b/vg_platform.h @@ -39,11 +39,21 @@ struct vg_achievement #define vg_list_size( A ) (sizeof(A)/sizeof(A[0])) #define VG_MUST_USE_RESULT __attribute__((warn_unused_result)) +#include +#include +#include +#include +#include +#include +#include + enum strncpy_behaviour{ k_strncpy_always_add_null = 0, - k_strncpy_allow_cutoff = 1 + 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 ) { @@ -52,9 +62,14 @@ VG_STATIC u32 vg_strncpy( const char *src, char *dst, u32 len, if( !src[i] ) return i; - if( (behaviour == k_strncpy_always_add_null) && (i == len-1) ){ - dst[i] = '\0'; - return i; + if( i == len-1 ){ + if( behaviour == k_strncpy_always_add_null ){ + dst[i] = '\0'; + return i; + } + else if( behaviour == k_strncpy_overflow_fatal ){ + vg_fatal_error( "Strncpy dest exceeded buffer length\n" ); + } } } @@ -70,6 +85,7 @@ struct vg_str{ VG_STATIC void vg_strnull( vg_str *str, char *buffer, u32 len ) { str->buffer = buffer; + str->buffer[0] = '\0'; str->i = 0; str->len = len; } @@ -89,10 +105,18 @@ VG_STATIC int vg_strgood( vg_str *str ) if( str->buffer[str->i -1] == '\0' ) return 1; else return 0; } - else{ - str->buffer[ str->i ++ ] = '\0'; - return 1; + 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 ) @@ -105,14 +129,6 @@ VG_STATIC u32 vg_strdjb2( const char *str ) return hash; } -#include -#include -#include -#include -#include -#include -#include - #define VG_MIN( A, B ) ((A)<(B)?(A):(B)) #define VG_MAX( A, B ) ((A)>(B)?(A):(B)) #endif