]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
aco: Use ast_cli_completion_add for 'config show help'.
authorCorey Farrell <git@cfware.com>
Sat, 17 Mar 2018 05:51:47 +0000 (01:51 -0400)
committerCorey Farrell <git@cfware.com>
Mon, 19 Mar 2018 00:28:58 +0000 (18:28 -0600)
In addition this removes:
* RAII_VAR usage
* Duplicate check of pos
* Unneeded arguments.

Change-Id: I2da8eac2670d1d8d6474c04037129804f55ebf39

main/config_options.c

index 3ac5590ec086bf35892feac26a8cf2cf3441518f..c78f95dafe3702c1f93aec12986c848e4b739de6 100644 (file)
@@ -960,88 +960,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
@@ -1342,10 +1333,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;
                }
        }