* actually load the dynamically loadable module.
* This allows us to only fully load plugins when they are actually used.
*****************************************************************************/
-void CacheLoad( vlc_object_t *p_this, bool b_delete )
+void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete )
{
char *psz_filename, *psz_cachedir = config_GetCacheDir();
FILE *file;
return;
}
- p_module_bank->i_loaded_cache = 0;
+ p_bank->i_loaded_cache = 0;
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 "
}
if( i_cache )
- pp_cache = p_module_bank->pp_loaded_cache =
+ pp_cache = p_bank->pp_loaded_cache =
malloc( i_cache * sizeof(void *) );
#define LOAD_IMMEDIATE(a) \
int i_submodules;
pp_cache[i] = malloc( sizeof(module_cache_t) );
- p_module_bank->i_loaded_cache++;
+ p_bank->i_loaded_cache++;
/* Load common info */
LOAD_STRING( pp_cache[i]->psz_file );
msg_Warn( p_this, "plugins cache not loaded (corrupted)" );
/* TODO: cleanup */
- p_module_bank->i_loaded_cache = 0;
+ p_bank->i_loaded_cache = 0;
fclose( file );
return;
/*****************************************************************************
* SavePluginsCache: saves the plugins cache to a file
*****************************************************************************/
-void CacheSave( vlc_object_t *p_this )
+void CacheSave( vlc_object_t *p_this, module_bank_t *p_bank )
{
static char const psz_tag[] =
"Signature: 8a477f597d28d172789f06886806bc55\r\n"
if (fwrite (&i_file_size, sizeof (i_file_size), 1, file) != 1)
goto error;
- i_cache = p_module_bank->i_cache;
- pp_cache = p_module_bank->pp_cache;
+ i_cache = p_bank->i_cache;
+ pp_cache = p_bank->pp_cache;
if (fwrite( &i_cache, sizeof (i_cache), 1, file) != 1)
goto error;
/*****************************************************************************
* CacheFind: finds the cache entry corresponding to a file
*****************************************************************************/
-module_cache_t *CacheFind( const char *psz_file,
+module_cache_t *CacheFind( module_bank_t *p_bank, const char *psz_file,
int64_t i_time, int64_t i_size )
{
module_cache_t **pp_cache;
int i_cache, i;
- pp_cache = p_module_bank->pp_loaded_cache;
- i_cache = p_module_bank->i_loaded_cache;
+ pp_cache = p_bank->pp_loaded_cache;
+ i_cache = p_bank->i_loaded_cache;
for( i = 0; i < i_cache; i++ )
{
#include "modules/modules.h"
#include "modules/builtin.h"
-module_bank_t *p_module_bank = NULL;
+static module_bank_t *p_module_bank = NULL;
/*****************************************************************************
* Local prototypes
config_AutoSaveConfigFile( p_this );
#ifdef HAVE_DYNAMIC_PLUGINS
- if( p_bank->b_cache ) CacheSave( p_this );
+ if( p_bank->b_cache ) CacheSave( p_this, p_module_bank );
while( p_bank->i_loaded_cache-- )
{
if( p_bank->pp_loaded_cache[p_bank->i_loaded_cache] )
p_module_bank->b_cache = true;
if( p_module_bank->b_cache || b_cache_delete )
- CacheLoad( p_this, b_cache_delete );
+ CacheLoad( p_this, p_module_bank, b_cache_delete );
AllocateAllPlugins( p_this );
#endif
* Check our plugins cache first then load plugin if needed
*/
p_cache_entry =
- CacheFind( psz_file, i_file_time, i_file_size );
+ CacheFind( p_module_bank, psz_file, i_file_time, i_file_size );
if( !p_cache_entry )
{
/* Plugins cache */
void CacheMerge (vlc_object_t *, module_t *, module_t *);
-void CacheLoad (vlc_object_t *, bool);
-void CacheSave (vlc_object_t * );
-module_cache_t * CacheFind (const char *, int64_t, int64_t);
+void CacheLoad (vlc_object_t *, module_bank_t *, bool);
+void CacheSave (vlc_object_t *, module_bank_t *);
+module_cache_t * CacheFind (module_bank_t *, const char *, int64_t, int64_t);
#endif /* !__LIBVLC_MODULES_H */