[PATCH V5 06/12] src/xenxs: Refactor code formating Char devices config

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



introduce function
   xenFormatXMCharDev(virConfPtr conf,........);
which formats Char devices config instead

Signed-off-by: Kiarie Kahurani <davidkiarie4@xxxxxxxxx>
---
 src/xenxs/xen_xm.c | 163 ++++++++++++++++++++++++++++++-----------------------
 1 file changed, 91 insertions(+), 72 deletions(-)

diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
index 677735d..b4a7468 100644
--- a/src/xenxs/xen_xm.c
+++ b/src/xenxs/xen_xm.c
@@ -1819,6 +1819,94 @@ xenFormatXMEventActions(virConfPtr conf, virDomainDefPtr def)
 
     return 0;
 }
+
+
+static int
+xenFormatXMCharDev(virConfPtr conf, virDomainDefPtr def)
+{
+    size_t i;
+
+    if (STREQ(def->os.type, "hvm")) {
+        if (def->nparallels) {
+            virBuffer buf = VIR_BUFFER_INITIALIZER;
+            char *str;
+            int ret;
+
+            ret = xenFormatSxprChr(def->parallels[0], &buf);
+            str = virBufferContentAndReset(&buf);
+            if (ret == 0)
+                ret = xenXMConfigSetString(conf, "parallel", str);
+            VIR_FREE(str);
+            if (ret < 0)
+                return -1;
+
+        } else {
+            if (xenXMConfigSetString(conf, "parallel", "none") < 0)
+                return -1;
+        }
+
+        if (def->nserials) {
+            if ((def->nserials == 1) && (def->serials[0]->target.port == 0)) {
+                virBuffer buf = VIR_BUFFER_INITIALIZER;
+                char *str;
+                int ret;
+
+                ret = xenFormatSxprChr(def->serials[0], &buf);
+                str = virBufferContentAndReset(&buf);
+                if (ret == 0)
+                    ret = xenXMConfigSetString(conf, "serial", str);
+                VIR_FREE(str);
+                if (ret < 0)
+                    return -1;
+
+            } else {
+                size_t j = 0;
+                int maxport = -1, port;
+                virConfValuePtr serialVal = NULL;
+
+                if (VIR_ALLOC(serialVal) < 0)
+                    return -1;
+
+                serialVal->type = VIR_CONF_LIST;
+                serialVal->list = NULL;
+
+                for (i = 0; i < def->nserials; i++)
+                    if (def->serials[i]->target.port > maxport)
+                        maxport = def->serials[i]->target.port;
+
+                for (port = 0; port <= maxport; port++) {
+                    virDomainChrDefPtr chr = NULL;
+                    for (j = 0; j < def->nserials; j++) {
+                        if (def->serials[j]->target.port == port) {
+                            chr = def->serials[j];
+                            break;
+                        }
+                    }
+
+                    if (xenFormatXMSerial(serialVal, chr) < 0) {
+                        VIR_FREE(serialVal);
+                        return -1;
+                    }
+                }
+
+                if (serialVal->list != NULL) {
+                    int ret = virConfSetValue(conf, "serial", serialVal);
+                    serialVal = NULL;
+                    if (ret < 0)
+                        return -1;
+                }
+                VIR_FREE(serialVal);
+            }
+        } else {
+            if (xenXMConfigSetString(conf, "serial", "none") < 0)
+                return -1;
+        }
+    }
+
+    return 0;
+}
+
+
 /* Computing the vcpu_avail bitmask works because MAX_VIRT_CPUS is
    either 32, or 64 on a platform where long is big enough.  */
 verify(MAX_VIRT_CPUS <= sizeof(1UL) * CHAR_BIT);
@@ -2149,79 +2237,10 @@ xenFormatXM(virConnectPtr conn,
     if (xenFormatXMPCI(conf, def) < 0)
         goto cleanup;
 
-    if (hvm) {
-        if (def->nparallels) {
-            virBuffer buf = VIR_BUFFER_INITIALIZER;
-            char *str;
-            int ret;
-
-            ret = xenFormatSxprChr(def->parallels[0], &buf);
-            str = virBufferContentAndReset(&buf);
-            if (ret == 0)
-                ret = xenXMConfigSetString(conf, "parallel", str);
-            VIR_FREE(str);
-            if (ret < 0)
-                goto cleanup;
-        } else {
-            if (xenXMConfigSetString(conf, "parallel", "none") < 0)
-                goto cleanup;
-        }
-
-        if (def->nserials) {
-            if ((def->nserials == 1) && (def->serials[0]->target.port == 0)) {
-                virBuffer buf = VIR_BUFFER_INITIALIZER;
-                char *str;
-                int ret;
-
-                ret = xenFormatSxprChr(def->serials[0], &buf);
-                str = virBufferContentAndReset(&buf);
-                if (ret == 0)
-                    ret = xenXMConfigSetString(conf, "serial", str);
-                VIR_FREE(str);
-                if (ret < 0)
-                    goto cleanup;
-            } else {
-                size_t j = 0;
-                int maxport = -1, port;
-                virConfValuePtr serialVal = NULL;
-
-                if (VIR_ALLOC(serialVal) < 0)
-                    goto cleanup;
-                serialVal->type = VIR_CONF_LIST;
-                serialVal->list = NULL;
-
-                for (i = 0; i < def->nserials; i++)
-                    if (def->serials[i]->target.port > maxport)
-                        maxport = def->serials[i]->target.port;
-
-                for (port = 0; port <= maxport; port++) {
-                    virDomainChrDefPtr chr = NULL;
-                    for (j = 0; j < def->nserials; j++) {
-                        if (def->serials[j]->target.port == port) {
-                            chr = def->serials[j];
-                            break;
-                        }
-                    }
-                    if (xenFormatXMSerial(serialVal, chr) < 0) {
-                        virConfFreeValue(serialVal);
-                        goto cleanup;
-                    }
-                }
-
-                if (serialVal->list != NULL) {
-                    int ret = virConfSetValue(conf, "serial", serialVal);
-                    serialVal = NULL;
-                    if (ret < 0)
-                        goto cleanup;
-                }
-                VIR_FREE(serialVal);
-            }
-        } else {
-            if (xenXMConfigSetString(conf, "serial", "none") < 0)
-                goto cleanup;
-        }
-
+    if (xenFormatXMCharDev(conf, def) < 0)
+        goto cleanup;
 
+    if (hvm) {
         if (def->sounds) {
             virBuffer buf = VIR_BUFFER_INITIALIZER;
             char *str = NULL;
-- 
1.8.4.5

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]