Re: [PATCH 17/17] virDomainTimerDefParseXML: Switch to virXMLPropEnumDefault()

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

 



On 5/23/22 3:08 PM, Michal Privoznik wrote:
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 52a34cd131..27fe6c9fbf 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -11962,98 +11962,61 @@ virDomainTimerDefParseXML(xmlNodePtr node,
      virDomainTimerDef *def;
      VIR_XPATH_NODE_AUTORESTORE(ctxt)
      xmlNodePtr catchup;
-    int ret;
-    g_autofree char *name = NULL;
-    g_autofree char *tickpolicy = NULL;
-    g_autofree char *track = NULL;
-    g_autofree char *mode = NULL;
def = g_new0(virDomainTimerDef, 1); ctxt->node = node; - name = virXMLPropString(node, "name");
-    if (name == NULL) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       "%s", _("missing timer name"));
+    if (virXMLPropEnum(node, "name",
+                       virDomainTimerNameTypeFromString,
+                       VIR_XML_PROP_REQUIRED,
+                       &def->name) < 0)
          goto error;
-    }
-    if ((def->name = virDomainTimerNameTypeFromString(name)) < 0) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("unknown timer name '%s'"), name);
-        goto error;
-    }
if (virXMLPropTristateBool(node, "present",
                                 VIR_XML_PROP_NONE,
                                 &def->present) < 0)
          goto error;
- tickpolicy = virXMLPropString(node, "tickpolicy");
-    if (tickpolicy != NULL) {
-        if ((def->tickpolicy = virDomainTimerTickpolicyTypeFromString(tickpolicy)) <= 0) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("unknown timer tickpolicy '%s'"), tickpolicy);
-            goto error;
-        }
-    }
+    if (virXMLPropEnum(node, "tickpolicy",
+                       virDomainTimerTickpolicyTypeFromString,
+                       VIR_XML_PROP_NONZERO,
+                       &def->tickpolicy) < 0)
+        goto error;
- track = virXMLPropString(node, "track");
-    if (track != NULL) {
-        if ((def->track = virDomainTimerTrackTypeFromString(track)) <= 0) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("unknown timer track '%s'"), track);
-            goto error;
-        }
-    }
+    if (virXMLPropEnum(node, "track",
+                       virDomainTimerTrackTypeFromString,
+                       VIR_XML_PROP_NONZERO,
+                       &def->track) < 0)
+        goto error;
- ret = virXPathULongLong("string(./@frequency)", ctxt, &def->frequency);
-    if (ret == -1) {
-        def->frequency = 0;

Is the above case covered in virXMLPropULongLong?
A few other cases like following below.

-    } else if (ret < 0) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       "%s", _("invalid timer frequency"));
+    if (virXMLPropULongLong(node, "frequency", 10,
+                            VIR_XML_PROP_NONE,
+                            &def->frequency) < 0)
          goto error;
-    }
- mode = virXMLPropString(node, "mode");
-    if (mode != NULL) {
-        if ((def->mode = virDomainTimerModeTypeFromString(mode)) <= 0) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("unknown timer mode '%s'"), mode);
-            goto error;
-        }
-    }
+    if (virXMLPropEnum(node, "mode",
+                       virDomainTimerModeTypeFromString,
+                       VIR_XML_PROP_NONZERO,
+                       &def->mode) < 0)
+        goto error;
catchup = virXPathNode("./catchup", ctxt);
      if (catchup != NULL) {
-        ret = virXPathULong("string(./catchup/@threshold)", ctxt,
-                            &def->catchup.threshold);
-        if (ret == -1) {
-            def->catchup.threshold = 0;
-        } else if (ret < 0) {
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                           "%s", _("invalid catchup threshold"));
+        if (virXMLPropUInt(catchup, "threshold", 10,
+                           VIR_XML_PROP_NONE,
+                           &def->catchup.threshold) < 0)
              goto error;
-        }
- ret = virXPathULong("string(./catchup/@slew)", ctxt, &def->catchup.slew);
-        if (ret == -1) {
-            def->catchup.slew = 0;
-        } else if (ret < 0) {
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                           "%s", _("invalid catchup slew"));
+        if (virXMLPropUInt(catchup, "slew", 10,
+                           VIR_XML_PROP_NONE,
+                           &def->catchup.slew) < 0)
              goto error;
-        }
- ret = virXPathULong("string(./catchup/@limit)", ctxt, &def->catchup.limit);
-        if (ret == -1) {
-            def->catchup.limit = 0;
-        } else if (ret < 0) {
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                           "%s", _("invalid catchup limit"));
+        if (virXMLPropUInt(catchup, "limit", 10,
+                           VIR_XML_PROP_NONE,
+                           &def->catchup.limit) < 0)
              goto error;
-        }
      }
return def;
@@ -26197,11 +26160,11 @@ virDomainTimerDefFormat(virBuffer *buf,
      }
if (def->catchup.threshold > 0)
-        virBufferAsprintf(&catchupAttr, " threshold='%lu'", def->catchup.threshold);
+        virBufferAsprintf(&catchupAttr, " threshold='%u'", def->catchup.threshold);
      if (def->catchup.slew > 0)
-        virBufferAsprintf(&catchupAttr, " slew='%lu'", def->catchup.slew);
+        virBufferAsprintf(&catchupAttr, " slew='%u'", def->catchup.slew);
      if (def->catchup.limit > 0)
-        virBufferAsprintf(&catchupAttr, " limit='%lu'", def->catchup.limit);
+        virBufferAsprintf(&catchupAttr, " limit='%u'", def->catchup.limit);
virXMLFormatElement(&timerChld, "catchup", &catchupAttr, NULL);
      virXMLFormatElement(buf, "timer", &timerAttr, &timerChld);


--
Mit freundlichen Grüßen/Kind regards
   Boris Fiuczynski

IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Gregor Pillen
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294





[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