mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-11-08 22:39:56 +00:00
conf: use virXMLPropString for boot parsing
XPath is good for random search of elements, not for accessing attributes of one node. Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
8cf6eb4612
commit
0b36d6cb08
@ -16039,6 +16039,7 @@ virDomainDefParseBootXML(xmlXPathContextPtr ctxt,
|
|||||||
virDomainDefPtr def)
|
virDomainDefPtr def)
|
||||||
{
|
{
|
||||||
xmlNodePtr *nodes = NULL;
|
xmlNodePtr *nodes = NULL;
|
||||||
|
xmlNodePtr node;
|
||||||
size_t i;
|
size_t i;
|
||||||
int n;
|
int n;
|
||||||
char *tmp = NULL;
|
char *tmp = NULL;
|
||||||
@ -16088,62 +16089,66 @@ virDomainDefParseBootXML(xmlXPathContextPtr ctxt,
|
|||||||
def->os.bootDevs[0] = VIR_DOMAIN_BOOT_DISK;
|
def->os.bootDevs[0] = VIR_DOMAIN_BOOT_DISK;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = virXPathString("string(./os/bootmenu[1]/@enable)", ctxt);
|
if ((node = virXPathNode("./os/bootmenu[1]", ctxt))) {
|
||||||
if (tmp) {
|
tmp = virXMLPropString(node, "enable");
|
||||||
def->os.bootmenu = virTristateBoolTypeFromString(tmp);
|
if (tmp) {
|
||||||
if (def->os.bootmenu <= 0) {
|
def->os.bootmenu = virTristateBoolTypeFromString(tmp);
|
||||||
/* In order not to break misconfigured machines, this
|
if (def->os.bootmenu <= 0) {
|
||||||
* should not emit an error, but rather set the bootmenu
|
/* In order not to break misconfigured machines, this
|
||||||
* to disabled */
|
* should not emit an error, but rather set the bootmenu
|
||||||
VIR_WARN("disabling bootmenu due to unknown option '%s'",
|
* to disabled */
|
||||||
tmp);
|
VIR_WARN("disabling bootmenu due to unknown option '%s'",
|
||||||
def->os.bootmenu = VIR_TRISTATE_BOOL_NO;
|
tmp);
|
||||||
|
def->os.bootmenu = VIR_TRISTATE_BOOL_NO;
|
||||||
|
}
|
||||||
|
VIR_FREE(tmp);
|
||||||
}
|
}
|
||||||
VIR_FREE(tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
tmp = virXPathString("string(./os/bootmenu[1]/@timeout)", ctxt);
|
tmp = virXMLPropString(node, "timeout");
|
||||||
if (tmp && def->os.bootmenu == VIR_TRISTATE_BOOL_YES) {
|
if (tmp && def->os.bootmenu == VIR_TRISTATE_BOOL_YES) {
|
||||||
if (virStrToLong_uip(tmp, NULL, 0, &def->os.bm_timeout) < 0 ||
|
if (virStrToLong_uip(tmp, NULL, 0, &def->os.bm_timeout) < 0 ||
|
||||||
def->os.bm_timeout > 65535) {
|
def->os.bm_timeout > 65535) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
|
||||||
_("invalid value for boot menu timeout, "
|
|
||||||
"must be in range [0,65535]"));
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
def->os.bm_timeout_set = true;
|
|
||||||
}
|
|
||||||
VIR_FREE(tmp);
|
|
||||||
|
|
||||||
tmp = virXPathString("string(./os/bios[1]/@useserial)", ctxt);
|
|
||||||
if (tmp) {
|
|
||||||
if (STREQ(tmp, "yes")) {
|
|
||||||
if (virXPathULong("count(./devices/serial)",
|
|
||||||
ctxt, &serialPorts) < 0) {
|
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("need at least one serial port "
|
_("invalid value for boot menu timeout, "
|
||||||
"for useserial"));
|
"must be in range [0,65535]"));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
def->os.bios.useserial = VIR_TRISTATE_BOOL_YES;
|
def->os.bm_timeout_set = true;
|
||||||
} else {
|
|
||||||
def->os.bios.useserial = VIR_TRISTATE_BOOL_NO;
|
|
||||||
}
|
}
|
||||||
VIR_FREE(tmp);
|
VIR_FREE(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = virXPathString("string(./os/bios[1]/@rebootTimeout)", ctxt);
|
if ((node = virXPathNode("./os/bios[1]", ctxt))) {
|
||||||
if (tmp) {
|
tmp = virXMLPropString(node, "useserial");
|
||||||
/* that was really just for the check if it is there */
|
if (tmp) {
|
||||||
|
if (STREQ(tmp, "yes")) {
|
||||||
if (virStrToLong_i(tmp, NULL, 0, &def->os.bios.rt_delay) < 0 ||
|
if (virXPathULong("count(./devices/serial)",
|
||||||
def->os.bios.rt_delay < -1 || def->os.bios.rt_delay > 65535) {
|
ctxt, &serialPorts) < 0) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("invalid value for rebootTimeout, "
|
_("need at least one serial port "
|
||||||
"must be in range [-1,65535]"));
|
"for useserial"));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
}
|
||||||
|
def->os.bios.useserial = VIR_TRISTATE_BOOL_YES;
|
||||||
|
} else {
|
||||||
|
def->os.bios.useserial = VIR_TRISTATE_BOOL_NO;
|
||||||
|
}
|
||||||
|
VIR_FREE(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp = virXMLPropString(node, "rebootTimeout");
|
||||||
|
if (tmp) {
|
||||||
|
/* that was really just for the check if it is there */
|
||||||
|
|
||||||
|
if (virStrToLong_i(tmp, NULL, 0, &def->os.bios.rt_delay) < 0 ||
|
||||||
|
def->os.bios.rt_delay < -1 || def->os.bios.rt_delay > 65535) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
|
_("invalid value for rebootTimeout, "
|
||||||
|
"must be in range [-1,65535]"));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
def->os.bios.rt_set = true;
|
||||||
}
|
}
|
||||||
def->os.bios.rt_set = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user