vsh: Don't break word on backslash

A backslash is the way we escape characters in virsh. For
instance:

  virsh # start domain\ with\ long\ name

For readline completion, we do not want to get four separate
words ("domain", "with", "long", "name").  This means, that we
can't use virBufferEscapeShell() because it doesn't escape spaces
the way we want.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Michal Privoznik 2021-01-07 17:58:41 +01:00
parent 9b9542586c
commit df9f1efc53

View File

@ -2773,7 +2773,7 @@ vshReadlineParse(const char *text, int state)
if (ret &&
!rl_completion_quote_character) {
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
virBufferEscapeShell(&buf, ret);
virBufferEscape(&buf, '\\', " ", "%s", ret);
VIR_FREE(ret);
ret = virBufferContentAndReset(&buf);
}
@ -2819,7 +2819,7 @@ vshReadlineInit(vshControl *ctl)
int ret = -1;
char *histsize_env = NULL;
const char *histsize_str = NULL;
const char *break_characters = " \t\n\\`@$><=;|&{(";
const char *break_characters = " \t\n`@$><=;|&{(";
const char *quote_characters = "\"'";
/* Opaque data for autocomplete callbacks. */