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 )
{
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" );
+ }
}
}