From df9f1efc53818eee431c913aa02b9ea9fc3930ea Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Thu, 7 Jan 2021 17:58:41 +0100 Subject: [PATCH] vsh: Don't break word on backslash MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Ján Tomko --- tools/vsh.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/vsh.c b/tools/vsh.c index 54253afa72..9856088126 100644 --- a/tools/vsh.c +++ b/tools/vsh.c @@ -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. */