mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 20:04:50 +00:00
Merge "aco: Use ast_cli_completion_add for 'config show help'."
This commit is contained in:
@@ -958,88 +958,79 @@ int aco_set_defaults(struct aco_type *type, const char *category, void *obj)
|
||||
/*! \internal
|
||||
* \brief Complete the name of the module the user is looking for
|
||||
*/
|
||||
static char *complete_config_module(const char *word, int pos, int state)
|
||||
static char *complete_config_module(const char *word)
|
||||
{
|
||||
char *c = NULL;
|
||||
size_t wordlen = strlen(word);
|
||||
int which = 0;
|
||||
struct ao2_iterator i;
|
||||
struct ast_xml_doc_item *cur;
|
||||
|
||||
if (pos != 3) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
i = ao2_iterator_init(xmldocs, 0);
|
||||
while ((cur = ao2_iterator_next(&i))) {
|
||||
if (!strncasecmp(word, cur->name, wordlen) && ++which > state) {
|
||||
c = ast_strdup(cur->name);
|
||||
ao2_ref(cur, -1);
|
||||
break;
|
||||
if (!strncasecmp(word, cur->name, wordlen)) {
|
||||
if (ast_cli_completion_add(ast_strdup(cur->name))) {
|
||||
ao2_ref(cur, -1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
ao2_ref(cur, -1);
|
||||
}
|
||||
ao2_iterator_destroy(&i);
|
||||
|
||||
return c;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*! \internal
|
||||
* \brief Complete the name of the configuration type the user is looking for
|
||||
*/
|
||||
static char *complete_config_type(const char *module, const char *word, int pos, int state)
|
||||
static char *complete_config_type(const char *module, const char *word)
|
||||
{
|
||||
char *c = NULL;
|
||||
size_t wordlen = strlen(word);
|
||||
int which = 0;
|
||||
RAII_VAR(struct ast_xml_doc_item *, info, NULL, ao2_cleanup);
|
||||
struct ast_xml_doc_item *info;
|
||||
struct ast_xml_doc_item *cur;
|
||||
|
||||
if (pos != 4) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!(info = ao2_find(xmldocs, module, OBJ_KEY))) {
|
||||
info = ao2_find(xmldocs, module, OBJ_KEY);
|
||||
if (!info) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cur = info;
|
||||
while ((cur = AST_LIST_NEXT(cur, next))) {
|
||||
if (!strcasecmp(cur->type, "configObject") && !strncasecmp(word, cur->name, wordlen) && ++which > state) {
|
||||
c = ast_strdup(cur->name);
|
||||
break;
|
||||
if (!strcasecmp(cur->type, "configObject") && !strncasecmp(word, cur->name, wordlen)) {
|
||||
if (ast_cli_completion_add(ast_strdup(cur->name))) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return c;
|
||||
ao2_ref(info, -1);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*! \internal
|
||||
* \brief Complete the name of the configuration option the user is looking for
|
||||
*/
|
||||
static char *complete_config_option(const char *module, const char *option, const char *word, int pos, int state)
|
||||
static char *complete_config_option(const char *module, const char *option, const char *word)
|
||||
{
|
||||
char *c = NULL;
|
||||
size_t wordlen = strlen(word);
|
||||
int which = 0;
|
||||
RAII_VAR(struct ast_xml_doc_item *, info, NULL, ao2_cleanup);
|
||||
struct ast_xml_doc_item *info;
|
||||
struct ast_xml_doc_item *cur;
|
||||
|
||||
if (pos != 5) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!(info = ao2_find(xmldocs, module, OBJ_KEY))) {
|
||||
info = ao2_find(xmldocs, module, OBJ_KEY);
|
||||
if (!info) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cur = info;
|
||||
while ((cur = AST_LIST_NEXT(cur, next))) {
|
||||
if (!strcasecmp(cur->type, "configOption") && !strcasecmp(cur->ref, option) && !strncasecmp(word, cur->name, wordlen) && ++which > state) {
|
||||
c = ast_strdup(cur->name);
|
||||
break;
|
||||
if (!strcasecmp(cur->type, "configOption") && !strcasecmp(cur->ref, option) && !strncasecmp(word, cur->name, wordlen)) {
|
||||
if (ast_cli_completion_add(ast_strdup(cur->name))) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return c;
|
||||
ao2_ref(info, -1);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Define as 0 if we want to allow configurations to be registered without
|
||||
@@ -1340,10 +1331,14 @@ static char *cli_show_help(struct ast_cli_entry *e, int cmd, struct ast_cli_args
|
||||
return NULL;
|
||||
case CLI_GENERATE:
|
||||
switch(a->pos) {
|
||||
case 3: return complete_config_module(a->word, a->pos, a->n);
|
||||
case 4: return complete_config_type(a->argv[3], a->word, a->pos, a->n);
|
||||
case 5: return complete_config_option(a->argv[3], a->argv[4], a->word, a->pos, a->n);
|
||||
default: return NULL;
|
||||
case 3:
|
||||
return complete_config_module(a->word);
|
||||
case 4:
|
||||
return complete_config_type(a->argv[3], a->word);
|
||||
case 5:
|
||||
return complete_config_option(a->argv[3], a->argv[4], a->word);
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user