[PATCH 09/12] vsh: Deduplicate filtering in vshReadlineCommandGenerator()
Jonathon Jongsma
jjongsma at redhat.com
Tue Feb 9 16:30:39 UTC 2021
On Thu, 4 Feb 2021 15:13:34 +0100
Michal Privoznik <mprivozn at redhat.com> wrote:
> This is what we do for completer callbacks: we let them generate
> all possible outputs ignoring any partial input (e.g. prefix of a
> domain name) and then use vshCompleterFilter() to filter out
> those strings which don't fit the partial input (prefix).
>
> The same algorithm is implemented in
> vshReadlineCommandGenerator(). There is no need to have the same
> code twice.
Similar comment as on previous patch
Reviewed-by: Jonathon Jongsma <jjongsma at redhat.com>
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
> tools/vsh.c | 31 ++++++++++++++-----------------
> 1 file changed, 14 insertions(+), 17 deletions(-)
>
> diff --git a/tools/vsh.c b/tools/vsh.c
> index 5f082f1a35..e0dbda04c8 100644
> --- a/tools/vsh.c
> +++ b/tools/vsh.c
> @@ -2561,11 +2561,10 @@ vshTreePrint(vshControl *ctl, vshTreeLookup
> lookup, void *opaque, *
> * Generator function for command completion.
> *
> - * Returns a string list of commands with @text prefix,
> - * NULL if there's no such command.
> + * Returns a string list of all commands, or NULL on failure.
> */
> static char **
> -vshReadlineCommandGenerator(const char *text)
> +vshReadlineCommandGenerator(const char *text G_GNUC_UNUSED)
> {
> size_t grp_list_index = 0, cmd_list_index = 0;
> const char *name;
> @@ -2587,15 +2586,13 @@ vshReadlineCommandGenerator(const char *text)
> if (cmds[cmd_list_index++].flags &
> VSH_CMD_FLAG_ALIAS) continue;
>
> - if (STRPREFIX(name, text)) {
> - if (VIR_REALLOC_N(ret, ret_size + 2) < 0)
> - return NULL;
> + if (VIR_REALLOC_N(ret, ret_size + 2) < 0)
> + return NULL;
>
> - ret[ret_size] = g_strdup(name);
> - ret_size++;
> - /* Terminate the string list properly. */
> - ret[ret_size] = NULL;
> - }
> + ret[ret_size] = g_strdup(name);
> + ret_size++;
> + /* Terminate the string list properly. */
> + ret[ret_size] = NULL;
> }
> } else {
> cmd_list_index = 0;
> @@ -2782,13 +2779,13 @@ vshReadlineParse(const char *text, int state)
> if (virStringListMerge(&list, &completer_list) < 0)
> goto cleanup;
> }
> -
> - /* For string list returned by completers we have to do
> - * filtering based on @text because completers returns
> all
> - * possible strings. */
> - if (vshCompleterFilter(&list, text) < 0)
> - goto cleanup;
> }
> +
> + /* For string list returned by completers we have to do
> + * filtering based on @text because completers returns all
> + * possible strings. */
> + if (vshCompleterFilter(&list, text) < 0)
> + goto cleanup;
> }
>
> if (list) {
More information about the libvir-list
mailing list