LRU dummy
[carveJwlIkooP6JGAAIwe30JlM.git] / addon.c
diff --git a/addon.c b/addon.c
index 504904fac98c26546869ecc633033924eb7ef42e..b599c304a04e2c91f3965460774db4ba22bd6864 100644 (file)
--- a/addon.c
+++ b/addon.c
@@ -42,6 +42,34 @@ static u32 get_index_from_addon( enum workshop_file_type type, addon_reg *a ){
    return 0xffffffff;
 }
 
+static u32 addon_match( enum workshop_file_type type,
+                        u64 workshop_id, const char *foldername ){
+   u32 foldername_djb2 = vg_strdjb2( foldername );
+
+   u32 count = 0;
+   for( u32 i=0; count<addon_system.registry_type_counts[type]; i++ ){
+      addon_reg *reg = &addon_system.registry[i];
+      if( reg->type == type ){
+         
+         if( workshop_id ){
+            if( workshop_id == reg->workshop_id )
+               return count;
+         }
+         else{
+            if( reg->foldername_hash == foldername_djb2 ){
+               if( !strcmp( reg->foldername, foldername ) ){
+                  return count;
+               }
+            }
+         }
+
+         count ++;
+      }
+   }
+
+   return 0xffffffff;
+}
+
 static void addon_system_init( void ){
    u32 reg_size   = sizeof(addon_reg)*ADDON_MOUNTED_MAX;
    addon_system.registry = vg_linear_alloc( vg_mem.rtmemory, reg_size );
@@ -157,14 +185,14 @@ VG_STATIC addon_reg *addon_mount_workshop_folder( PublishedFileId_t workshop_id,
    }
 
    enum workshop_file_type type = k_workshop_file_type_none;
-   vg_msg root;
-   vg_msg_init( &root, reg->metadata, reg->metadata_len );
+   vg_msg root = {0};
+   root.buf = reg->metadata;
+   root.len = reg->metadata_len;
+   root.max = sizeof(reg->metadata);
+
    vg_msg workshop = root;
    if( vg_msg_seekframe( &workshop, "workshop", k_vg_msg_first )){
-      vg_msg_cmd kv_type = vg_msg_seekkv( &workshop, "type", k_vg_msg_first );
-      if( kv_type.code & k_vg_msg_code_integer ){
-         type = kv_type.value._u32;
-      }
+      type = vg_msg_seekkvu32( &workshop, "type", k_vg_msg_first );
    }
 
    if( type == k_workshop_file_type_none ){
@@ -189,7 +217,7 @@ VG_STATIC addon_reg *addon_mount_local_addon( const char *folder,
    vg_strnull( &folder_path, folder_path_buf, 4096 );
    vg_strcat( &folder_path, folder );
 
-   const char *folder_name = vg_strch( &folder_path, '/' );
+   const char *folder_name = vg_strch( &folder_path, '/' )+1;
    u32 folder_hash = vg_strdjb2(folder_name);
    for( u32 i=0; i<addon_system.registry_count; i++ ){
       addon_reg *reg = &addon_system.registry[i];
@@ -209,8 +237,10 @@ VG_STATIC addon_reg *addon_mount_local_addon( const char *folder,
 
    if( reg->metadata_len == 0 ){
       /* create our own content commands */
-      vg_msg msg;
-      vg_msg_init( &msg, reg->metadata, sizeof(reg->metadata) );
+      vg_msg msg = {0};
+      msg.buf = reg->metadata;
+      msg.len = 0;
+      msg.max = sizeof(reg->metadata);
 
       u32 content_count = 0;