Commit 673f8026 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

module_GetModulesNamesByCapability: (partially) fix submodules handling

parent e163db1b
...@@ -765,16 +765,18 @@ char ** module_GetModulesNamesForCapability( const char *psz_capability, ...@@ -765,16 +765,18 @@ char ** module_GetModulesNamesForCapability( const char *psz_capability,
module_t **list = module_list_get (NULL); module_t **list = module_list_get (NULL);
/* Do it in two passes : count the number of modules before */ /* Proceed in two passes: count the number of modules first */
for (size_t i = 0; list[i]; i++) for (size_t i = 0; list[i]; i++)
{ {
module_t *p_module = list[i]; module_t *p_module = list[i];
const char *psz_module_capability = p_module->psz_capability; const char *psz_module_capability = p_module->psz_capability;
if( psz_module_capability && !strcmp( psz_module_capability, psz_capability ) ) if( psz_module_capability
&& !strcmp( psz_module_capability, psz_capability ) )
count++; count++;
} }
/* Then get the names */
psz_ret = malloc( sizeof(char*) * (count+1) ); psz_ret = malloc( sizeof(char*) * (count+1) );
if( pppsz_longname ) if( pppsz_longname )
*pppsz_longname = malloc( sizeof(char*) * (count+1) ); *pppsz_longname = malloc( sizeof(char*) * (count+1) );
...@@ -795,16 +797,17 @@ char ** module_GetModulesNamesForCapability( const char *psz_capability, ...@@ -795,16 +797,17 @@ char ** module_GetModulesNamesForCapability( const char *psz_capability,
module_t *p_module = list[i]; module_t *p_module = list[i];
const char *psz_module_capability = p_module->psz_capability; const char *psz_module_capability = p_module->psz_capability;
if( psz_module_capability && !strcmp( psz_module_capability, psz_capability ) ) if( psz_module_capability
{ && !strcmp( psz_module_capability, psz_capability ) )
int k = -1; /* hack to handle submodules properly */ {
if( p_module->b_submodule ) /* Explicit hack: Use the last shortcut. It _should_ be
{ * different from the object name, at least if the object
while( p_module->pp_shortcuts[++k] != NULL ); * contains multiple submodules with the same capability. */
k--; unsigned k = 0;
} while( p_module->pp_shortcuts[k] != NULL )
psz_ret[j] = strdup( k>=0?p_module->pp_shortcuts[k] k++;
:p_module->psz_object_name ); assert( k > 0); /* pp_shortcuts[0] is always set */
psz_ret[j] = strdup( p_module->pp_shortcuts[k - 1] );
if( pppsz_longname ) if( pppsz_longname )
(*pppsz_longname)[j] = strdup( module_get_name( p_module, true ) ); (*pppsz_longname)[j] = strdup( module_get_name( p_module, true ) );
j++; j++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment