Commit 86bae4e7 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Enable loading "the" cache multiple times

parent a0fdc0a2
...@@ -80,9 +80,9 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete ) ...@@ -80,9 +80,9 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete )
{ {
char *psz_filename, *psz_cachedir = config_GetUserDir(VLC_CACHE_DIR); char *psz_filename, *psz_cachedir = config_GetUserDir(VLC_CACHE_DIR);
FILE *file; FILE *file;
int i, j, i_size, i_read; int j, i_size, i_read;
char p_cachestring[sizeof("cache " COPYRIGHT_MESSAGE)]; char p_cachestring[sizeof("cache " COPYRIGHT_MESSAGE)];
int i_cache; unsigned i_cache;
module_cache_t **pp_cache = NULL; module_cache_t **pp_cache = NULL;
int32_t i_file_size, i_marker; int32_t i_file_size, i_marker;
...@@ -186,7 +186,6 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete ) ...@@ -186,7 +186,6 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete )
return; return;
} }
p_bank->i_loaded_cache = 0;
if (fread( &i_cache, 1, sizeof(i_cache), file ) != sizeof(i_cache) ) if (fread( &i_cache, 1, sizeof(i_cache), file ) != sizeof(i_cache) )
{ {
msg_Warn( p_this, "This doesn't look like a valid plugins cache " msg_Warn( p_this, "This doesn't look like a valid plugins cache "
...@@ -196,8 +195,18 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete ) ...@@ -196,8 +195,18 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete )
} }
if( i_cache ) if( i_cache )
pp_cache = p_bank->pp_loaded_cache = {
xmalloc( i_cache * sizeof(void *) ); unsigned i_already = p_bank->i_loaded_cache;
pp_cache = realloc( p_bank->pp_loaded_cache,
(i_already + i_cache) * sizeof(*pp_cache) );
if( unlikely(pp_cache == NULL) )
i_cache = 0; /* don't load */
else
{
p_bank->pp_loaded_cache = pp_cache;
pp_cache += i_already;
}
}
#define LOAD_IMMEDIATE(a) \ #define LOAD_IMMEDIATE(a) \
if( fread( (void *)&a, sizeof(char), sizeof(a), file ) != sizeof(a) ) goto error if( fread( (void *)&a, sizeof(char), sizeof(a), file ) != sizeof(a) ) goto error
...@@ -221,13 +230,12 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete ) ...@@ -221,13 +230,12 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete )
} \ } \
} }
for( i = 0; i < i_cache; i++ ) for( unsigned i = 0; i < i_cache; i++ )
{ {
uint16_t i_size; uint16_t i_size;
int i_submodules; int i_submodules;
pp_cache[i] = xmalloc( sizeof(module_cache_t) ); pp_cache[i] = xmalloc( sizeof(module_cache_t) );
p_bank->i_loaded_cache++;
/* Load common info */ /* Load common info */
LOAD_STRING( pp_cache[i]->psz_file ); LOAD_STRING( pp_cache[i]->psz_file );
...@@ -280,6 +288,7 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete ) ...@@ -280,6 +288,7 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete )
LOAD_STRING( p_module->domain ); LOAD_STRING( p_module->domain );
} }
} }
p_bank->i_loaded_cache += i_cache;
fclose( file ); fclose( file );
return; return;
...@@ -289,8 +298,6 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete ) ...@@ -289,8 +298,6 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete )
msg_Warn( p_this, "plugins cache not loaded (corrupted)" ); msg_Warn( p_this, "plugins cache not loaded (corrupted)" );
/* TODO: cleanup */ /* TODO: cleanup */
p_bank->i_loaded_cache = 0;
fclose( file ); fclose( file );
return; return;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment