api
[vg.git] / vg_platform.h
index 52c26c0933fc67ecabb60b6bb2e5a772b6d50257..c7e178b93df5dbb8a891e52e30d09da31bc8c843 100644 (file)
@@ -44,17 +44,54 @@ enum strncpy_behaviour{
    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;
    }
 }