CLI: Create ast_cli_completion_vector.

This is a rewrite of ast_cli_completion_matches using a vector to build
the list.  The original function calls the vector version, NULL
terminates the vector and extracts the elements array.

One change in behavior the results are now sorted and deduplicated. This
will solve bugs where some duplicate checking was done before the list
was sorted.

Change-Id: Iede20c5b4d965fa5ec71fda136ce9425eeb69519
This commit is contained in:
Corey Farrell
2017-11-07 18:07:35 -05:00
parent 4930404715
commit 14d60cee0c
2 changed files with 99 additions and 56 deletions

View File

@@ -305,6 +305,27 @@ int ast_cli_generatornummatches(const char *, const char *);
*/
char **ast_cli_completion_matches(const char *, const char *);
/*!
* \brief Generates a vector of strings for CLI completion.
*
* \param text Complete input being matched.
* \param word Current word being matched
*
* The results contain strings that both:
* 1) Begin with the string in \a word.
* 2) Are valid in a command after the string in \a text.
*
* The first entry (offset 0) of the result is the longest common substring
* in the results, useful to extend the string that has been completed.
* Subsequent entries are all possible values.
*
* \note All strings and the vector itself are malloc'ed and must be freed
* by the caller.
*
* \note The vector is sorted and does not contain any duplicates.
*/
struct ast_vector_string *ast_cli_completion_vector(const char *text, const char *word);
/*!
* \brief Command completion for the list of active channels.
*