From f59d51f5184b3559538aaac8dc9bedc3e1e6c0f2 Mon Sep 17 00:00:00 2001 From: Erik Skultety Date: Thu, 3 Sep 2015 16:59:01 +0200 Subject: [PATCH] vsh: Introduce vshInitReload Commit a0b6a36f separated vshInitDebug from the original vshInit (before virsh got split and vshInit became virshInit - commit 834c5720) in order to be able to debug command line parsing. After the parsing is finished, debugging is reinitialized to work properly. There might as well be other features that require re-initialization as the command line could specify parameters that override our defaults which had been set prior to calling vshArgvParse. --- tools/virsh.c | 5 +++-- tools/vsh.c | 19 +++++++++++++++++++ tools/vsh.h | 1 + 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/tools/virsh.c b/tools/virsh.c index 77d3754efd..513c22cde2 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -347,8 +347,9 @@ virshInit(vshControl *ctl) virshControlPtr priv = ctl->privData; /* Since we have the commandline arguments parsed, we need to - * re-initialize all the debugging to make it work properly */ - vshInitDebug(ctl); + * reload our initial settings to make debugging and readline + * work properly */ + vshInitReload(ctl); if (priv->conn) return false; diff --git a/tools/vsh.c b/tools/vsh.c index e6ecc03854..1aa8f5bc9d 100644 --- a/tools/vsh.c +++ b/tools/vsh.c @@ -2738,6 +2738,25 @@ vshInit(vshControl *ctl, const vshCmdGrp *groups, const vshCmdDef *set) return true; } +bool +vshInitReload(vshControl *ctl) +{ + if (!cmdGroups && !cmdSet) { + vshError(ctl, "%s", _("command groups and command are both NULL " + "run vshInit before reloading")); + return false; + } + + vshInitDebug(ctl); + + if (ctl->imode) + vshReadlineDeinit(ctl); + if (ctl->imode && vshReadlineInit(ctl) < 0) + return false; + + return true; +} + void vshDeinit(vshControl *ctl) { diff --git a/tools/vsh.h b/tools/vsh.h index e2e33ba160..b6876048cb 100644 --- a/tools/vsh.h +++ b/tools/vsh.h @@ -303,6 +303,7 @@ int vshCommandOptTimeoutToMs(vshControl *ctl, const vshCmd *cmd, int *timeout); void vshPrintExtra(vshControl *ctl, const char *format, ...) ATTRIBUTE_FMT_PRINTF(2, 3); bool vshInit(vshControl *ctl, const vshCmdGrp *groups, const vshCmdDef *set); +bool vshInitReload(vshControl *ctl); void vshDeinit(vshControl *ctl); void vshInitDebug(vshControl *ctl); void vshDebug(vshControl *ctl, int level, const char *format, ...)