
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