return module;
}
-/**
- * GetModuleNamesForCapability
- *
- * Return a NULL terminated array with the names of the modules
- * that have a certain capability.
- * Free after uses both the string and the table.
- * \param psz_capability the capability asked
- * \param pppsz_longname an pointer to an array of string to contain
- the long names of the modules. If set to NULL the function don't use it.
- * \return the NULL terminated array
- */
-char ** module_GetModulesNamesForCapability( const char *psz_capability,
- char ***pppsz_longname )
-{
- size_t count = 0;
- char **psz_ret;
-
- module_t **list = module_list_get (NULL);
-
- /* Proceed in two passes: count the number of modules first */
- for (size_t i = 0; list[i]; i++)
- {
- module_t *p_module = list[i];
- const char *psz_module_capability = p_module->psz_capability;
-
- if( psz_module_capability
- && !strcmp( psz_module_capability, psz_capability ) )
- count++;
- }
-
- /* Then get the names */
- psz_ret = malloc( sizeof(char*) * (count+1) );
- if( pppsz_longname )
- *pppsz_longname = malloc( sizeof(char*) * (count+1) );
- if( !psz_ret || ( pppsz_longname && *pppsz_longname == NULL ) )
- {
- free( psz_ret );
- if( pppsz_longname )
- {
- free( *pppsz_longname );
- *pppsz_longname = NULL;
- }
- module_list_free (list);
- return NULL;
- }
-
- for (size_t i = 0, j = 0; list[i]; i++)
- {
- module_t *p_module = list[i];
- const char *psz_module_capability = p_module->psz_capability;
-
- if( psz_module_capability
- && !strcmp( psz_module_capability, psz_capability ) )
- {
- /* Explicit hack: Use the last shortcut. It _should_ be
- * different from the object name, at least if the object
- * contains multiple submodules with the same capability. */
- unsigned k = 0;
- while( p_module->pp_shortcuts[k] != NULL )
- k++;
- assert( k > 0); /* pp_shortcuts[0] is always set */
- psz_ret[j] = strdup( p_module->pp_shortcuts[k - 1] );
- if( pppsz_longname )
- (*pppsz_longname)[j] = strdup( module_get_name( p_module, true ) );
- j++;
- }
- }
- psz_ret[count] = NULL;
-
- module_list_free (list);
-
- return psz_ret;
-}
-
/**
* Get the configuration of a module
*