From 2c9b97d8421bc521bb297f2aaeb4519758484fd7 Mon Sep 17 00:00:00 2001
From: Pavel Hrdina <phrdina@redhat.com>
Date: Fri, 18 Aug 2017 19:25:11 +0200
Subject: [PATCH] conf: move UNIX chardev source parsing to separate function

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
---
 src/conf/domain_conf.c | 34 ++++++++++++++++++++++------------
 1 file changed, 22 insertions(+), 12 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 222bd29018..9170da4137 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -10996,6 +10996,23 @@ virDomainChrSourceDefParseUDP(virDomainChrSourceDefPtr def,
 }
 
 
+static int
+virDomainChrSourceDefParseUnix(virDomainChrSourceDefPtr def,
+                               xmlNodePtr source)
+{
+
+    int mode;
+
+    if ((mode = virDomainChrSourceDefParseMode(source)) < 0)
+        return -1;
+
+    def->data.nix.listen = mode == VIR_DOMAIN_CHR_SOURCE_MODE_BIND;
+    def->data.nix.path = virXMLPropString(source, "path");
+
+    return 0;
+}
+
+
 static int
 virDomainChrSourceDefParseProtocol(virDomainChrSourceDefPtr def,
                                    xmlNodePtr protocol)
@@ -11058,7 +11075,6 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
                               int nvmSeclabels)
 {
     int ret = -1;
-    int mode = VIR_DOMAIN_CHR_SOURCE_MODE_CONNECT;
     char *path = NULL;
     char *channel = NULL;
     char *master = NULL;
@@ -11094,7 +11110,6 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
             case VIR_DOMAIN_CHR_TYPE_PTY:
             case VIR_DOMAIN_CHR_TYPE_DEV:
             case VIR_DOMAIN_CHR_TYPE_PIPE:
-            case VIR_DOMAIN_CHR_TYPE_UNIX:
                 if (!append && def->type == VIR_DOMAIN_CHR_TYPE_FILE)
                     append = virXMLPropString(cur, "append");
                 /* PTY path is only parsed from live xml.  */
@@ -11102,11 +11117,11 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
                     (def->type != VIR_DOMAIN_CHR_TYPE_PTY ||
                      !(flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)))
                     path = virXMLPropString(cur, "path");
-                if (def->type == VIR_DOMAIN_CHR_TYPE_UNIX) {
-                    if ((mode = virDomainChrSourceDefParseMode(cur)) < 0)
-                        goto error;
-                }
+                break;
 
+            case VIR_DOMAIN_CHR_TYPE_UNIX:
+                if (virDomainChrSourceDefParseUnix(def, cur) < 0)
+                    goto error;
                 break;
 
             case VIR_DOMAIN_CHR_TYPE_UDP:
@@ -11249,7 +11264,7 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
 
     case VIR_DOMAIN_CHR_TYPE_UNIX:
         /* path can be auto generated */
-        if (!path &&
+        if (!def->data.nix.path &&
             (!chr_def ||
              (chr_def->targetType != VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_XEN &&
               chr_def->targetType != VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO))) {
@@ -11257,11 +11272,6 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
                            _("Missing source path attribute for char device"));
             goto error;
         }
-
-        def->data.nix.listen = mode == VIR_DOMAIN_CHR_SOURCE_MODE_BIND;
-
-        def->data.nix.path = path;
-        path = NULL;
         break;
 
     case VIR_DOMAIN_CHR_TYPE_SPICEPORT: