k_strncpy_allow_cutoff = 1
};
-VG_STATIC void vg_strncpy( const char *src, char *dst, u32 len,
- enum strncpy_behaviour behaviour )
+VG_STATIC u32 vg_strncpy( const char *src, char *dst, u32 len,
+ enum strncpy_behaviour behaviour )
{
for( u32 i=0; i<len; i++ ){
dst[i] = src[i];
- if( !src[i] )
- break;
+ if( !src[i] ) return i;
- if( (behaviour == k_strncpy_always_add_null) && (i == len-1) )
+ if( (behaviour == k_strncpy_always_add_null) && (i == len-1) ){
dst[i] = '\0';
+ return i;
+ }
+ }
+
+ 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->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{
+ str->buffer[ str->i ++ ] = '\0';
+ return 1;
}
}