X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmodules%2Fmodules.c;h=f6f0e750dfe029b80eb08f9887de5a49d824058a;hb=cabb37428b3ab8449392d559688d4353985c39f2;hp=5664521488d60295624344820925cc9a94401797;hpb=d601e4ed290edf58e9ace5c28f06c77ebf072004;p=vlc diff --git a/src/modules/modules.c b/src/modules/modules.c index 5664521488..f6f0e750df 100644 --- a/src/modules/modules.c +++ b/src/modules/modules.c @@ -31,6 +31,7 @@ #include #include #include +#include #include "libvlc.h" #include /* free(), strtol() */ @@ -38,10 +39,6 @@ #include /* strdup() */ #include -#ifdef HAVE_DIRENT_H -# include -#endif - #include #ifdef HAVE_SYS_STAT_H # include @@ -322,6 +319,19 @@ void module_release (module_t *m) vlc_release (&m->vlc_gc_data); } +#undef module_start +int module_start (vlc_object_t *obj, module_t *m) +{ + return m->pf_activate ? (m->pf_activate (obj)) : VLC_SUCCESS; +} + +#undef module_stop +void module_stop (vlc_object_t *obj, module_t *m) +{ + if (m->pf_deactivate) + m->pf_deactivate (obj); +} + /** * Frees the flat list of VLC modules. * @param list list obtained by module_list_get() @@ -481,7 +491,7 @@ module_t * module_need( vlc_object_t *p_this, const char *psz_capability, for( unsigned i_short = i_shortcuts; i_short > 0; i_short-- ) { - for( unsigned i = 0; p_module->pp_shortcuts[i]; i++ ) + for( unsigned i = 0; i < p_module->i_shortcuts; i++ ) { char *c; if( ( c = strchr( name, '@' ) ) @@ -554,10 +564,7 @@ found_shortcut: p_this->b_force = p_list[i].b_force; - int ret = VLC_SUCCESS; - if( p_cand->pf_activate ) - ret = p_cand->pf_activate( p_this ); - switch( ret ) + switch( module_start( p_this, p_cand ) ) { case VLC_SUCCESS: /* good module! */ @@ -590,30 +597,11 @@ found_shortcut: : p_module->psz_object_name ); } else if( count == 0 ) - { - if( !strcmp( psz_capability, "access_demux" ) - || !strcmp( psz_capability, "stream_filter" ) - || !strcmp( psz_capability, "vout_window" ) ) - { - msg_Dbg( p_this, "no %s module matched \"%s\"", - psz_capability, (psz_name && *psz_name) ? psz_name : "any" ); - } - else - { - msg_Err( p_this, "no %s module matched \"%s\"", + msg_Dbg( p_this, "no %s module matched \"%s\"", psz_capability, (psz_name && *psz_name) ? psz_name : "any" ); - - msg_StackSet( VLC_EGENERIC, "no %s module matched \"%s\"", - psz_capability, (psz_name && *psz_name) ? psz_name : "any" ); - } - } - else if( psz_name != NULL && *psz_name ) - { - msg_Warn( p_this, "no %s module matching \"%s\" could be loaded", - psz_capability, (psz_name && *psz_name) ? psz_name : "any" ); - } else - msg_StackSet( VLC_EGENERIC, "no suitable %s module", psz_capability ); + msg_Dbg( p_this, "no %s module matching \"%s\" could be loaded", + psz_capability, (psz_name && *psz_name) ? psz_name : "any" ); free( psz_shortcuts ); free( psz_var ); @@ -638,14 +626,8 @@ found_shortcut: */ void module_unneed( vlc_object_t * p_this, module_t * p_module ) { - /* Use the close method */ - if( p_module->pf_deactivate ) - { - p_module->pf_deactivate( p_this ); - } - msg_Dbg( p_this, "removing module \"%s\"", p_module->psz_object_name ); - + module_stop( p_this, p_module ); module_release( p_module ); } @@ -710,9 +692,7 @@ module_t *module_find_by_shortcut (const char *psz_shortcut) for (size_t i = 0; (module = list[i]) != NULL; i++) { - for (size_t j = 0; - (module->pp_shortcuts[j] != NULL) && (j < MODULE_SHORTCUT_MAX); - j++) + for (size_t j = 0; j < module->i_shortcuts; j++) { if (!strcmp (module->pp_shortcuts[j], psz_shortcut)) { @@ -749,7 +729,6 @@ module_config_t *module_config_get( const module_t *module, unsigned *restrict p { const module_config_t *item = module->p_config + i; if( item->b_internal /* internal option */ - || item->b_unsaveable /* non-modifiable option */ || item->b_removed /* removed option */ ) continue; @@ -838,15 +817,11 @@ static void AllocateAllPlugins( vlc_object_t *p_this, module_bank_t *p_bank ) 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 /modules and /plugins. */ + * executable. Set it to /plugins. */ + assert( vlcpath ); - if( vlcpath && asprintf( &path, "%s" DIR_SEP "modules", vlcpath ) != -1 ) + if( asprintf( &path, "%s" DIR_SEP "plugins", vlcpath ) != -1 ) vlc_array_append( arraypaths, path ); - if( vlcpath && asprintf( &path, "%s" DIR_SEP "plugins", vlcpath ) != -1 ) - vlc_array_append( arraypaths, path ); -#ifndef WIN32 - vlc_array_append( arraypaths, strdup( PLUGIN_PATH ) ); -#endif /* If the user provided a plugin path, we add it to the list */ char *userpaths = var_InheritString( p_this, "plugin-path" ); @@ -866,7 +841,7 @@ static void AllocateAllPlugins( vlc_object_t *p_this, module_bank_t *p_bank ) if( !path ) continue; - size_t offset = p_module_bank->i_loaded_cache; + size_t offset = p_module_bank->i_cache; if( b_reset ) CacheDelete( p_this, path ); else @@ -877,8 +852,9 @@ static void AllocateAllPlugins( vlc_object_t *p_this, module_bank_t *p_bank ) /* Don't go deeper than 5 subdirectories */ AllocatePluginDir( p_this, p_bank, path, 5 ); - CacheSave( p_this, path, p_module_bank->pp_loaded_cache + offset, - p_module_bank->i_loaded_cache - offset ); + + CacheSave( p_this, path, p_module_bank->pp_cache + offset, + p_module_bank->i_cache - offset ); free( path ); } @@ -895,14 +871,14 @@ static void AllocatePluginDir( vlc_object_t *p_this, module_bank_t *p_bank, if( i_maxdepth == 0 ) return; - DIR *dh = utf8_opendir (psz_dir); + DIR *dh = vlc_opendir (psz_dir); if (dh == NULL) return; /* Parse the directory and try to load all files it contains. */ for (;;) { - char *file = utf8_readdir (dh), *path; + char *file = vlc_readdir (dh), *path; struct stat st; if (file == NULL) @@ -919,7 +895,7 @@ static void AllocatePluginDir( vlc_object_t *p_this, module_bank_t *p_bank, const int pathlen = asprintf (&path, "%s"DIR_SEP"%s", psz_dir, file); free (file); - if (pathlen == -1 || utf8_stat (path, &st)) + if (pathlen == -1 || vlc_stat (path, &st)) continue; if (S_ISDIR (st.st_mode)) @@ -1077,12 +1053,9 @@ static module_t * AllocatePlugin( vlc_object_t * p_this, const char *psz_file ) *****************************************************************************/ static void DupModule( module_t *p_module ) { - char **pp_shortcut; - - for( pp_shortcut = p_module->pp_shortcuts ; *pp_shortcut ; pp_shortcut++ ) - { - *pp_shortcut = strdup( *pp_shortcut ); - } + char **pp_shortcuts = p_module->pp_shortcuts; + for( unsigned i = 0; i < p_module->i_shortcuts; i++ ) + pp_shortcuts[i] = strdup( p_module->pp_shortcuts[i] ); /* We strdup() these entries so that they are still valid when the * module is unloaded. */ @@ -1105,15 +1078,13 @@ static void DupModule( module_t *p_module ) *****************************************************************************/ static void UndupModule( module_t *p_module ) { - char **pp_shortcut; + char **pp_shortcuts = p_module->pp_shortcuts; for (module_t *subm = p_module->submodule; subm; subm = subm->next) UndupModule (subm); - for( pp_shortcut = p_module->pp_shortcuts ; *pp_shortcut ; pp_shortcut++ ) - { - free( *pp_shortcut ); - } + for( unsigned i = 0; i < p_module->i_shortcuts; i++ ) + free( pp_shortcuts[i] ); free( p_module->psz_capability ); FREENULL( p_module->psz_shortname );