[libvirt] [PATCH] tools: Pass opaque data in vshCompleter and introduce autoCompleteOpaque

Michal Privoznik mprivozn at redhat.com
Tue Sep 6 15:49:32 UTC 2016


On 06.09.2016 14:04, Nishith Shah wrote:
> This patch changes the signature of vshCompleters, allowing to pass along
> some data that we might want to along with the completers; for example,
> we might want to pass the autocomplete vshControl along with the
> completer, in case the completer requires a connection to libvirtd.
> 
> Signed-off-by: Nishith Shah <nishithshah.2211 at gmail.com>
> ---
>  tools/vsh.c | 10 +++++++++-
>  tools/vsh.h |  2 +-
>  2 files changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/vsh.c b/tools/vsh.c
> index 3157922..3cc03ec 100644
> --- a/tools/vsh.c
> +++ b/tools/vsh.c
> @@ -64,6 +64,11 @@
>  # define SA_SIGINFO 0
>  #endif
>  
> +#ifdef WITH_READLINE
> +/* For autocompletion */
> +void *autoCompleteOpaque;
> +#endif
> +
>  /* NOTE: It would be much nicer to have these two as part of vshControl
>   * structure, unfortunately readline doesn't support passing opaque data
>   * and only relies on static data accessible from the user-side callback
> @@ -2808,7 +2813,8 @@ vshReadlineParse(const char *text, int state)
>          res = vshReadlineOptionsGenerator(sanitized_text, state, cmd);
>      } else if (non_bool_opt_exists && data_complete && opt->completer) {
>          if (!completed_list)
> -            completed_list = opt->completer(opt->completer_flags);
> +            completed_list = opt->completer(autoCompleteOpaque,
> +                                            opt->completer_flags);
>          if (completed_list) {
>              while ((completed_name = completed_list[completed_list_index])) {
>                  completed_list_index++;
> @@ -2858,6 +2864,8 @@ vshReadlineInit(vshControl *ctl)
>      char *histsize_env = NULL;
>      const char *histsize_str = NULL;
>  
> +    /* Opaque data for autocomplete callbacks and connections to libvirtd */
> +    autoCompleteOpaque = ctl;

I'd put a empty space here so that it creates a visual barrier before
next comment starts.

>      /* Allow conditional parsing of the ~/.inputrc file.
>       * Work around ancient readline 4.1 (hello Mac OS X),
>       * which declared it as 'char *' instead of 'const char *'.
> diff --git a/tools/vsh.h b/tools/vsh.h
> index 7f43055..e53910f 100644
> --- a/tools/vsh.h
> +++ b/tools/vsh.h
> @@ -123,7 +123,7 @@ typedef struct _vshCmdOpt vshCmdOpt;
>  typedef struct _vshCmdOptDef vshCmdOptDef;
>  typedef struct _vshControl vshControl;
>  
> -typedef char **(*vshCompleter)(unsigned int flags);
> +typedef char **(*vshCompleter)(void *opaque, unsigned int flags);
>  
>  /*
>   * vshCmdInfo -- name/value pair for information about command
> 

ACKed and pushed.

Michal




More information about the libvir-list mailing list