mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
util: add virXMLPropUIntDefault() function
This function allows you to specify a default value to return if the property is not found rather than always setting *result to 0. Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
8a3cd801f2
commit
c650e460bd
@ -561,7 +561,6 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((topology = virXPathNode("./topology[1]", ctxt))) {
|
if ((topology = virXPathNode("./topology[1]", ctxt))) {
|
||||||
int rc;
|
|
||||||
|
|
||||||
if (virXMLPropUInt(topology, "sockets", 10,
|
if (virXMLPropUInt(topology, "sockets", 10,
|
||||||
VIR_XML_PROP_REQUIRED | VIR_XML_PROP_NONZERO,
|
VIR_XML_PROP_REQUIRED | VIR_XML_PROP_NONZERO,
|
||||||
@ -569,12 +568,10 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((rc = virXMLPropUInt(topology, "dies", 10,
|
if (virXMLPropUIntDefault(topology, "dies", 10,
|
||||||
VIR_XML_PROP_NONZERO,
|
VIR_XML_PROP_NONZERO,
|
||||||
&def->dies)) < 0) {
|
&def->dies, 1) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
} else if (rc == 0) {
|
|
||||||
def->dies = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (virXMLPropUInt(topology, "cores", 10,
|
if (virXMLPropUInt(topology, "cores", 10,
|
||||||
|
@ -17085,7 +17085,6 @@ virDomainVcpuParse(virDomainDef *def,
|
|||||||
unsigned int vcpus;
|
unsigned int vcpus;
|
||||||
g_autofree char *tmp = NULL;
|
g_autofree char *tmp = NULL;
|
||||||
g_autofree xmlNodePtr *nodes = NULL;
|
g_autofree xmlNodePtr *nodes = NULL;
|
||||||
int rc;
|
|
||||||
|
|
||||||
vcpus = maxvcpus = 1;
|
vcpus = maxvcpus = 1;
|
||||||
|
|
||||||
@ -17100,11 +17099,8 @@ virDomainVcpuParse(virDomainDef *def,
|
|||||||
}
|
}
|
||||||
VIR_FREE(tmp);
|
VIR_FREE(tmp);
|
||||||
|
|
||||||
if ((rc = virXMLPropUInt(vcpuNode, "current", 10, VIR_XML_PROP_NONE, &vcpus)) < 0) {
|
if (virXMLPropUIntDefault(vcpuNode, "current", 10, VIR_XML_PROP_NONE, &vcpus, maxvcpus) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
} else if (rc == 0) {
|
|
||||||
vcpus = maxvcpus;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (virXMLPropEnumDefault(vcpuNode, "placement",
|
if (virXMLPropEnumDefault(vcpuNode, "placement",
|
||||||
virDomainCpuPlacementModeTypeFromString,
|
virDomainCpuPlacementModeTypeFromString,
|
||||||
|
@ -916,16 +916,11 @@ virDomainNumaDefParseXML(virDomainNuma *def,
|
|||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
VIR_XPATH_NODE_AUTORESTORE(ctxt)
|
VIR_XPATH_NODE_AUTORESTORE(ctxt)
|
||||||
g_autofree char *tmp = NULL;
|
g_autofree char *tmp = NULL;
|
||||||
int rc;
|
|
||||||
unsigned int cur_cell;
|
unsigned int cur_cell;
|
||||||
|
|
||||||
if ((rc = virXMLPropUInt(cell[i], "id", 10, VIR_XML_PROP_NONE,
|
if (virXMLPropUIntDefault(cell[i], "id", 10, VIR_XML_PROP_NONE, &cur_cell, i) < 0)
|
||||||
&cur_cell)) < 0)
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (rc == 0)
|
|
||||||
cur_cell = i;
|
|
||||||
|
|
||||||
/* cells are in order of parsing or explicitly numbered */
|
/* cells are in order of parsing or explicitly numbered */
|
||||||
if (cur_cell >= n) {
|
if (cur_cell >= n) {
|
||||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||||
|
@ -560,12 +560,39 @@ virXMLPropUInt(xmlNodePtr node,
|
|||||||
int base,
|
int base,
|
||||||
virXMLPropFlags flags,
|
virXMLPropFlags flags,
|
||||||
unsigned int *result)
|
unsigned int *result)
|
||||||
|
{
|
||||||
|
return virXMLPropUIntDefault(node, name, base, flags, result, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virXMLPropUIntDefault:
|
||||||
|
* @node: XML dom node pointer
|
||||||
|
* @name: Name of the property (attribute) to get
|
||||||
|
* @base: Number base, see strtol
|
||||||
|
* @flags: Bitwise-OR of virXMLPropFlags
|
||||||
|
* @result: The returned value
|
||||||
|
* @defaultResult: Default value of @result in case the property is not found
|
||||||
|
*
|
||||||
|
* Convenience function to return value of an unsigned integer attribute.
|
||||||
|
*
|
||||||
|
* Returns 1 in case of success in which case @result is set,
|
||||||
|
* or 0 if the attribute is not present,
|
||||||
|
* or -1 and reports an error on failure.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virXMLPropUIntDefault(xmlNodePtr node,
|
||||||
|
const char *name,
|
||||||
|
int base,
|
||||||
|
virXMLPropFlags flags,
|
||||||
|
unsigned int *result,
|
||||||
|
unsigned int defaultResult)
|
||||||
{
|
{
|
||||||
g_autofree char *tmp = NULL;
|
g_autofree char *tmp = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
|
|
||||||
*result = 0;
|
*result = defaultResult;
|
||||||
|
|
||||||
if (!(tmp = virXMLPropString(node, name))) {
|
if (!(tmp = virXMLPropString(node, name))) {
|
||||||
if (!(flags & VIR_XML_PROP_REQUIRED))
|
if (!(flags & VIR_XML_PROP_REQUIRED))
|
||||||
|
@ -132,6 +132,15 @@ virXMLPropUInt(xmlNodePtr node,
|
|||||||
unsigned int *result)
|
unsigned int *result)
|
||||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(5);
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(5);
|
||||||
|
|
||||||
|
int
|
||||||
|
virXMLPropUIntDefault(xmlNodePtr node,
|
||||||
|
const char *name,
|
||||||
|
int base,
|
||||||
|
virXMLPropFlags flags,
|
||||||
|
unsigned int *result,
|
||||||
|
unsigned int defaultResult)
|
||||||
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(5);
|
||||||
|
|
||||||
int
|
int
|
||||||
virXMLPropLongLong(xmlNodePtr node,
|
virXMLPropLongLong(xmlNodePtr node,
|
||||||
const char *name,
|
const char *name,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user