[PATCH 03/15] virNetDevBandwidthParseRate: Refactor parsing

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

 



Remove the unnecessary check for valid arguments and use
virXMLPropULongLong instead of hand-written property parsers.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 src/conf/netdev_bandwidth_conf.c | 89 +++++++++++---------------------
 1 file changed, 29 insertions(+), 60 deletions(-)

diff --git a/src/conf/netdev_bandwidth_conf.c b/src/conf/netdev_bandwidth_conf.c
index 2ac1983dce..f34d7499ae 100644
--- a/src/conf/netdev_bandwidth_conf.c
+++ b/src/conf/netdev_bandwidth_conf.c
@@ -25,61 +25,46 @@
 #define VIR_FROM_THIS VIR_FROM_NONE

 static int
-virNetDevBandwidthParseRate(xmlNodePtr node, virNetDevBandwidthRate *rate)
+virNetDevBandwidthParseRate(xmlNodePtr node,
+                            virNetDevBandwidthRate *rate,
+                            bool allowFloor)
 {
-    g_autofree char *average = NULL;
-    g_autofree char *peak = NULL;
-    g_autofree char *burst = NULL;
-    g_autofree char *floor = NULL;
-
-    if (!node || !rate) {
-        virReportError(VIR_ERR_INVALID_ARG, "%s",
-                       _("invalid argument supplied"));
+    int rc_average;
+    int rc_peak;
+    int rc_burst;
+    int rc_floor;
+
+    if ((rc_average = virXMLPropULongLong(node, "average", 10, VIR_XML_PROP_NONE,
+                                          &rate->average)) < 0)
         return -1;
-    }

-    average = virXMLPropString(node, "average");
-    peak = virXMLPropString(node, "peak");
-    burst = virXMLPropString(node, "burst");
-    floor = virXMLPropString(node, "floor");
+    if ((rc_peak = virXMLPropULongLong(node, "peak", 10, VIR_XML_PROP_NONE,
+                                       &rate->peak)) < 0)
+        return -1;

-    if (average) {
-        if (virStrToLong_ullp(average, NULL, 10, &rate->average) < 0) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("could not convert bandwidth average value '%1$s'"),
-                           average);
-            return -1;
-        }
-    } else if (!floor) {
-        virReportError(VIR_ERR_XML_DETAIL, "%s",
-                       _("Missing mandatory average or floor attributes"));
+    if ((rc_burst = virXMLPropULongLong(node, "burst", 10, VIR_XML_PROP_NONE,
+                                        &rate->burst)) < 0)
         return -1;
-    }

-    if ((peak || burst) && !average) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                       _("'peak' and 'burst' require 'average' attribute"));
+    if ((rc_floor = virXMLPropULongLong(node, "floor", 10, VIR_XML_PROP_NONE,
+                                        &rate->floor)) < 0)
         return -1;
-    }

-    if (peak && virStrToLong_ullp(peak, NULL, 10, &rate->peak) < 0) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("could not convert bandwidth peak value '%1$s'"),
-                       peak);
+    if (!rc_average && !rc_floor) {
+        virReportError(VIR_ERR_XML_DETAIL, "%s",
+                       _("Missing mandatory average or floor attributes"));
         return -1;
     }

-    if (burst && virStrToLong_ullp(burst, NULL, 10, &rate->burst) < 0) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("could not convert bandwidth burst value '%1$s'"),
-                       burst);
+    if ((rc_peak || rc_burst) && !rc_average) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("'peak' and 'burst' require 'average' attribute"));
         return -1;
     }

-    if (floor && virStrToLong_ullp(floor, NULL, 10, &rate->floor) < 0) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("could not convert bandwidth floor value '%1$s'"),
-                       floor);
+    if (rc_floor && !allowFloor) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("floor attribute is not supported for this config"));
         return -1;
     }

@@ -157,32 +142,16 @@ virNetDevBandwidthParse(virNetDevBandwidth **bandwidth,
     if (in) {
         def->in = g_new0(virNetDevBandwidthRate, 1);

-        if (virNetDevBandwidthParseRate(in, def->in) < 0) {
-            /* helper reported error for us */
-            return -1;
-        }
-
-        if (def->in->floor && !allowFloor) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                           _("floor attribute is not supported for this config"));
+        if (virNetDevBandwidthParseRate(in, def->in, allowFloor) < 0)
             return -1;
-        }
     }

     if (out) {
         def->out = g_new0(virNetDevBandwidthRate, 1);

-        if (virNetDevBandwidthParseRate(out, def->out) < 0) {
-            /* helper reported error for us */
-            return -1;
-        }
-
-        if (def->out->floor) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                           _("'floor' attribute allowed "
-                             "only in <inbound> element"));
+        /* floor is not allowed for <outbound> */
+        if (virNetDevBandwidthParseRate(out, def->out, false) < 0)
             return -1;
-        }
     }

     if (def->in || def->out)
-- 
2.40.1




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

  Powered by Linux