From a3e70b4e36d7300276ad4263407cd9f5bad2a16d Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sun, 8 Feb 2009 20:06:24 +0200 Subject: [PATCH] Add module_find_by_short() (internal only) --- src/libvlc.h | 1 + src/modules/modules.c | 37 +++++++++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/libvlc.h b/src/libvlc.h index 8d945b606a..650a93cba4 100644 --- a/src/libvlc.h +++ b/src/libvlc.h @@ -146,6 +146,7 @@ extern char *psz_vlcpath; * Free after uses both the string and the table. */ VLC_EXPORT(char **, module_GetModulesNamesForCapability, ( const char * psz_capability, char ***psz_longname ) ); +module_t *module_find_by_shortcut (const char *psz_shortcut); /** * Private LibVLC data for each object. diff --git a/src/modules/modules.c b/src/modules/modules.c index 07ae7dbfac..56cf5e791e 100644 --- a/src/modules/modules.c +++ b/src/modules/modules.c @@ -689,7 +689,6 @@ void __module_unneed( vlc_object_t * p_this, module_t * p_module ) /** * Get a pointer to a module_t given it's name. * - * \param p_this vlc object structure * \param psz_name the name of the module * \return a pointer to the module or NULL in case of a failure */ @@ -718,7 +717,6 @@ module_t *module_find( const char * psz_name ) /** * Tell if a module exists and release it in thic case * - * \param p_this vlc object structure * \param psz_name th name of the module * \return TRUE if the module exists */ @@ -730,6 +728,41 @@ bool module_exists (const char * psz_name) return p_module != NULL; } +/** + * Get a pointer to a module_t that matches a shortcut. + * This is a temporary hack for SD. Do not re-use (generally multiple modules + * can have the same shortcut, so this is *broken* - use module_need()!). + * + * \param psz_shortcut shortcut of the module + * \param psz_cap capability of the module + * \return a pointer to the module or NULL in case of a failure + */ +module_t *module_find_by_shortcut (const char *psz_shortcut) +{ + module_t **list, *module; + + list = module_list_get (NULL); + if (!list) + return NULL; + + 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++) + { + if (!strcmp (module->pp_shortcuts[j], psz_shortcut)) + { + module_hold (module); + goto out; + } + } + } +out: + module_list_free (list); + return module; +} + /** * GetModuleNamesForCapability * -- 2.39.2