X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmodules%2Fmodules.c;h=9ff601b3a6aa5916a564b14758292fdc99d412df;hb=90aa6fc5e9e425c6eb6f519224f2b7e868911d36;hp=733f9a6847dd6fe4905e21e65d9e2afc05828b3e;hpb=1eea47cd41875604da84a414e17511920f88a40d;p=vlc diff --git a/src/modules/modules.c b/src/modules/modules.c index 733f9a6847..9ff601b3a6 100644 --- a/src/modules/modules.c +++ b/src/modules/modules.c @@ -28,7 +28,7 @@ # include "config.h" #endif -#include +#include #include #include "libvlc.h" @@ -214,9 +214,9 @@ void __module_EndBank( vlc_object_t *p_this ) vlc_object_detach( p_libvlc_global->p_module_bank ); - while( p_libvlc_global->p_module_bank->i_children ) + while( vlc_internals( p_libvlc_global->p_module_bank )->i_children ) { - p_next = (module_t *)p_libvlc_global->p_module_bank->pp_children[0]; + p_next = (module_t *)vlc_internals( p_libvlc_global->p_module_bank )->pp_children[0]; DeleteModule( p_next, true ); } @@ -371,11 +371,7 @@ module_t * __module_Need( vlc_object_t *p_this, const char *psz_capability, /* Deal with variables */ if( psz_name && psz_name[0] == '$' ) { - vlc_value_t val; - var_Create( p_this, psz_name + 1, VLC_VAR_MODULE | VLC_VAR_DOINHERIT ); - var_Get( p_this, psz_name + 1, &val ); - psz_var = val.psz_string; - psz_name = psz_var; + psz_name = psz_var = var_CreateGetString( p_this, psz_name + 1 ); } /* Count how many different shortcuts were asked for */ @@ -874,14 +870,21 @@ static char * copy_next_paths_token( char * paths, char ** remaining_paths ) if( !path ) return NULL; /* Look for PATH_SEP_CHAR (a ':' or a ';') */ - for( i = 0, done = 0 ; paths[i]; i++ ) { + for( i = 0, done = 0 ; paths[i]; i++ ) + { /* Take care of \\ and \: or \; escapement */ - if( escaped ) { + if( escaped ) + { escaped = false; path[done++] = paths[i]; } +#ifdef WIN32 + else if( paths[i] == '/' ) + escaped = true; +#else else if( paths[i] == '\\' ) escaped = true; +#endif else if( paths[i] == PATH_SEP_CHAR ) break; else @@ -903,48 +906,31 @@ static char * copy_next_paths_token( char * paths, char ** remaining_paths ) #ifdef HAVE_DYNAMIC_PLUGINS static void AllocateAllPlugins( vlc_object_t *p_this ) { + const char *vlcpath = vlc_global()->psz_vlcpath; int count,i; char * path; vlc_array_t *arraypaths = vlc_array_new(); /* Contruct the special search path for system that have a relocatable * executable. Set it to /modules and /plugins. */ -#define RETURN_ENOMEM \ - { \ - msg_Err( p_this, "Not enough memory" ); \ - return; \ - } - vlc_array_append( arraypaths, strdup( "modules" ) ); -#if defined( WIN32 ) || defined( UNDER_CE ) || defined( __APPLE__ ) || defined( SYS_BEOS ) - if( asprintf( &path, "%s" DIR_SEP "modules", - vlc_global()->psz_vlcpath ) < 0 ) - RETURN_ENOMEM - vlc_array_append( arraypaths, path ); - if( asprintf( &path, "%s" DIR_SEP "plugins", - vlc_global()->psz_vlcpath ) < 0 ) - RETURN_ENOMEM - vlc_array_append( arraypaths, path ); -#if ! defined( WIN32 ) && ! defined( UNDER_CE ) - if( asprintf( &path, "%s", PLUGIN_PATH ) < 0 ) - RETURN_ENOMEM - vlc_array_append( arraypaths, path ); -#endif -#else + if( vlcpath && asprintf( &path, "%s" DIR_SEP "modules", 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 - vlc_array_append( arraypaths, strdup( "plugins" ) ); /* If the user provided a plugin path, we add it to the list */ - char * userpaths = config_GetPsz( p_this, "plugin-path" ); + char *userpaths = config_GetPsz( p_this, "plugin-path" ); char *paths_iter; for( paths_iter = userpaths; paths_iter; ) { path = copy_next_paths_token( paths_iter, &paths_iter ); - if( !path ) - RETURN_ENOMEM - vlc_array_append( arraypaths, strdup( path ) ); + if( path ) + vlc_array_append( arraypaths, path ); } count = vlc_array_count( arraypaths ); @@ -952,9 +938,7 @@ static void AllocateAllPlugins( vlc_object_t *p_this ) { path = vlc_array_item_at_index( arraypaths, i ); if( !path ) - { continue; - } msg_Dbg( p_this, "recursively browsing `%s'", path ); @@ -965,7 +949,7 @@ static void AllocateAllPlugins( vlc_object_t *p_this ) } vlc_array_destroy( arraypaths ); -#undef RETURN_ENOMEM + free( userpaths ); } /***************************************************************************** @@ -1232,6 +1216,7 @@ static int AllocatePluginFile( vlc_object_t * p_this, char * psz_file, p_bank->pp_cache[p_bank->i_cache]->b_used = true; p_bank->pp_cache[p_bank->i_cache]->p_module = p_module; p_bank->i_cache++; +#undef p_bank } return p_module ? 0 : -1; @@ -1257,7 +1242,6 @@ static module_t * AllocatePlugin( vlc_object_t * p_this, char * psz_file ) p_module = vlc_module_create( p_this ); if( p_module == NULL ) { - msg_Err( p_this, "out of memory" ); module_Unload( handle ); return NULL; } @@ -1310,9 +1294,9 @@ static void DupModule( module_t *p_module ) p_module->psz_help = p_module->psz_help ? strdup( p_module->psz_help ) : NULL; - for( i_submodule = 0; i_submodule < p_module->i_children; i_submodule++ ) + for( i_submodule = 0; i_submodule < vlc_internals( p_module )->i_children; i_submodule++ ) { - DupModule( (module_t*)p_module->pp_children[ i_submodule ] ); + DupModule( (module_t*)vlc_internals( p_module )->pp_children[ i_submodule ] ); } } @@ -1326,9 +1310,9 @@ static void UndupModule( module_t *p_module ) char **pp_shortcut; int i_submodule; - for( i_submodule = 0; i_submodule < p_module->i_children; i_submodule++ ) + for( i_submodule = 0; i_submodule < vlc_internals( p_module )->i_children; i_submodule++ ) { - UndupModule( (module_t*)p_module->pp_children[ i_submodule ] ); + UndupModule( (module_t*)vlc_internals( p_module )->pp_children[ i_submodule ] ); } for( pp_shortcut = p_module->pp_shortcuts ; *pp_shortcut ; pp_shortcut++ ) @@ -1361,10 +1345,7 @@ static int AllocateBuiltinModule( vlc_object_t * p_this, * allocate a structure for it */ p_module = vlc_module_create( p_this ); if( p_module == NULL ) - { - msg_Err( p_this, "out of memory" ); return -1; - } /* Initialize the module : fill p_module->psz_object_name, etc. */ if( pf_entry( p_module ) != 0 ) @@ -1413,9 +1394,9 @@ static void DeleteModule( module_t * p_module, bool b_detach ) #endif /* Free and detach the object's children */ - while( p_module->i_children ) + while( vlc_internals( p_module )->i_children ) { - vlc_object_t *p_this = p_module->pp_children[0]; + vlc_object_t *p_this = vlc_internals( p_module )->pp_children[0]; vlc_object_detach( p_this ); vlc_object_release( p_this ); }