Skip to content
Snippets Groups Projects
Commit 06424ebd authored by Joshua Colp's avatar Joshua Colp Committed by Gerrit Code Review
Browse files

Merge "aco: Use ast_cli_completion_add for 'config show help'."

parents 716e2d46 9e335f22
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment