virNodeDeviceCapVPDParseXML: Fix error reporting

Don't overwrite already reported errors and improve parsing of
attributes.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2024-01-30 17:41:44 +01:00
parent ea8d864d9e
commit dd36db2607

View File

@ -1063,7 +1063,7 @@ virNodeDeviceCapVPDParseXML(xmlXPathContextPtr ctxt, virPCIVPDResource **res)
return -1;
}
if ((nfields = virXPathNodeSet("./fields[@access]", ctxt, &nodes)) < 0)
if ((nfields = virXPathNodeSet("./fields", ctxt, &nodes)) < 0)
return -1;
for (i = 0; i < nfields; i++) {
@ -1071,27 +1071,19 @@ virNodeDeviceCapVPDParseXML(xmlXPathContextPtr ctxt, virPCIVPDResource **res)
VIR_XPATH_NODE_AUTORESTORE(ctxt);
ctxt->node = nodes[i];
if (!(access = virXPathString("string(./@access[1])", ctxt))) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("VPD fields access type parsing has failed"));
if (!(access = virXMLPropStringRequired(nodes[i], "access")))
return -1;
}
if (STREQ(access, "readonly")) {
if (virNodeDeviceCapVPDParseReadOnlyFields(ctxt, newres) < 0) {
virReportError(VIR_ERR_XML_ERROR,
_("Could not parse %1$s VPD resource fields"), access);
if (virNodeDeviceCapVPDParseReadOnlyFields(ctxt, newres) < 0)
return -1;
}
} else if (STREQ(access, "readwrite")) {
if (virNodeDeviceCapVPDParseReadWriteFields(ctxt, newres) < 0) {
virReportError(VIR_ERR_XML_ERROR,
_("Could not parse %1$s VPD resource fields"), access);
if (virNodeDeviceCapVPDParseReadWriteFields(ctxt, newres) < 0)
return -1;
}
} else {
virReportError(VIR_ERR_XML_ERROR,
_("Unsupported VPD field access type specified %1$s"),
_("Unsupported VPD field access type '%1$s'"),
access);
return -1;
}