vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Thu Oct 27 19:03:34 2016 +0300| [488c9310319abde68ed387a8fe3bf1f8650102c6] | committer: Rémi Denis-Courmont
module: store callback names rather than address Storing a relocatable pointer in the plugins cache made little sense. In practice, it was only usable for comparison with NULL. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=488c9310319abde68ed387a8fe3bf1f8650102c6 --- include/vlc_configuration.h | 1 + src/modules/bank.c | 4 +--- src/modules/cache.c | 18 +++++++++++------- src/modules/entry.c | 8 +++++--- src/modules/modules.h | 2 ++ 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/include/vlc_configuration.h b/include/vlc_configuration.h index 84499c1..853cf85 100644 --- a/include/vlc_configuration.h +++ b/include/vlc_configuration.h @@ -87,6 +87,7 @@ struct module_config_t vlc_integer_list_cb i_cb; } list; const char **list_text; /* Friendly names for list values */ + const char *list_cb_name; }; /***************************************************************************** diff --git a/src/modules/bank.c b/src/modules/bank.c index 49ab87f..36f3fcf 100644 --- a/src/modules/bank.c +++ b/src/modules/bank.c @@ -207,9 +207,7 @@ static int AllocatePluginFile (module_bank_t *bank, const char *abspath, * Could be optimized by adding an API call.*/ for (size_t i = 0; i < plugin->conf.size; i++) if (!atomic_load_explicit(&plugin->loaded, memory_order_relaxed) - && plugin->conf.items[i].list_count == 0 - && (plugin->conf.items[i].list.psz_cb != NULL - || plugin->conf.items[i].list.i_cb != NULL)) + && plugin->conf.items[i].list_cb_name != NULL) { /* !unloadable not allowed for plugins with callbacks */ vlc_plugin_destroy(plugin); diff --git a/src/modules/cache.c b/src/modules/cache.c index a90fb6a..8a6c77e 100644 --- a/src/modules/cache.c +++ b/src/modules/cache.c @@ -57,7 +57,7 @@ #ifdef HAVE_DYNAMIC_PLUGINS /* Sub-version number * (only used to avoid breakage in dev version when cache structure changes) */ -#define CACHE_SUBVERSION_NUM 31 +#define CACHE_SUBVERSION_NUM 32 /* Cache filename */ #define CACHE_NAME "plugins.dat" @@ -203,8 +203,8 @@ static int vlc_cache_load_config(module_config_t *cfg, block_t *file) if (cfg->list_count) cfg->list.psz = xmalloc (cfg->list_count * sizeof (char *)); - else /* TODO: fix config_GetPszChoices() instead of this hack: */ - LOAD_IMMEDIATE(cfg->list.psz_cb); + else + LOAD_STRING(cfg->list_cb_name); for (unsigned i = 0; i < cfg->list_count; i++) { LOAD_STRING (cfg->list.psz[i]); @@ -224,8 +224,8 @@ static int vlc_cache_load_config(module_config_t *cfg, block_t *file) { LOAD_ALIGNOF(*cfg->list.i); } - else /* TODO: fix config_GetPszChoices() instead of this hack: */ - LOAD_IMMEDIATE(cfg->list.i_cb); + else + LOAD_IMMEDIATE(cfg->list_cb_name); LOAD_ARRAY(cfg->list.i, cfg->list_count); } @@ -304,6 +304,8 @@ static int vlc_cache_load_module(module_t *module, block_t *file) LOAD_STRING(module->pp_shortcuts[j]); } + LOAD_STRING(module->activate_name); + LOAD_STRING(module->deactivate_name); LOAD_STRING(module->psz_capability); LOAD_IMMEDIATE(module->i_score); return 0; @@ -531,7 +533,7 @@ static int CacheSaveConfig (FILE *file, const module_config_t *cfg) { SAVE_STRING (cfg->orig.psz); if (cfg->list_count == 0) - SAVE_IMMEDIATE (cfg->list.psz_cb); /* XXX: see CacheLoadConfig() */ + SAVE_STRING(cfg->list_cb_name); for (unsigned i = 0; i < cfg->list_count; i++) SAVE_STRING (cfg->list.psz[i]); @@ -547,7 +549,7 @@ static int CacheSaveConfig (FILE *file, const module_config_t *cfg) SAVE_ALIGNOF(*cfg->list.i); } else - SAVE_IMMEDIATE (cfg->list.i_cb); /* XXX: see CacheLoadConfig() */ + SAVE_IMMEDIATE (cfg->list_cb_name); for (unsigned i = 0; i < cfg->list_count; i++) SAVE_IMMEDIATE (cfg->list.i[i]); @@ -585,6 +587,8 @@ static int CacheSaveModule(FILE *file, const module_t *module) for (size_t j = 0; j < module->i_shortcuts; j++) SAVE_STRING(module->pp_shortcuts[j]); + SAVE_STRING(module->activate_name); + SAVE_STRING(module->deactivate_name); SAVE_STRING(module->psz_capability); SAVE_IMMEDIATE(module->i_score); return 0; diff --git a/src/modules/entry.c b/src/modules/entry.c index db50668..4166b0c 100644 --- a/src/modules/entry.c +++ b/src/modules/entry.c @@ -63,6 +63,8 @@ module_t *vlc_module_create(vlc_plugin_t *plugin) module->i_shortcuts = 0; module->psz_capability = NULL; module->i_score = (parent != NULL) ? parent->i_score : 1; + module->activate_name = NULL; + module->deactivate_name = NULL; module->pf_activate = NULL; module->pf_deactivate = NULL; return module; @@ -252,12 +254,12 @@ static int vlc_plugin_setter(void *ctx, void *tgt, int propid, ...) break; case VLC_MODULE_CB_OPEN: - va_arg(ap, const char *); + module->activate_name = va_arg(ap, const char *); module->pf_activate = va_arg (ap, void *); break; case VLC_MODULE_CB_CLOSE: - va_arg(ap, const char *); + module->deactivate_name = va_arg(ap, const char *); module->pf_deactivate = va_arg (ap, void *); break; @@ -420,7 +422,7 @@ static int vlc_plugin_setter(void *ctx, void *tgt, int propid, ...) { void *cb; - va_arg(ap, const char *); + item->list_cb_name = va_arg(ap, const char *); cb = va_arg(ap, void *); if (IsConfigIntegerType (item->i_type)) diff --git a/src/modules/modules.h b/src/modules/modules.h index 387ab62..9bd717e 100644 --- a/src/modules/modules.h +++ b/src/modules/modules.h @@ -97,6 +97,8 @@ struct module_t int i_score; /**< Score for the capability */ /* Callbacks */ + const char *activate_name; + const char *deactivate_name; void *pf_activate; void *pf_deactivate; }; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
