diff options
author | Joshua Colp <jcolp@digium.com> | 2018-03-20 09:36:56 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2018-03-20 09:36:56 -0500 |
commit | 1a2f12e288f61a90dc4e0813cd7e257feeab2d8f (patch) | |
tree | 6a5af81012476c90413f27c23f73348c93a82d7f | |
parent | e3a5874c125bac1e3d566bfe7a914d4b02dcbec1 (diff) | |
parent | 8d01ec572d798ca895afc538c20dc659fc283e39 (diff) |
Merge "manager: Use ast_cli_completion_add for completion generators."
-rw-r--r-- | main/manager.c | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/main/manager.c b/main/manager.c index 64b07d319..577c7f928 100644 --- a/main/manager.c +++ b/main/manager.c @@ -2325,9 +2325,9 @@ static char *handle_showmancmd(struct ast_cli_entry *e, int cmd, struct ast_cli_ { struct manager_action *cur; struct ast_str *authority; - int num, l, which; + int num; + int l; const char *auth_str; - char *ret = NULL; #ifdef AST_XML_DOCS char syntax_title[64], description_title[64], synopsis_title[64], seealso_title[64]; char arguments_title[64], privilege_title[64], final_response_title[64], list_responses_title[64]; @@ -2342,16 +2342,16 @@ static char *handle_showmancmd(struct ast_cli_entry *e, int cmd, struct ast_cli_ return NULL; case CLI_GENERATE: l = strlen(a->word); - which = 0; AST_RWLIST_RDLOCK(&actions); AST_RWLIST_TRAVERSE(&actions, cur, list) { - if (!strncasecmp(a->word, cur->action, l) && ++which > a->n) { - ret = ast_strdup(cur->action); - break; /* make sure we exit even if ast_strdup() returns NULL */ + if (!strncasecmp(a->word, cur->action, l)) { + if (ast_cli_completion_add(ast_strdup(cur->action))) { + break; + } } } AST_RWLIST_UNLOCK(&actions); - return ret; + return NULL; } if (a->argc < 4) { return CLI_SHOWUSAGE; @@ -2481,8 +2481,7 @@ static char *handle_mandebug(struct ast_cli_entry *e, int cmd, struct ast_cli_ar static char *handle_showmanager(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a) { struct ast_manager_user *user = NULL; - int l, which; - char *ret = NULL; + int l; struct ast_str *rauthority = ast_str_alloca(MAX_AUTH_PERM_STRING); struct ast_str *wauthority = ast_str_alloca(MAX_AUTH_PERM_STRING); struct ast_variable *v; @@ -2496,19 +2495,19 @@ static char *handle_showmanager(struct ast_cli_entry *e, int cmd, struct ast_cli return NULL; case CLI_GENERATE: l = strlen(a->word); - which = 0; if (a->pos != 3) { return NULL; } AST_RWLIST_RDLOCK(&users); AST_RWLIST_TRAVERSE(&users, user, list) { - if ( !strncasecmp(a->word, user->username, l) && ++which > a->n ) { - ret = ast_strdup(user->username); - break; + if (!strncasecmp(a->word, user->username, l)) { + if (ast_cli_completion_add(ast_strdup(user->username))) { + break; + } } } AST_RWLIST_UNLOCK(&users); - return ret; + return NULL; } if (a->argc != 4) { @@ -8645,8 +8644,6 @@ static char *handle_manager_show_event(struct ast_cli_entry *e, int cmd, struct struct ao2_iterator it_events; struct ast_xml_doc_item *item, *temp; int length; - int which; - char *match = NULL; if (cmd == CLI_INIT) { e->command = "manager show event"; @@ -8663,19 +8660,24 @@ static char *handle_manager_show_event(struct ast_cli_entry *e, int cmd, struct } if (cmd == CLI_GENERATE) { + if (a->pos != 3) { + return NULL; + } + length = strlen(a->word); - which = 0; it_events = ao2_iterator_init(events, 0); while ((item = ao2_iterator_next(&it_events))) { - if (!strncasecmp(a->word, item->name, length) && ++which > a->n) { - match = ast_strdup(item->name); - ao2_ref(item, -1); - break; + if (!strncasecmp(a->word, item->name, length)) { + if (ast_cli_completion_add(ast_strdup(item->name))) { + ao2_ref(item, -1); + break; + } } ao2_ref(item, -1); } ao2_iterator_destroy(&it_events); - return match; + + return NULL; } if (a->argc != 4) { |