From 0956d9b2a3e27f146e459d3d02f274ff90898891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Thu, 16 Jun 2016 15:00:27 +0200 Subject: [PATCH] Split out USB port parsing Make rewriting it easier. --- src/conf/domain_conf.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 75ad03f49a..a0feb24b1f 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -5100,12 +5100,31 @@ virDomainDeviceCcidAddressParseXML(xmlNodePtr node, return ret; } +static int +virDomainDeviceUSBAddressParsePort(char *port) +{ + unsigned int p; + char *tmp; + + if ((virStrToLong_uip(port, &tmp, 10, &p) < 0 || (*tmp != '\0' && *tmp != '.')) || + (*tmp == '.' && (virStrToLong_ui(tmp + 1, &tmp, 10, &p) < 0 || (*tmp != '\0' && *tmp != '.'))) || + (*tmp == '.' && (virStrToLong_ui(tmp + 1, &tmp, 10, &p) < 0 || (*tmp != '\0' && *tmp != '.'))) || + (*tmp == '.' && (virStrToLong_ui(tmp + 1, &tmp, 10, &p) < 0 || (*tmp != '\0')))) + goto error; + + return 0; + + error: + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot parse
'port' attribute")); + return -1; +} + static int virDomainDeviceUSBAddressParseXML(xmlNodePtr node, virDomainDeviceUSBAddressPtr addr) { - char *port, *bus, *tmp; - unsigned int p; + char *port, *bus; int ret = -1; memset(addr, 0, sizeof(*addr)); @@ -5113,15 +5132,8 @@ virDomainDeviceUSBAddressParseXML(xmlNodePtr node, port = virXMLPropString(node, "port"); bus = virXMLPropString(node, "bus"); - if (port && - ((virStrToLong_uip(port, &tmp, 10, &p) < 0 || (*tmp != '\0' && *tmp != '.')) || - (*tmp == '.' && (virStrToLong_ui(tmp + 1, &tmp, 10, &p) < 0 || (*tmp != '\0' && *tmp != '.'))) || - (*tmp == '.' && (virStrToLong_ui(tmp + 1, &tmp, 10, &p) < 0 || (*tmp != '\0' && *tmp != '.'))) || - (*tmp == '.' && (virStrToLong_ui(tmp + 1, &tmp, 10, &p) < 0 || (*tmp != '\0'))))) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Cannot parse
'port' attribute")); + if (port && virDomainDeviceUSBAddressParsePort(port) < 0) goto cleanup; - } addr->port = port; port = NULL;