mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
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:
parent
f0e68d28e1
commit
bdd9ce0fda
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user