#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_memory.h>
+#include <vlc_modules.h>
#include "libvlc.h"
#include <stdlib.h> /* free(), strtol() */
#include <string.h> /* strdup() */
#include <assert.h>
-#ifdef HAVE_DIRENT_H
-# include <dirent.h>
-#endif
-
#include <sys/types.h>
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
{
#ifdef ENABLE_NLS
const char *domain = m->domain ? m->domain : PACKAGE_NAME;
+ if (unlikely(str == NULL || *str == '\0'))
+ return "";
return dgettext (domain, str);
#else
(void)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()
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, '@' ) )
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! */
*/
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 );
}
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))
{
{
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;
/* Contruct the special search path for system that have a relocatable
* executable. Set it to <vlc path>/plugins. */
assert( vlcpath );
-#ifndef WIN32
+
if( asprintf( &path, "%s" DIR_SEP "plugins", vlcpath ) != -1 )
vlc_array_append( arraypaths, path );
-#else
- /* Store the plugins cache in the common AppData folder */
- char commonpath[PATH_MAX] = "";
- int res = snprintf( commonpath, PATH_MAX -1, "%s\\VideoLAN\\VLC", config_GetConfDir());
- if(res == -1 || res >= PATH_MAX)
- {
- vlc_array_destroy( arraypaths );
- return;
- }
-#endif
/* If the user provided a plugin path, we add it to the list */
char *userpaths = var_InheritString( p_this, "plugin-path" );
size_t offset = p_module_bank->i_cache;
if( b_reset )
-#ifndef WIN32
CacheDelete( p_this, path );
-#else
- CacheDelete( p_this, commonpath );
-#endif
else
-#ifndef WIN32
CacheLoad( p_this, p_module_bank, path );
-#else
- CacheLoad( p_this, p_module_bank, commonpath );
-#endif
msg_Dbg( p_this, "recursively browsing `%s'", path );
AllocatePluginDir( p_this, p_bank, path, 5 );
-#ifndef WIN32
CacheSave( p_this, path, p_module_bank->pp_cache + offset,
p_module_bank->i_cache - offset );
-#else
- CacheSave( p_this, commonpath, p_module_bank->pp_cache + offset,
- p_module_bank->i_cache - offset );
-#endif
free( path );
}
*****************************************************************************/
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. */
*****************************************************************************/
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 );