[vlc-devel] commit: Load/delete plugins cache from plugins directory ( Rémi Denis-Courmont )
git version control
git at videolan.org
Sat Jan 30 22:54:35 CET 2010
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Jan 30 23:32:54 2010 +0200| [2ec9fb757e42b1b534fe6d66e93a2d39ee5955b2] | committer: Rémi Denis-Courmont
Load/delete plugins cache from plugins directory
Also refactor. Deletion and loading are now distinct functions.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2ec9fb757e42b1b534fe6d66e93a2d39ee5955b2
---
src/libvlc.c | 5 +----
src/modules/cache.c | 39 ++++++++++++++++++++-------------------
src/modules/modules.c | 10 +++++++---
src/modules/modules.h | 7 ++++---
4 files changed, 32 insertions(+), 29 deletions(-)
diff --git a/src/libvlc.c b/src/libvlc.c
index 7f7bed6..3ffade5 100644
--- a/src/libvlc.c
+++ b/src/libvlc.c
@@ -344,9 +344,6 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
i_ret = VLC_EEXITSUCCESS;
}
- /* Check for plugins cache options */
- bool b_cache_delete = var_InheritBool( p_libvlc, "reset-plugins-cache" );
-
/* Check for daemon mode */
#ifndef WIN32
if( var_InheritBool( p_libvlc, "daemon" ) )
@@ -446,7 +443,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc,
* list of configuration options exported by each module and loads their
* default values.
*/
- module_LoadPlugins( p_libvlc, b_cache_delete );
+ module_LoadPlugins( p_libvlc );
if( p_libvlc->b_die )
{
b_exit = true;
diff --git a/src/modules/cache.c b/src/modules/cache.c
index a872adc..d8efe76 100644
--- a/src/modules/cache.c
+++ b/src/modules/cache.c
@@ -68,6 +68,20 @@ static int CacheLoadConfig ( module_t *, FILE * );
sizeof(int), sizeof(void *), *(uint8_t *)&(uint16_t){ 0xbe1e }, vlc_CPU()
+void CacheDelete( vlc_object_t *obj, const char *dir )
+{
+ char *path;
+
+ assert( dir != NULL );
+
+ if( asprintf( &path, "%s"DIR_SEP CACHENAME_FORMAT,
+ dir, CACHENAME_VALUES ) == -1 )
+ return;
+ msg_Dbg( obj, "removing plugins cache file %s", path );
+ utf8_unlink( path );
+ free( path );
+}
+
/*****************************************************************************
* LoadPluginsCache: loads the plugins cache file
*****************************************************************************
@@ -76,9 +90,9 @@ static int CacheLoadConfig ( module_t *, FILE * );
* 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, module_bank_t *p_bank, bool b_delete )
+void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, const char *dir )
{
- char *psz_filename, *psz_cachedir = config_GetUserDir(VLC_CACHE_DIR);
+ char *psz_filename;
FILE *file;
int j, i_size, i_read;
char p_cachestring[sizeof("cache " COPYRIGHT_MESSAGE)];
@@ -86,27 +100,14 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, bool b_delete )
module_cache_t **pp_cache = NULL;
int32_t i_file_size, i_marker;
- if( !psz_cachedir ) /* XXX: this should never happen */
- {
- msg_Err( p_this, "Unable to get cache directory" );
- return;
- }
+ assert( dir != NULL );
- if( asprintf( &psz_filename, "%s"DIR_SEP CACHENAME_FORMAT,
- psz_cachedir, CACHENAME_VALUES ) == -1 )
- {
- free( psz_cachedir );
+ if( !p_bank->b_cache )
return;
- }
- free( psz_cachedir );
- if( b_delete )
- {
- msg_Dbg( p_this, "removing plugins cache file %s", psz_filename );
- utf8_unlink( psz_filename );
- free( psz_filename );
+ if( asprintf( &psz_filename, "%s"DIR_SEP CACHENAME_FORMAT,
+ dir, CACHENAME_VALUES ) == -1 )
return;
- }
msg_Dbg( p_this, "loading plugins cache file %s", psz_filename );
diff --git a/src/modules/modules.c b/src/modules/modules.c
index 8c4d009..2dcf303 100644
--- a/src/modules/modules.c
+++ b/src/modules/modules.c
@@ -200,7 +200,7 @@ void module_EndBank( vlc_object_t *p_this, bool b_plugins )
* \param p_this vlc object structure
* \return nothing
*/
-void module_LoadPlugins( vlc_object_t * p_this, bool b_cache_delete )
+void module_LoadPlugins( vlc_object_t * p_this )
{
module_bank_t *p_bank = p_module_bank;
@@ -213,8 +213,6 @@ void module_LoadPlugins( vlc_object_t * p_this, bool b_cache_delete )
msg_Dbg( p_this, "checking plugin modules" );
p_module_bank->b_cache = var_InheritBool( p_this, "plugins-cache" );
- if( p_module_bank->b_cache || b_cache_delete )
- CacheLoad( p_this, p_module_bank, b_cache_delete );
AllocateAllPlugins( p_this, p_module_bank );
if( p_module_bank->b_cache )
CacheSave( p_this, p_bank );
@@ -836,6 +834,7 @@ static void AllocateAllPlugins( vlc_object_t *p_this, module_bank_t *p_bank )
int count,i;
char * path;
vlc_array_t *arraypaths = vlc_array_new();
+ const bool b_reset = var_InheritBool( p_this, "reset-plugins-cache" );
/* Contruct the special search path for system that have a relocatable
* executable. Set it to <vlc path>/modules and <vlc path>/plugins. */
@@ -866,6 +865,11 @@ static void AllocateAllPlugins( vlc_object_t *p_this, module_bank_t *p_bank )
if( !path )
continue;
+ if( b_reset )
+ CacheDelete( p_this, path );
+ else
+ CacheLoad( p_this, p_module_bank, path );
+
msg_Dbg( p_this, "recursively browsing `%s'", path );
/* Don't go deeper than 5 subdirectories */
diff --git a/src/modules/modules.h b/src/modules/modules.h
index 62a79ad..7469832 100644
--- a/src/modules/modules.h
+++ b/src/modules/modules.h
@@ -144,8 +144,8 @@ module_t *vlc_submodule_create (module_t *module);
#define module_InitBank(a) __module_InitBank(VLC_OBJECT(a))
void __module_InitBank ( vlc_object_t * );
-void module_LoadPlugins( vlc_object_t *, bool );
-#define module_LoadPlugins(a,b) module_LoadPlugins(VLC_OBJECT(a),b)
+void module_LoadPlugins( vlc_object_t * );
+#define module_LoadPlugins(a) module_LoadPlugins(VLC_OBJECT(a))
void module_EndBank( vlc_object_t *, bool );
#define module_EndBank(a,b) module_EndBank(VLC_OBJECT(a), b)
@@ -158,7 +158,8 @@ void module_Unload (module_handle_t);
/* Plugins cache */
void CacheMerge (vlc_object_t *, module_t *, module_t *);
-void CacheLoad (vlc_object_t *, module_bank_t *, bool);
+void CacheDelete(vlc_object_t *, const char *);
+void CacheLoad (vlc_object_t *, module_bank_t *, const char *);
void CacheSave (vlc_object_t *, module_bank_t *);
module_cache_t * CacheFind (module_bank_t *, const char *, int64_t, int64_t);
More information about the vlc-devel
mailing list