On Fri, Apr 16, 2021 at 14:20:55 +0200, Tim Wiederhake wrote:
Signed-off-by: Tim Wiederhake <twiederh(a)redhat.com>
---
src/conf/device_conf.c | 51 +++++++++++++++++-------------------------
1 file changed, 21 insertions(+), 30 deletions(-)
diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c
index 951b7a348e..621ff1b476 100644
--- a/src/conf/device_conf.c
+++ b/src/conf/device_conf.c
@@ -266,43 +266,34 @@ int
virDomainDeviceCCWAddressParseXML(xmlNodePtr node,
virDomainDeviceCCWAddress *addr)
{
- g_autofree char *cssid = virXMLPropString(node, "cssid");
- g_autofree char *ssid = virXMLPropString(node, "ssid");
- g_autofree char *devno = virXMLPropString(node, "devno");
+ int cssid, ssid, devno;
No multiple variable declarations on single line.
memset(addr, 0, sizeof(*addr));
+ if ((cssid = virXMLPropUInt(node, "cssid", 0, VIR_XML_PROP_OPTIONAL,
+ &addr->cssid)) < 0)
+ return -1;
+
+ if ((ssid = virXMLPropUInt(node, "ssid", 0, VIR_XML_PROP_OPTIONAL,
+ &addr->ssid)) < 0)
+ return -1;
+
+ if ((devno = virXMLPropUInt(node, "devno", 0, VIR_XML_PROP_OPTIONAL,
+ &addr->devno)) < 0)
+ return -1;
+
+ if (!virDomainDeviceCCWAddressIsValid(addr)) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Invalid specification for virtio ccw address:
cssid='%u' ssid='%u' devno='%u'"),
+ addr->cssid, addr->ssid, addr->devno);
This misrepresents user's input and could even be confusing. While the
parser uses 0 for number base autodetection, libvirt outputs the values
in hex format. (See the appropriate case in virDomainDeviceInfoFormat)
Reporting them as base 10 numbers could lead to a red herring chase.
+ return -1;
+ }