conf: Use nodes in virDomainLoaderDefParseXMLNvram()

This makes the function more consistent with
virDomainLoaderDefParseXML() by preferring the virXMLProp
class of functions to XPath access.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Andrea Bolognani 2022-06-17 11:04:17 +02:00
parent f0e68d28e1
commit bdd9ce0fda

View File

@ -17994,43 +17994,45 @@ virDomainDefMaybeAddHostdevSCSIcontroller(virDomainDef *def)
static int static int
virDomainLoaderDefParseXMLNvram(virDomainLoaderDef *loader, virDomainLoaderDefParseXMLNvram(virDomainLoaderDef *loader,
xmlNodePtr nvramNode,
xmlNodePtr nvramSourceNode,
xmlXPathContextPtr ctxt, xmlXPathContextPtr ctxt,
virDomainXMLOption *xmlopt, virDomainXMLOption *xmlopt,
unsigned int flags, unsigned int flags,
bool fwAutoSelect) bool fwAutoSelect)
{ {
g_autofree char *nvramType = virXPathString("string(./os/nvram/@type)", ctxt);
g_autoptr(virStorageSource) src = virStorageSourceNew(); g_autoptr(virStorageSource) src = virStorageSourceNew();
int typePresent;
if (!nvramNode)
return 0;
if (!fwAutoSelect) if (!fwAutoSelect)
loader->nvramTemplate = virXPathString("string(./os/nvram[1]/@template)", ctxt); loader->nvramTemplate = virXMLPropString(nvramNode, "template");
src->format = VIR_STORAGE_FILE_RAW; src->format = VIR_STORAGE_FILE_RAW;
if (!nvramType) { if ((typePresent = virXMLPropEnum(nvramNode, "type",
char *nvramPath = NULL; virStorageTypeFromString, VIR_XML_PROP_NONE,
&src->type)) < 0)
return -1;
if (!(nvramPath = virXPathString("string(./os/nvram[1])", ctxt))) if (!typePresent) {
return 0; /* no nvram */ g_autofree char *path = NULL;
if (!(path = virXMLNodeContentString(nvramNode)))
return -1;
if (STREQ(path, ""))
return 0;
src->path = nvramPath;
src->type = VIR_STORAGE_TYPE_FILE; src->type = VIR_STORAGE_TYPE_FILE;
src->path = g_steal_pointer(&path);
} else { } else {
xmlNodePtr sourceNode; if (!nvramSourceNode)
if ((src->type = virStorageTypeFromString(nvramType)) <= 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unknown disk type '%s'"), nvramType);
return -1; return -1;
}
if (!(sourceNode = virXPathNode("./os/nvram/source[1]", ctxt))) { if (virDomainStorageSourceParse(nvramSourceNode, ctxt, src, flags, xmlopt) < 0)
virReportError(VIR_ERR_XML_ERROR, "%s",
_("Missing source element for nvram"));
return -1;
}
if (virDomainStorageSourceParse(sourceNode, ctxt, src, flags, xmlopt) < 0)
return -1; return -1;
loader->newStyleNVRAM = true; loader->newStyleNVRAM = true;
@ -18044,6 +18046,8 @@ virDomainLoaderDefParseXMLNvram(virDomainLoaderDef *loader,
static int static int
virDomainLoaderDefParseXML(virDomainLoaderDef *loader, virDomainLoaderDefParseXML(virDomainLoaderDef *loader,
xmlNodePtr loaderNode, xmlNodePtr loaderNode,
xmlNodePtr nvramNode,
xmlNodePtr nvramSourceNode,
xmlXPathContextPtr ctxt, xmlXPathContextPtr ctxt,
virDomainXMLOption *xmlopt, virDomainXMLOption *xmlopt,
unsigned int flags, unsigned int flags,
@ -18070,6 +18074,7 @@ virDomainLoaderDefParseXML(virDomainLoaderDef *loader,
return -1; return -1;
if (virDomainLoaderDefParseXMLNvram(loader, if (virDomainLoaderDefParseXMLNvram(loader,
nvramNode, nvramSourceNode,
ctxt, xmlopt, flags, ctxt, xmlopt, flags,
fwAutoSelect) < 0) fwAutoSelect) < 0)
return -1; return -1;
@ -18468,6 +18473,8 @@ virDomainDefParseBootLoaderOptions(virDomainDef *def,
unsigned int flags) unsigned int flags)
{ {
xmlNodePtr loaderNode = virXPathNode("./os/loader[1]", ctxt); xmlNodePtr loaderNode = virXPathNode("./os/loader[1]", ctxt);
xmlNodePtr nvramNode = virXPathNode("./os/nvram[1]", ctxt);
xmlNodePtr nvramSourceNode = virXPathNode("./os/nvram/source[1]", ctxt);
const bool fwAutoSelect = def->os.firmware != VIR_DOMAIN_OS_DEF_FIRMWARE_NONE; const bool fwAutoSelect = def->os.firmware != VIR_DOMAIN_OS_DEF_FIRMWARE_NONE;
if (!loaderNode) if (!loaderNode)
@ -18476,7 +18483,7 @@ virDomainDefParseBootLoaderOptions(virDomainDef *def,
def->os.loader = g_new0(virDomainLoaderDef, 1); def->os.loader = g_new0(virDomainLoaderDef, 1);
if (virDomainLoaderDefParseXML(def->os.loader, if (virDomainLoaderDefParseXML(def->os.loader,
loaderNode, loaderNode, nvramNode, nvramSourceNode,
ctxt, xmlopt, flags, ctxt, xmlopt, flags,
fwAutoSelect) < 0) fwAutoSelect) < 0)
return -1; return -1;