*****************************************************************************/
#include <vlc/vlc.h>
+#include "../libvlc.h"
/* Some faulty libcs have a broken struct dirent when _FILE_OFFSET_BITS
* is set to 64. Don't try to be cleverer. */
#endif
#include "modules/configuration.h"
+#include "libvlc.h"
-#include "vlc_interface.h"
-#include "vlc_playlist.h"
-
-#include "vlc_stream.h"
-#include "vlc_access.h"
-#include "vlc_demux.h"
-
-#include "vlc_vout.h"
-#include "vlc_vout_synchro.h"
-
-#include "vlc_aout.h"
-
-#include "vlc_sout.h"
-#include "vlc_httpd.h"
-#include "vlc_acl.h"
-#include "vlc_tls.h"
-#include "vlc_md5.h"
-#include "vlc_xml.h"
-#include "vlc_url.h"
-
-#include "iso_lang.h"
#include "vlc_charset.h"
-#include "vlc_block.h"
-
-#include "vlc_vlm.h"
-
-#include "vlc_image.h"
-#include "vlc_osd.h"
-
-#include "vlc_update.h"
-#include "vlc_strings.h"
-#include "vlc_streaming.h"
-
#include "modules/modules.h"
#include "modules/builtin.h"
-#include "vlc_network.h"
-
#if defined( WIN32 ) || defined( UNDER_CE )
/* Avoid name collisions */
# define LoadModule(a,b,c) LoadVlcModule(a,b,c)
static void module_LoadMain( vlc_object_t *p_this );
-
/* Sub-version number
* (only used to avoid breakage in dev version when cache structure changes) */
#define CACHE_SUBVERSION_NUM 3
{
module_bank_t *p_bank = NULL;
vlc_value_t lockval;
+ libvlc_global_data_t *p_libvlc_global = vlc_global();
- var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
- var_Get( p_this->p_libvlc_global, "libvlc", &lockval );
+ var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
+ var_Get( p_libvlc_global, "libvlc", &lockval );
vlc_mutex_lock( lockval.p_address );
- if( p_this->p_libvlc_global->p_module_bank )
+ if( p_libvlc_global->p_module_bank )
{
- p_this->p_libvlc_global->p_module_bank->i_usage++;
+ p_libvlc_global->p_module_bank->i_usage++;
vlc_mutex_unlock( lockval.p_address );
- var_Destroy( p_this->p_libvlc_global, "libvlc" );
+ var_Destroy( p_libvlc_global, "libvlc" );
return;
}
vlc_mutex_unlock( lockval.p_address );
- var_Destroy( p_this->p_libvlc_global, "libvlc" );
+ var_Destroy( p_libvlc_global, "libvlc" );
p_bank = vlc_object_create( p_this, sizeof(module_bank_t) );
if( !p_bank )
p_bank->b_cache = p_bank->b_cache_dirty =
p_bank->b_cache_delete = VLC_FALSE;
- /*
- * Store the symbols to be exported
- */
-#if defined (HAVE_DYNAMIC_PLUGINS) && !defined (HAVE_SHARED_LIBVLC)
- STORE_SYMBOLS( &p_bank->symbols );
-#endif
-
/* Everything worked, attach the object */
- p_this->p_libvlc_global->p_module_bank = p_bank;
- vlc_object_attach( p_bank, p_this->p_libvlc_global );
+ p_libvlc_global->p_module_bank = p_bank;
+ vlc_object_attach( p_bank, p_libvlc_global );
module_LoadMain( p_this );
}
-/*****************************************************************************
- * module_ResetBank: reset the module bank.
- *****************************************************************************
- * This function resets the module bank by unloading all unused plugin
- * modules.
- *****************************************************************************/
-void __module_ResetBank( vlc_object_t *p_this )
-{
- msg_Err( p_this, "FIXME: module_ResetBank unimplemented" );
- return;
-}
/*****************************************************************************
* module_EndBank: empty the module bank.
{
module_t * p_next = NULL;
vlc_value_t lockval;
+ libvlc_global_data_t *p_libvlc_global = vlc_global();
- var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
- var_Get( p_this->p_libvlc_global, "libvlc", &lockval );
+ var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
+ var_Get( p_libvlc_global, "libvlc", &lockval );
vlc_mutex_lock( lockval.p_address );
- if( !p_this->p_libvlc_global->p_module_bank )
+ if( !p_libvlc_global->p_module_bank )
{
vlc_mutex_unlock( lockval.p_address );
- var_Destroy( p_this->p_libvlc_global, "libvlc" );
+ var_Destroy( p_libvlc_global, "libvlc" );
return;
}
- if( --p_this->p_libvlc_global->p_module_bank->i_usage )
+ if( --p_libvlc_global->p_module_bank->i_usage )
{
vlc_mutex_unlock( lockval.p_address );
- var_Destroy( p_this->p_libvlc_global, "libvlc" );
+ var_Destroy( p_libvlc_global, "libvlc" );
return;
}
vlc_mutex_unlock( lockval.p_address );
- var_Destroy( p_this->p_libvlc_global, "libvlc" );
+ var_Destroy( p_libvlc_global, "libvlc" );
config_AutoSaveConfigFile( p_this );
#ifdef HAVE_DYNAMIC_PLUGINS
-#define p_bank p_this->p_libvlc_global->p_module_bank
+# define p_bank p_libvlc_global->p_module_bank
if( p_bank->b_cache ) CacheSave( p_this );
while( p_bank->i_loaded_cache-- )
{
if( p_bank->pp_loaded_cache[p_bank->i_loaded_cache] )
{
- DeleteModule( p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->p_module, p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->b_used );
+ DeleteModule( p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->p_module,
+ p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->b_used );
free( p_bank->pp_loaded_cache[p_bank->i_loaded_cache]->psz_file );
free( p_bank->pp_loaded_cache[p_bank->i_loaded_cache] );
p_bank->pp_loaded_cache[p_bank->i_loaded_cache] = NULL;
free( p_bank->pp_cache );
p_bank->pp_cache = NULL;
}
-#undef p_bank
+# undef p_bank
#endif
- vlc_object_detach( p_this->p_libvlc_global->p_module_bank );
+ vlc_object_detach( p_libvlc_global->p_module_bank );
- while( p_this->p_libvlc_global->p_module_bank->i_children )
+ while( p_libvlc_global->p_module_bank->i_children )
{
- p_next = (module_t *)p_this->p_libvlc_global->p_module_bank->pp_children[0];
+ p_next = (module_t *)p_libvlc_global->p_module_bank->pp_children[0];
if( DeleteModule( p_next, VLC_TRUE ) )
{
}
}
- vlc_object_destroy( p_this->p_libvlc_global->p_module_bank );
- p_this->p_libvlc_global->p_module_bank = NULL;
-
- return;
+ vlc_object_destroy( p_libvlc_global->p_module_bank );
+ p_libvlc_global->p_module_bank = NULL;
}
/*****************************************************************************
static void module_LoadMain( vlc_object_t *p_this )
{
vlc_value_t lockval;
+ libvlc_global_data_t *p_libvlc_global = vlc_global();
- var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
- var_Get( p_this->p_libvlc_global, "libvlc", &lockval );
+ var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
+ var_Get( p_libvlc_global, "libvlc", &lockval );
vlc_mutex_lock( lockval.p_address );
- if( p_this->p_libvlc_global->p_module_bank->b_main )
+ if( p_libvlc_global->p_module_bank->b_main )
{
vlc_mutex_unlock( lockval.p_address );
- var_Destroy( p_this->p_libvlc_global, "libvlc" );
+ var_Destroy( p_libvlc_global, "libvlc" );
return;
}
- p_this->p_libvlc_global->p_module_bank->b_main = VLC_TRUE;
+ p_libvlc_global->p_module_bank->b_main = VLC_TRUE;
vlc_mutex_unlock( lockval.p_address );
- var_Destroy( p_this->p_libvlc_global, "libvlc" );
+ var_Destroy( p_libvlc_global, "libvlc" );
AllocateBuiltinModule( p_this, vlc_entry__main );
}
void __module_LoadBuiltins( vlc_object_t * p_this )
{
vlc_value_t lockval;
+ libvlc_global_data_t *p_libvlc_global = vlc_global();
- var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
- var_Get( p_this->p_libvlc_global, "libvlc", &lockval );
+ var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
+ var_Get( p_libvlc_global, "libvlc", &lockval );
vlc_mutex_lock( lockval.p_address );
- if( p_this->p_libvlc_global->p_module_bank->b_builtins )
+ if( p_libvlc_global->p_module_bank->b_builtins )
{
vlc_mutex_unlock( lockval.p_address );
- var_Destroy( p_this->p_libvlc_global, "libvlc" );
+ var_Destroy( p_libvlc_global, "libvlc" );
return;
}
- p_this->p_libvlc_global->p_module_bank->b_builtins = VLC_TRUE;
+ p_libvlc_global->p_module_bank->b_builtins = VLC_TRUE;
vlc_mutex_unlock( lockval.p_address );
- var_Destroy( p_this->p_libvlc_global, "libvlc" );
+ var_Destroy( p_libvlc_global, "libvlc" );
msg_Dbg( p_this, "checking builtin modules" );
ALLOCATE_ALL_BUILTINS();
{
#ifdef HAVE_DYNAMIC_PLUGINS
vlc_value_t lockval;
+ libvlc_global_data_t *p_libvlc_global = vlc_global();
- var_Create( p_this->p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
- var_Get( p_this->p_libvlc_global, "libvlc", &lockval );
+ var_Create( p_libvlc_global, "libvlc", VLC_VAR_MUTEX );
+ var_Get( p_libvlc_global, "libvlc", &lockval );
vlc_mutex_lock( lockval.p_address );
- if( p_this->p_libvlc_global->p_module_bank->b_plugins )
+ if( p_libvlc_global->p_module_bank->b_plugins )
{
vlc_mutex_unlock( lockval.p_address );
- var_Destroy( p_this->p_libvlc_global, "libvlc" );
+ var_Destroy( p_libvlc_global, "libvlc" );
return;
}
- p_this->p_libvlc_global->p_module_bank->b_plugins = VLC_TRUE;
+ p_libvlc_global->p_module_bank->b_plugins = VLC_TRUE;
vlc_mutex_unlock( lockval.p_address );
- var_Destroy( p_this->p_libvlc_global, "libvlc" );
+ var_Destroy( p_libvlc_global, "libvlc" );
msg_Dbg( p_this, "checking plugin modules" );
if( config_GetInt( p_this, "plugins-cache" ) )
- p_this->p_libvlc_global->p_module_bank->b_cache = VLC_TRUE;
+ p_libvlc_global->p_module_bank->b_cache = VLC_TRUE;
- if( p_this->p_libvlc_global->p_module_bank->b_cache ||
- p_this->p_libvlc_global->p_module_bank->b_cache_delete ) CacheLoad( p_this );
+ if( p_libvlc_global->p_module_bank->b_cache ||
+ p_libvlc_global->p_module_bank->b_cache_delete ) CacheLoad( p_this );
AllocateAllPlugins( p_this );
#endif
}
+/*****************************************************************************
+ * module_IsCapable: checks whether a module implements a capability.
+ *****************************************************************************/
+vlc_bool_t module_IsCapable( const module_t *m, const char *cap )
+{
+ return !strcmp( m->psz_capability, cap );
+}
+
+/*****************************************************************************
+ * module_GetObjName: internal name of a module.
+ *****************************************************************************/
+const char *module_GetObjName( const module_t *m )
+{
+ return m->psz_object_name;
+}
+
+/*****************************************************************************
+ * module_GetName: human-friendly name of a module.
+ *****************************************************************************/
+const char *module_GetName( const module_t *m, vlc_bool_t long_name )
+{
+ if( long_name && ( m->psz_longname != NULL) )
+ return m->psz_longname;
+
+ return m->psz_shortname ?: m->psz_object_name;
+}
+
+const char *module_GetHelp( const module_t *m )
+{
+ return m->psz_help;
+}
+
/*****************************************************************************
* module_Need: return the best module function, given a capability list.
*****************************************************************************
p_all = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );
p_list = malloc( p_all->i_count * sizeof( module_list_t ) );
p_first = NULL;
+ unsigned i_cpu = vlc_CPU();
/* Parse the module list for capabilities and probe each of them */
for( i_which_module = 0; i_which_module < p_all->i_count; i_which_module++ )
p_module = (module_t *)p_all->p_values[i_which_module].p_object;
/* Test that this module can do what we need */
- if( strcmp( p_module->psz_capability, psz_capability ) )
+ if( !module_IsCapable( p_module, psz_capability ) )
{
/* Don't recurse through the sub-modules because vlc_list_find()
* will list them anyway. */
}
/* Test if we have the required CPU */
- if( (p_module->i_cpu & p_this->p_libvlc_global->i_cpu) != p_module->i_cpu )
+ if( (p_module->i_cpu & i_cpu) != p_module->i_cpu )
{
continue;
}
}
/*****************************************************************************
- * module_Exists: tell if a module exists.
- *****************************************************************************
- * This function is a boolean function that tells if a module exist or not.
+ * module_FindName: get a pointer to a module_t given it's name.
*****************************************************************************/
-
-vlc_bool_t __module_Exists( vlc_object_t *p_this, const char * psz_name )
+module_t *__module_FindName( vlc_object_t *p_this, const char * psz_name )
{
vlc_list_t *p_list;
int i;
p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );
for( i = 0 ; i < p_list->i_count; i++)
{
- const char *psz_module_name =
- ((module_t *) p_list->p_values[i].p_object)->psz_shortname;
+ module_t *p_module = ((module_t *) p_list->p_values[i].p_object);
+ const char *psz_module_name = p_module->psz_object_name;
if( psz_module_name && !strcmp( psz_module_name, psz_name ) )
{
/* We can release the list, and return yes */
- vlc_list_release( p_list ); return VLC_TRUE;
+ vlc_object_yield( p_module );
+ vlc_list_release( p_list );
+ return p_module;
}
}
- vlc_list_release( p_list ); return VLC_FALSE;
+ vlc_list_release( p_list );
+ return NULL;
+}
+
+/*****************************************************************************
+ * module_Exists: tell if a module exists.
+ *****************************************************************************
+ * This function is a boolean function that tells if a module exist or not.
+ *****************************************************************************/
+vlc_bool_t __module_Exists( vlc_object_t *p_this, const char * psz_name )
+{
+ module_t *p_module = __module_FindName( p_this, psz_name );
+ if( p_module )
+ {
+ vlc_object_release( p_module );
+ return VLC_TRUE;
+ }
+ else
+ {
+ return VLC_FALSE;
+ }
+}
+
+/*****************************************************************************
+ * module_GetModuleNamesForCapability: Return a NULL terminated array with the
+ * names of the modules that have a certain capability.
+ * Free after uses both the string and the table.
+ *****************************************************************************/
+char ** __module_GetModulesNamesForCapability( vlc_object_t *p_this,
+ const char * psz_capability )
+{
+ vlc_list_t *p_list;
+ int i, count = 0;
+ char ** psz_ret;
+
+ /* Do it in two passes */
+ p_list = vlc_list_find( p_this, VLC_OBJECT_MODULE, FIND_ANYWHERE );
+ for( i = 0 ; i < p_list->i_count; i++)
+ {
+ module_t *p_module = ((module_t *) p_list->p_values[i].p_object);
+ const char *psz_module_capability = p_module->psz_capability;
+ if( psz_module_capability && !strcmp( psz_module_capability, psz_capability ) )
+ count++;
+ }
+ psz_ret = malloc( sizeof(char**) * (count+1) );
+ for( i = 0 ; i < p_list->i_count; i++)
+ {
+ module_t *p_module = ((module_t *) p_list->p_values[i].p_object);
+ const char *psz_module_capability = p_module->psz_capability;
+ if( psz_module_capability && !strcmp( psz_module_capability, psz_capability ) )
+ psz_ret[i] = strdup( p_module->psz_object_name );
+ }
+ psz_ret[count] = NULL;
+
+ vlc_list_release( p_list );
+
+ return psz_ret;
}
if( (*ppsz_path)[0] != '/' )
#endif
{
- if( 0>= asprintf(&psz_fullpath, "%s"DIR_SEP"%s",
- p_this->p_libvlc_global->psz_vlcpath, *ppsz_path) )
+ if( 0>= asprintf( &psz_fullpath, "%s"DIR_SEP"%s",
+ vlc_global()->psz_vlcpath, *ppsz_path) )
psz_fullpath = NULL;
}
else
if( p_module )
{
+ libvlc_global_data_t *p_libvlc_global = vlc_global();
+
/* Everything worked fine !
* The module is ready to be added to the list. */
p_module->b_builtin = VLC_FALSE;
/* msg_Dbg( p_this, "plugin \"%s\", %s",
p_module->psz_object_name, p_module->psz_longname ); */
- vlc_object_attach( p_module, p_this->p_libvlc_global->p_module_bank );
+ vlc_object_attach( p_module, p_libvlc_global->p_module_bank );
- if( !p_this->p_libvlc_global->p_module_bank->b_cache )
+ if( !p_libvlc_global->p_module_bank->b_cache )
return 0;
+#define p_bank p_libvlc_global->p_module_bank
/* Add entry to cache */
-#define p_bank p_this->p_libvlc_global->p_module_bank
p_bank->pp_cache =
realloc( p_bank->pp_cache, (p_bank->i_cache + 1) * sizeof(void *) );
p_bank->pp_cache[p_bank->i_cache] = malloc( sizeof(module_cache_t) );
}
free( (void*)p_module->psz_object_name );
- free( (void*)p_module->psz_capability );
+ free( p_module->psz_capability );
free( (void*)p_module->psz_shortname );
free( (void*)p_module->psz_longname );
free( (void*)p_module->psz_help );
/* msg_Dbg( p_this, "builtin \"%s\", %s",
p_module->psz_object_name, p_module->psz_longname ); */
- vlc_object_attach( p_module, p_this->p_libvlc_global->p_module_bank );
+ vlc_object_attach( p_module, vlc_global()->p_module_bank );
return 0;
}
*****************************************************************************/
static void CacheLoad( vlc_object_t *p_this )
{
- char *psz_filename, *psz_homedir;
+ char *psz_filename, *psz_cachedir;
FILE *file;
int i, j, i_size, i_read;
char p_cachestring[sizeof(PLUGINSCACHE_DIR COPYRIGHT_MESSAGE)];
int i_cache;
module_cache_t **pp_cache = 0;
int32_t i_file_size, i_marker;
+ libvlc_global_data_t *p_libvlc_global = vlc_global();
- psz_homedir = p_this->p_libvlc->psz_homedir;
- if( !psz_homedir )
+ psz_cachedir = p_this->p_libvlc->psz_cachedir;
+ if( !psz_cachedir ) /* XXX: this should never happen */
{
- msg_Err( p_this, "psz_homedir is null" );
+ msg_Err( p_this, "Unable to get cache directory" );
return;
}
- i_size = asprintf( &psz_filename, "%s/%s/%s/%s", psz_homedir, CONFIG_DIR,
- PLUGINSCACHE_DIR, CacheName() );
+ i_size = asprintf( &psz_filename, "%s"DIR_SEP"%s"DIR_SEP"%s",
+ psz_cachedir, PLUGINSCACHE_DIR, CacheName() );
if( i_size <= 0 )
{
msg_Err( p_this, "out of memory" );
return;
}
- if( p_this->p_libvlc_global->p_module_bank->b_cache_delete )
+ if( p_libvlc_global->p_module_bank->b_cache_delete )
{
#if !defined( UNDER_CE )
unlink( psz_filename );
return;
}
- p_this->p_libvlc_global->p_module_bank->i_loaded_cache = 0;
+ p_libvlc_global->p_module_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_this->p_libvlc_global->p_module_bank->pp_loaded_cache =
+ pp_cache = p_libvlc_global->p_module_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_this->p_libvlc_global->p_module_bank->i_loaded_cache++;
+ p_libvlc_global->p_module_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_this->p_libvlc_global->p_module_bank->i_loaded_cache = 0;
+ p_libvlc_global->p_module_bank->i_loaded_cache = 0;
fclose( file );
return;
"# For information about cache directory tags, see:\r\n"
"# http://www.brynosaurus.com/cachedir/\r\n";
- char *psz_filename, *psz_homedir;
+ char *psz_filename, *psz_cachedir;
FILE *file;
int i, j, i_cache;
module_cache_t **pp_cache;
int32_t i_file_size = 0;
+ libvlc_global_data_t *p_libvlc_global = vlc_global();
- psz_homedir = p_this->p_libvlc->psz_homedir;
- if( !psz_homedir )
+ psz_cachedir = p_this->p_libvlc->psz_cachedir;
+ if( !psz_cachedir ) /* XXX: this should never happen */
{
- msg_Err( p_this, "psz_homedir is null" );
+ msg_Err( p_this, "Unable to get cache directory" );
return;
}
+
psz_filename =
- (char *)malloc( sizeof("/" CONFIG_DIR "/" PLUGINSCACHE_DIR "/" ) +
- strlen(psz_homedir) + strlen(CacheName()) );
+ (char *)malloc( sizeof(DIR_SEP PLUGINSCACHE_DIR DIR_SEP ) +
+ strlen(psz_cachedir) + strlen(CacheName()) );
if( !psz_filename )
{
return;
}
- sprintf( psz_filename, "%s/%s", psz_homedir, CONFIG_DIR );
+ sprintf( psz_filename, "%s", psz_cachedir );
config_CreateDir( p_this, psz_filename );
- strcat( psz_filename, "/" PLUGINSCACHE_DIR );
+ strcat( psz_filename, DIR_SEP PLUGINSCACHE_DIR );
config_CreateDir( p_this, psz_filename );
- strcat( psz_filename, "/CACHEDIR.TAG" );
+ strcat( psz_filename, DIR_SEP"CACHEDIR.TAG" );
file = utf8_fopen( psz_filename, "wb" );
if( file )
fclose( file );
}
- sprintf( psz_filename, "%s/%s/%s/%s", psz_homedir, CONFIG_DIR,
+ sprintf( psz_filename, "%s"DIR_SEP"%s"DIR_SEP"%s", psz_cachedir,
PLUGINSCACHE_DIR, CacheName() );
msg_Dbg( p_this, "saving plugins cache file %s", psz_filename );
i_file_size = ftell( file );
fwrite( &i_file_size, sizeof(char), sizeof(i_file_size), file );
- i_cache = p_this->p_libvlc_global->p_module_bank->i_cache;
- pp_cache = p_this->p_libvlc_global->p_module_bank->pp_cache;
+ i_cache = p_libvlc_global->p_module_bank->i_cache;
+ pp_cache = p_libvlc_global->p_module_bank->pp_cache;
fwrite( &i_cache, sizeof(char), sizeof(i_cache), file );
p_cache->pf_activate = p_module->pf_activate;
p_cache->pf_deactivate = p_module->pf_deactivate;
-#ifndef HAVE_SHARED_LIBVLC
- p_cache->p_symbols = p_module->p_symbols;
-#endif
p_cache->handle = p_module->handle;
for( i_submodule = 0; i_submodule < p_module->i_children; i_submodule++ )
module_t *p_cchild = (module_t*)p_cache->pp_children[i_submodule];
p_cchild->pf_activate = p_child->pf_activate;
p_cchild->pf_deactivate = p_child->pf_deactivate;
-#ifndef HAVE_SHARED_LIBVLC
- p_cchild->p_symbols = p_child->p_symbols;
-#endif
}
p_cache->b_loaded = VLC_TRUE;
{
module_cache_t **pp_cache;
int i_cache, i;
+ libvlc_global_data_t *p_libvlc_global = vlc_global();
- pp_cache = p_this->p_libvlc_global->p_module_bank->pp_loaded_cache;
- i_cache = p_this->p_libvlc_global->p_module_bank->i_loaded_cache;
+ pp_cache = p_libvlc_global->p_module_bank->pp_loaded_cache;
+ i_cache = p_libvlc_global->p_module_bank->i_loaded_cache;
for( i = 0; i < i_cache; i++ )
{