summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2018-03-20 08:31:49 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2018-03-20 08:31:49 -0500
commit06424ebde188886e2315fbc7a7f4e9a7cd36173a (patch)
tree59b161ab60f048a0fef02a9459b7c67831498a52
parent716e2d46e7b8c4cd6787a51e8591cfb977ffbe7c (diff)
parent9e335f22e747da69e31d58627c8722a7715cbd5f (diff)
Merge "aco: Use ast_cli_completion_add for 'config show help'."
-rw-r--r--main/config_options.c79
1 files changed, 37 insertions, 42 deletions
diff --git a/main/config_options.c b/main/config_options.c
index 3aa00f921..41c8b222c 100644
--- a/main/config_options.c
+++ b/main/config_options.c
@@ -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;
}
}