43fe83
From 355db223981592db283ff8dd4d2e198237854937 Mon Sep 17 00:00:00 2001
43fe83
Message-Id: <355db223981592db283ff8dd4d2e198237854937.1377873640.git.jdenemar@redhat.com>
43fe83
From: Martin Kletzander <mkletzan@redhat.com>
43fe83
Date: Thu, 22 Aug 2013 15:39:03 +0200
43fe83
Subject: [PATCH] Fix URI connect precedence
43fe83
43fe83
Commit abfff210 changed the order of vshParseArgv() and vshInit() in
43fe83
order to make fix debugging of parameter parsing.  However, vshInit()
43fe83
did a vshReconnect() even though ctl->name wasn't set according to the
43fe83
'-c' parameter yet.  In order to keep both issues fixed, I've split
43fe83
the vshInit() into vshInitDebug() and vshInit().
43fe83
43fe83
One simple memleak of ctl->name is fixed as a part of this patch,
43fe83
since it is related to the issue it's fixing.
43fe83
43fe83
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=999323
43fe83
(cherry picked from commit a0b6a36f9456dae895f50d344fd2d38be1167c58)
43fe83
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
43fe83
---
43fe83
 tools/virsh.c | 28 +++++++++++++++++-----------
43fe83
 1 file changed, 17 insertions(+), 11 deletions(-)
43fe83
43fe83
diff --git a/tools/virsh.c b/tools/virsh.c
43fe83
index 15f529e..2ea44a6 100644
43fe83
--- a/tools/virsh.c
43fe83
+++ b/tools/virsh.c
43fe83
@@ -2294,16 +2294,13 @@ vshEventLoop(void *opaque)
43fe83
 
43fe83
 
43fe83
 /*
43fe83
- * Initialize connection.
43fe83
+ * Initialize debug settings.
43fe83
  */
43fe83
-static bool
43fe83
-vshInit(vshControl *ctl)
43fe83
+static void
43fe83
+vshInitDebug(vshControl *ctl)
43fe83
 {
43fe83
     char *debugEnv;
43fe83
 
43fe83
-    if (ctl->conn)
43fe83
-        return false;
43fe83
-
43fe83
     if (ctl->debug == VSH_DEBUG_DEFAULT) {
43fe83
         /* log level not set from commandline, check env variable */
43fe83
         debugEnv = getenv("VIRSH_DEBUG");
43fe83
@@ -2328,6 +2325,16 @@ vshInit(vshControl *ctl)
43fe83
     }
43fe83
 
43fe83
     vshOpenLogFile(ctl);
43fe83
+}
43fe83
+
43fe83
+/*
43fe83
+ * Initialize connection.
43fe83
+ */
43fe83
+static bool
43fe83
+vshInit(vshControl *ctl)
43fe83
+{
43fe83
+    if (ctl->conn)
43fe83
+        return false;
43fe83
 
43fe83
     /* set up the library error handler */
43fe83
     virSetErrorFunc(NULL, virshErrorHandler);
43fe83
@@ -3017,6 +3024,7 @@ vshParseArgv(vshControl *ctl, int argc, char **argv)
43fe83
             ctl->timing = true;
43fe83
             break;
43fe83
         case 'c':
43fe83
+            VIR_FREE(ctl->name);
43fe83
             ctl->name = vshStrdup(ctl, optarg);
43fe83
             break;
43fe83
         case 'v':
43fe83
@@ -3192,12 +3200,10 @@ main(int argc, char **argv)
43fe83
         ctl->name = vshStrdup(ctl, defaultConn);
43fe83
     }
43fe83
 
43fe83
-    if (!vshInit(ctl)) {
43fe83
-        vshDeinit(ctl);
43fe83
-        exit(EXIT_FAILURE);
43fe83
-    }
43fe83
+    vshInitDebug(ctl);
43fe83
 
43fe83
-    if (!vshParseArgv(ctl, argc, argv)) {
43fe83
+    if (!vshParseArgv(ctl, argc, argv) ||
43fe83
+        !vshInit(ctl)) {
43fe83
         vshDeinit(ctl);
43fe83
         exit(EXIT_FAILURE);
43fe83
     }
43fe83
-- 
43fe83
1.8.3.2
43fe83