[PATCH 2/4] conf: refactor virSecurityLabelDefParseXML

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

 



Simplification of the code without functional impact.
---
 src/conf/domain_conf.c | 72 ++++++++++++++++++++++----------------------------
 1 file changed, 32 insertions(+), 40 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index e41dfa2..6b6196c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -4230,52 +4230,50 @@ static virSecurityLabelDefPtr
 virSecurityLabelDefParseXML(xmlXPathContextPtr ctxt,
                             unsigned int flags)
 {
-    char *p;
+    char *str = NULL;
     virSecurityLabelDefPtr def = NULL;
+    size_t labellen = VIR_SECURITY_LABEL_BUFLEN - 1;

     if (VIR_ALLOC(def) < 0) {
         virReportOOMError();
         goto error;
     }

-    p = virXPathStringLimit("string(./@type)",
-                            VIR_SECURITY_LABEL_BUFLEN-1, ctxt);
-    if (p == NULL) {
+    str = virXPathStringLimit("string(./@type)", labellen, ctxt);
+    if (!str) {
         def->type = VIR_DOMAIN_SECLABEL_DYNAMIC;
     } else {
-        def->type = virDomainSeclabelTypeFromString(p);
-        VIR_FREE(p);
-        if (def->type <= 0) {
-            virReportError(VIR_ERR_XML_ERROR,
-                           "%s", _("invalid security type"));
+        if ((def->type = virDomainSeclabelTypeFromString(str)) <= 0) {
+            virReportError(VIR_ERR_XML_ERROR, "%s",
+                           _("invalid security type"));
             goto error;
         }
     }
+    VIR_FREE(str);

-    p = virXPathStringLimit("string(./@relabel)",
-                            VIR_SECURITY_LABEL_BUFLEN-1, ctxt);
-    if (p != NULL) {
-        if (STREQ(p, "yes")) {
+    if ((str = virXPathStringLimit("string(./@relabel)", labellen, ctxt))) {
+        if (STREQ(str, "yes")) {
             def->norelabel = false;
-        } else if (STREQ(p, "no")) {
+        } else if (STREQ(str, "no")) {
             def->norelabel = true;
         } else {
             virReportError(VIR_ERR_XML_ERROR,
-                           _("invalid security relabel value %s"), p);
-            VIR_FREE(p);
+                           _("invalid security relabel value %s"), str);
             goto error;
         }
-        VIR_FREE(p);
+
         if (def->type == VIR_DOMAIN_SECLABEL_DYNAMIC &&
             def->norelabel) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           "%s", _("dynamic label type must use resource relabeling"));
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("dynamic label type must use resource relabeling"));
             goto error;
         }
+
         if (def->type == VIR_DOMAIN_SECLABEL_NONE &&
             !def->norelabel) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           "%s", _("resource relabeling is not compatible with 'none' label type"));
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("resource relabeling is not compatible with "
+                             "'none' label type"));
             goto error;
         }
     } else {
@@ -4285,6 +4283,7 @@ virSecurityLabelDefParseXML(xmlXPathContextPtr ctxt,
         else
             def->norelabel = false;
     }
+    VIR_FREE(str);

     /* Only parse label, if using static labels, or
      * if the 'live' VM XML is requested
@@ -4292,46 +4291,39 @@ virSecurityLabelDefParseXML(xmlXPathContextPtr ctxt,
     if (def->type == VIR_DOMAIN_SECLABEL_STATIC ||
         (!(flags & VIR_DOMAIN_XML_INACTIVE) &&
          def->type != VIR_DOMAIN_SECLABEL_NONE)) {
-        p = virXPathStringLimit("string(./label[1])",
-                                VIR_SECURITY_LABEL_BUFLEN-1, ctxt);
-        if (p == NULL) {
-            virReportError(VIR_ERR_XML_ERROR,
-                           "%s", _("security label is missing"));
+        if (!(def->label = virXPathStringLimit("string(./label[1])",
+                                               labellen, ctxt))) {
+            virReportError(VIR_ERR_XML_ERROR, "%s",
+                           _("security label is missing"));
             goto error;
         }
-
-        def->label = p;
     }

     /* Only parse imagelabel, if requested live XML with relabeling */
     if (!def->norelabel &&
         (!(flags & VIR_DOMAIN_XML_INACTIVE) &&
          def->type != VIR_DOMAIN_SECLABEL_NONE)) {
-        p = virXPathStringLimit("string(./imagelabel[1])",
-                                VIR_SECURITY_LABEL_BUFLEN-1, ctxt);
-        if (p == NULL) {
-            virReportError(VIR_ERR_XML_ERROR,
-                           "%s", _("security imagelabel is missing"));
+        if (!(def->imagelabel = virXPathStringLimit("string(./imagelabel[1])",
+                                                    labellen, ctxt))) {
+            virReportError(VIR_ERR_XML_ERROR, "%s",
+                           _("security imagelabel is missing"));
             goto error;
         }
-        def->imagelabel = p;
     }

     /* Only parse baselabel for dynamic label type */
     if (def->type == VIR_DOMAIN_SECLABEL_DYNAMIC) {
-        p = virXPathStringLimit("string(./baselabel[1])",
-                                VIR_SECURITY_LABEL_BUFLEN-1, ctxt);
-        def->baselabel = p;
+        def->baselabel = virXPathStringLimit("string(./baselabel[1])",
+                                             labellen, ctxt);
     }

     /* Always parse model */
-    p = virXPathStringLimit("string(./@model)",
-                            VIR_SECURITY_MODEL_BUFLEN-1, ctxt);
-    def->model = p;
+    def->model = virXPathStringLimit("string(./@model)", labellen, ctxt);

     return def;

 error:
+    VIR_FREE(str);
     virSecurityLabelDefFree(def);
     return NULL;
 }
-- 
1.8.2.1

--
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]