X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg_platform.h;h=b04ce672b9afa8d0803dec16dffb7f5bcbc48c77;hb=e490893eb0e952a5e0672faeba7250e053e4175e;hp=52c26c0933fc67ecabb60b6bb2e5a772b6d50257;hpb=6d772a1e69860f4ae3e838e8c5c164754e6533ae;p=vg.git diff --git a/vg_platform.h b/vg_platform.h index 52c26c0..b04ce67 100644 --- a/vg_platform.h +++ b/vg_platform.h @@ -39,25 +39,86 @@ 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_strncpy( const char *src, char *dst, u32 len, - enum strncpy_behaviour behaviour ) +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( (behaviour == k_strncpy_always_add_null) && (i == len-1) ) - dst[i] = '\0'; + 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; @@ -68,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