On 20.08.2013 22:02, Tomas Meszaros wrote: > * vshMalloc is now used in vshDetermineCommandName > * vshStrdup instead of vshMalloc + snprintf > * joined if's in vshReadlineOptionsCompletionGenerator > --- > tools/virsh.c | 395 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- > 1 file changed, 373 insertions(+), 22 deletions(-) > > diff --git a/tools/virsh.c b/tools/virsh.c > index 15f529e..af6e939 100644 > --- a/tools/virsh.c > +++ b/tools/virsh.c > @@ -2605,22 +2613,365 @@ vshReadlineOptionsGenerator(const char *text, int state) > return NULL; > } > > +/* > + * Generator function for command completion, but unlike > + * the vshRaadlineCommandGenerator which completes command name, this function s/vshRaadlineCommandGenerator/tools/vshReadlineCommandGenerator/ (Raad vs Read). > + * provides more advanced completion for commands by calling specific command > + * completers (e.g. vshDomainCompleter). > + */ > +static char * > +vshReadlineCommandCompletionGenerator(const char *text, int state) > +{ > + static const vshCmdDef *cmd = NULL; > +/* > + * Returns current valid command option name present in the rl_line_buffer. > + */ > +static char * > +vshCurrentOpt(const char *cmd_name) > +{ > + const vshCmdDef *cmd = NULL; > + const char *name; > + unsigned long int opt_index = 0; > + size_t cmd_opt_list_index; > + char *found_opt = NULL; > + char *ptr = NULL; > + > + if (!cmd_name) > + return NULL; > + > + cmd = vshCmddefSearch(cmd_name); > + > + if (!cmd) > + return NULL; > + > + if (!cmd->opts) > + return NULL; > + > + cmd_opt_list_index = 0; > + > + while ((name = cmd->opts[cmd_opt_list_index].name)) { > + cmd_opt_list_index++; > + > + if ((ptr = strstr(rl_line_buffer, name))) { > + if (opt_index < (ptr - rl_line_buffer)) { > + opt_index = ptr - rl_line_buffer; > + if (VIR_STRDUP(found_opt, name) < 0) > + return NULL; > + } > + } > + } > + > + if (!found_opt) > + return NULL; this if is useless. > + > + return found_opt; > +} > + Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list