X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg_platform.h;h=b04ce672b9afa8d0803dec16dffb7f5bcbc48c77;hb=e490893eb0e952a5e0672faeba7250e053e4175e;hp=98612048aa6533c562fedf8cd0fef4da5e675695;hpb=ffd724233b7a3cb89d0d5d253ba4c475d87c76e2;p=vg.git diff --git a/vg_platform.h b/vg_platform.h index 9861204..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,15 +62,63 @@ 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" ); + } } } return 0; } +typedef struct vg_str vg_str; +struct vg_str{ + char *buffer; + u32 i, len; +}; + +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; +} + +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; @@ -71,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