]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
vsh: Allow vshReadlineInit() to be called multiple times
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 8 Aug 2024 12:21:20 +0000 (14:21 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 8 Aug 2024 13:45:37 +0000 (15:45 +0200)
Thing about vshReadlineInit() is - it's called multiple times.
The first time from vshInit(), when @ctl was filled only
partially (most notably, before any argv parsing is done, hence
ctl->imode is set to false). The second time after argv parsing,
from virshInit() -> vshInitReload(). In here, ctl->imode might
have changed and thus vshReadlineInit() can't exit early - it
needs to set up stuff for interactive mode (history basically).

To allow vshReadlineInit() to be called again,
vshReadlineDeinit() must set @autoCompleteOpaque to NULL.

Fixes: cab1e71f0161fd24c5d6ff4c379d3a242ea8c2d9
Resolves: https://issues.redhat.com/browse/RHEL-53560
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
tools/vsh.c

index 9fbb1f9349ca9917b7b6a6f642f8dbfc40018317..5f5e2f281d25dab62338d949e4dab2b9eb099d6c 100644 (file)
@@ -3040,6 +3040,9 @@ vshReadlineDeinit(vshControl *ctl)
 
     g_clear_pointer(&ctl->historydir, g_free);
     g_clear_pointer(&ctl->historyfile, g_free);
+
+    /* Allow vshReadlineInit() to be called again. */
+    autoCompleteOpaque = NULL;
 }
 
 char *