+ return reg;
+}
+
+/*
+ * Mount a local folder. may or may not have addon.inf
+ */
+VG_STATIC addon_reg *addon_mount_local_addon( const char *folder,
+ enum workshop_file_type type,
+ const char *content_ext )
+{
+ char folder_path_buf[4096];
+ vg_str folder_path;
+ vg_strnull( &folder_path, folder_path_buf, 4096 );
+ vg_strcat( &folder_path, folder );
+
+ const char *folder_name = vg_strch( &folder_path, '/' );
+ u32 folder_hash = vg_strdjb2(folder_name);
+ for( u32 i=0; i<addon_system.registry_count; i++ ){
+ addon_reg *reg = &addon_system.registry[i];
+
+ if( (reg->type == type) && (reg->foldername_hash == folder_hash) ){
+ if( !strcmp( reg->foldername, folder_name ) ){
+ reg->state = k_addon_state_indexed;
+ return NULL;
+ }
+ }
+ }
+
+ addon_reg *reg = addon_alloc_reg( 0, type );
+ if( !reg ) return NULL;
+ addon_set_foldername( reg, folder_name );
+ addon_try_load_metadata( reg, folder_path );
+
+ if( reg->metadata_len == 0 ){
+ /* create our own content commands */
+ vg_msg msg;
+ vg_msg_init( &msg, reg->metadata, sizeof(reg->metadata) );
+
+ u32 content_count = 0;
+
+ vg_strcat( &folder_path, "" );
+ vg_warn( "Creating own metadata for: %s\n", folder_path.buffer );
+
+ vg_dir subdir;
+ if( !vg_dir_open(&subdir, folder_path.buffer) ){
+ vg_error( "Failed to open '%s'\n", folder_path.buffer );
+ return NULL;
+ }
+
+ while( vg_dir_next_entry(&subdir) ){
+ if( vg_dir_entry_type(&subdir) == k_vg_entry_type_file ){
+ const char *fname = vg_dir_entry_name(&subdir);
+ vg_str file = folder_path;
+ vg_strcat( &file, "/" );
+ vg_strcat( &file, fname );
+ if( !vg_strgood( &file ) ) continue;
+
+ char *ext = vg_strch( &file, '.' );
+ if( !ext ) continue;
+ if( strcmp(ext,content_ext) ) continue;
+
+ vg_msg_wkvstr( &msg, "content", fname );
+ content_count ++;
+ }
+ }
+ vg_dir_close(&subdir);
+
+ if( !content_count ) return NULL;
+ if( msg.error == k_vg_msg_error_OK )
+ reg->metadata_len = msg.cur;
+ else{
+ vg_error( "Error creating metadata: %d\n", msg.error );
+ return NULL;
+ }
+ }
+
+ addon_mount_finish( reg );
+ return reg;