CLI: Remove calls to ast_cli_generator.
The ability to add to localized storage cannot be supported by ast_cli_generator. The only calls to ast_cli_generator should be by functions that need to proxy the CLI generator, for example 'cli check permissions' or 'core show help'. * ast_cli_generatornummatches now retrieves the vector of matches and reports the number of elements (not including 'best' match). * test_substitution retrieves and iterates the vector. Change-Id: I8cd6b93905363cf7a33a2d2b0e2a8f8446d9f248
This commit is contained in:
parent
3abf8dfeae
commit
a02cbc2ef3
|
@ -287,6 +287,9 @@ int ast_cli_unregister_multiple(struct ast_cli_entry *e, int len);
|
||||||
* Useful for readline, that's about it
|
* Useful for readline, that's about it
|
||||||
* \retval 0 on success
|
* \retval 0 on success
|
||||||
* \retval -1 on failure
|
* \retval -1 on failure
|
||||||
|
*
|
||||||
|
* Only call this function to proxy the CLI generator to
|
||||||
|
* another.
|
||||||
*/
|
*/
|
||||||
char *ast_cli_generator(const char *, const char *, int);
|
char *ast_cli_generator(const char *, const char *, int);
|
||||||
|
|
||||||
|
|
19
main/cli.c
19
main/cli.c
|
@ -2475,18 +2475,17 @@ static char *parse_args(const char *s, int *argc, const char *argv[], int max, i
|
||||||
/*! \brief Return the number of unique matches for the generator */
|
/*! \brief Return the number of unique matches for the generator */
|
||||||
int ast_cli_generatornummatches(const char *text, const char *word)
|
int ast_cli_generatornummatches(const char *text, const char *word)
|
||||||
{
|
{
|
||||||
int matches = 0, i = 0;
|
int matches;
|
||||||
char *buf = NULL, *oldbuf = NULL;
|
struct ast_vector_string *vec = ast_cli_completion_vector(text, word);
|
||||||
|
|
||||||
while ((buf = ast_cli_generator(text, word, i++))) {
|
if (!vec) {
|
||||||
if (!oldbuf || strcmp(buf,oldbuf))
|
return 0;
|
||||||
matches++;
|
|
||||||
if (oldbuf)
|
|
||||||
ast_free(oldbuf);
|
|
||||||
oldbuf = buf;
|
|
||||||
}
|
}
|
||||||
if (oldbuf)
|
|
||||||
ast_free(oldbuf);
|
matches = AST_VECTOR_SIZE(vec) - 1;
|
||||||
|
AST_VECTOR_CALLBACK_VOID(vec, ast_free);
|
||||||
|
AST_VECTOR_PTR_FREE(vec);
|
||||||
|
|
||||||
return matches;
|
return matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
#include "asterisk/stringfields.h"
|
#include "asterisk/stringfields.h"
|
||||||
#include "asterisk/threadstorage.h"
|
#include "asterisk/threadstorage.h"
|
||||||
#include "asterisk/test.h"
|
#include "asterisk/test.h"
|
||||||
|
#include "asterisk/vector.h"
|
||||||
|
|
||||||
static enum ast_test_result_state test_chan_integer(struct ast_test *test,
|
static enum ast_test_result_state test_chan_integer(struct ast_test *test,
|
||||||
struct ast_channel *c, int *ifield, const char *expression)
|
struct ast_channel *c, int *ifield, const char *expression)
|
||||||
|
@ -225,6 +226,7 @@ AST_TEST_DEFINE(test_substitution)
|
||||||
struct ast_channel *c;
|
struct ast_channel *c;
|
||||||
int i;
|
int i;
|
||||||
enum ast_test_result_state res = AST_TEST_PASS;
|
enum ast_test_result_state res = AST_TEST_PASS;
|
||||||
|
struct ast_vector_string *funcs;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case TEST_INIT:
|
case TEST_INIT:
|
||||||
|
@ -302,11 +304,12 @@ AST_TEST_DEFINE(test_substitution)
|
||||||
#undef TEST
|
#undef TEST
|
||||||
|
|
||||||
/* For testing dialplan functions */
|
/* For testing dialplan functions */
|
||||||
for (i = 0; ; i++) {
|
funcs = ast_cli_completion_vector("core show function", "");
|
||||||
char *cmd = ast_cli_generator("core show function", "", i);
|
|
||||||
if (cmd == NULL) {
|
/* Skip "best match" element 0 */
|
||||||
break;
|
for (i = 1; funcs && i < AST_VECTOR_SIZE(funcs); i++) {
|
||||||
}
|
char *cmd = AST_VECTOR_GET(funcs, i);
|
||||||
|
|
||||||
if (strcmp(cmd, "CHANNEL") && strcmp(cmd, "CALLERID") && strncmp(cmd, "CURL", 4) &&
|
if (strcmp(cmd, "CHANNEL") && strcmp(cmd, "CALLERID") && strncmp(cmd, "CURL", 4) &&
|
||||||
strncmp(cmd, "AES", 3) && strncmp(cmd, "BASE64", 6) &&
|
strncmp(cmd, "AES", 3) && strncmp(cmd, "BASE64", 6) &&
|
||||||
strcmp(cmd, "CDR") && strcmp(cmd, "ENV") && strcmp(cmd, "GLOBAL") &&
|
strcmp(cmd, "CDR") && strcmp(cmd, "ENV") && strcmp(cmd, "GLOBAL") &&
|
||||||
|
@ -321,10 +324,14 @@ AST_TEST_DEFINE(test_substitution)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ast_free(cmd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (funcs) {
|
||||||
|
AST_VECTOR_CALLBACK_VOID(funcs, ast_free);
|
||||||
|
AST_VECTOR_PTR_FREE(funcs);
|
||||||
|
}
|
||||||
ast_hangup(c);
|
ast_hangup(c);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue