[vlc-commits] Rationalize --(no-)plugins-cache value handling
Rémi Denis-Courmont
git at videolan.org
Thu May 12 20:00:06 CEST 2011
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu May 12 20:57:58 2011 +0300| [8dbde14ea9619ad865f9bb13c39e505022ff871b] | committer: Rémi Denis-Courmont
Rationalize --(no-)plugins-cache value handling
There is no need to keep this around after the plugins scan. Also,
there is no need to check --reset-plugins-cache if caching si disabled
(--no-plugins-cache).
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8dbde14ea9619ad865f9bb13c39e505022ff871b
---
src/modules/cache.c | 3 --
src/modules/modules.c | 66 ++++++++++++++++++++++++++++++++-----------------
src/modules/modules.h | 2 -
3 files changed, 43 insertions(+), 28 deletions(-)
diff --git a/src/modules/cache.c b/src/modules/cache.c
index 15b2afa..53c8a39 100644
--- a/src/modules/cache.c
+++ b/src/modules/cache.c
@@ -99,9 +99,6 @@ void CacheLoad( vlc_object_t *p_this, module_bank_t *p_bank, const char *dir )
assert( dir != NULL );
- if( !p_bank->b_cache )
- return;
-
if( asprintf( &psz_filename, "%s"DIR_SEP CACHE_NAME, dir ) == -1 )
return;
diff --git a/src/modules/modules.c b/src/modules/modules.c
index acd8b86..a1329d7 100644
--- a/src/modules/modules.c
+++ b/src/modules/modules.c
@@ -67,13 +67,14 @@ int vlc_entry__main( module_t * );
* Local prototypes
*****************************************************************************/
#ifdef HAVE_DYNAMIC_PLUGINS
+typedef enum { CACHE_USE, CACHE_RESET, CACHE_IGNORE } cache_mode_t;
static void AllocateAllPlugins( vlc_object_t *, module_bank_t * );
static void AllocatePluginPath( vlc_object_t *, module_bank_t *, const char *,
- bool );
+ cache_mode_t );
static void AllocatePluginDir( vlc_object_t *, module_bank_t *, const char *,
- unsigned );
+ unsigned, cache_mode_t );
static int AllocatePluginFile( vlc_object_t *, module_bank_t *, const char *,
- time_t, off_t );
+ time_t, off_t, cache_mode_t );
static module_t * AllocatePlugin( vlc_object_t *, const char * );
#endif
static int AllocateBuiltinModule( vlc_object_t *, int ( * ) ( module_t * ) );
@@ -104,7 +105,6 @@ void module_InitBank( vlc_object_t *p_this )
p_bank->i_usage = 1;
p_bank->i_cache = p_bank->i_loaded_cache = 0;
p_bank->pp_cache = p_bank->pp_loaded_cache = NULL;
- p_bank->b_cache = false;
p_bank->head = NULL;
/* Everything worked, attach the object */
@@ -208,8 +208,6 @@ void module_LoadPlugins( vlc_object_t * p_this )
if( p_bank->i_usage == 1 )
{
msg_Dbg( p_this, "checking plugin modules" );
- p_module_bank->b_cache = var_InheritBool( p_this, "plugins-cache" );
-
AllocateAllPlugins( p_this, p_module_bank );
config_UnsortConfig ();
config_SortConfig ();
@@ -830,7 +828,14 @@ static void AllocateAllPlugins( vlc_object_t *p_this, module_bank_t *p_bank )
{
const char *vlcpath = psz_vlcpath;
char *paths;
- const bool b_reset = var_InheritBool( p_this, "reset-plugins-cache" );
+ cache_mode_t mode;
+
+ if( !var_InheritBool( p_this, "plugins-cache" ) )
+ mode = CACHE_IGNORE;
+ else if( var_InheritBool( p_this, "reset-plugins-cache" ) )
+ mode = CACHE_RESET;
+ else
+ mode = CACHE_USE;
/* Contruct the special search path for system that have a relocatable
* executable. Set it to <vlc path>/plugins. */
@@ -838,7 +843,7 @@ static void AllocateAllPlugins( vlc_object_t *p_this, module_bank_t *p_bank )
if( asprintf( &paths, "%s" DIR_SEP "plugins", vlcpath ) != -1 )
{
- AllocatePluginPath( p_this, p_bank, paths, b_reset );
+ AllocatePluginPath( p_this, p_bank, paths, mode );
free( paths );
}
@@ -854,35 +859,44 @@ static void AllocateAllPlugins( vlc_object_t *p_this, module_bank_t *p_bank )
for( char *buf, *path = strtok_r( paths, PATH_SEP, &buf );
path != NULL;
path = strtok_r( NULL, PATH_SEP, &buf ) )
- AllocatePluginPath( p_this, p_bank, path, b_reset );
+ AllocatePluginPath( p_this, p_bank, path, mode );
free( paths );
}
static void AllocatePluginPath( vlc_object_t *p_this, module_bank_t *p_bank,
- const char *path, bool b_reset )
+ const char *path, cache_mode_t mode )
{
size_t offset = p_module_bank->i_cache;
- if( b_reset )
- CacheDelete( p_this, path );
- else
- CacheLoad( p_this, p_module_bank, path );
+ switch( mode )
+ {
+ case CACHE_USE:
+ CacheLoad( p_this, p_module_bank, path );
+ break;
+ case CACHE_RESET:
+ CacheDelete( p_this, path );
+ break;
+ default:
+ msg_Dbg( p_this, "ignoring plugins cache file" );
+ }
msg_Dbg( p_this, "recursively browsing `%s'", path );
/* Don't go deeper than 5 subdirectories */
- AllocatePluginDir( p_this, p_bank, path, 5 );
+ AllocatePluginDir( p_this, p_bank, path, 5, mode );
- CacheSave( p_this, path, p_module_bank->pp_cache + offset,
- p_module_bank->i_cache - offset );
+ if( mode != CACHE_IGNORE )
+ CacheSave( p_this, path, p_module_bank->pp_cache + offset,
+ p_module_bank->i_cache - offset );
}
/*****************************************************************************
* AllocatePluginDir: recursively parse a directory to look for plugins
*****************************************************************************/
static void AllocatePluginDir( vlc_object_t *p_this, module_bank_t *p_bank,
- const char *psz_dir, unsigned i_maxdepth )
+ const char *psz_dir, unsigned i_maxdepth,
+ cache_mode_t mode )
{
if( i_maxdepth == 0 )
return;
@@ -914,7 +928,7 @@ static void AllocatePluginDir( vlc_object_t *p_this, module_bank_t *p_bank,
if (S_ISDIR (st.st_mode))
/* Recurse into another directory */
- AllocatePluginDir (p_this, p_bank, path, i_maxdepth - 1);
+ AllocatePluginDir (p_this, p_bank, path, i_maxdepth - 1, mode);
else
if (S_ISREG (st.st_mode)
&& strncmp (path, "lib", 3)
@@ -922,7 +936,8 @@ static void AllocatePluginDir( vlc_object_t *p_this, module_bank_t *p_bank,
&& !strncasecmp (path + pathlen - strlen ("_plugin"LIBEXT),
"_plugin"LIBEXT, strlen ("_plugni"LIBEXT)))
/* ^^ We only load files matching "lib*_plugin"LIBEXT */
- AllocatePluginFile (p_this, p_bank, path, st.st_mtime, st.st_size);
+ AllocatePluginFile (p_this, p_bank, path, st.st_mtime, st.st_size,
+ mode);
free (path);
}
@@ -937,7 +952,8 @@ static void AllocatePluginDir( vlc_object_t *p_this, module_bank_t *p_bank,
* and module_unneed. It can be removed by DeleteModule.
*****************************************************************************/
static int AllocatePluginFile( vlc_object_t * p_this, module_bank_t *p_bank,
- const char *path, time_t mtime, off_t size )
+ const char *path, time_t mtime, off_t size,
+ cache_mode_t mode )
{
module_t * p_module = NULL;
module_cache_t *p_cache_entry = NULL;
@@ -945,10 +961,14 @@ static int AllocatePluginFile( vlc_object_t * p_this, module_bank_t *p_bank,
/*
* Check our plugins cache first then load plugin if needed
*/
+ //if( mode == CACHE_USE )
p_cache_entry = CacheFind( p_bank, path, mtime, size );
- if( !p_cache_entry )
+
+ if( p_cache_entry == NULL )
{
p_module = AllocatePlugin( p_this, path );
+ /* FIXME: VLC_PLUGIN_PATH may contains duplicates or aliases.
+ * This needs to be handled correctly even if caching is disabled. */
}
else
{
@@ -991,7 +1011,7 @@ static int AllocatePluginFile( vlc_object_t * p_this, module_bank_t *p_bank,
p_bank->head = p_module;
assert( p_module->next != NULL ); /* Insertion done */
- if( !p_module_bank->b_cache )
+ if( mode == CACHE_IGNORE )
return 0;
/* Add entry to cache */
diff --git a/src/modules/modules.h b/src/modules/modules.h
index 5573a16..dc67f9c 100644
--- a/src/modules/modules.h
+++ b/src/modules/modules.h
@@ -36,8 +36,6 @@ typedef struct module_bank_t
unsigned i_usage;
/* Plugins cache */
- bool b_cache;
-
int i_cache;
module_cache_t **pp_cache;
More information about the vlc-commits
mailing list