From: Ján Tomko Date: Thu, 16 Jun 2016 13:00:27 +0000 (+0200) Subject: Split out USB port parsing X-Git-Tag: v2.0.0-rc1~97 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0956d9b2a3e27f146e459d3d02f274ff90898891;p=thirdparty%2Flibvirt.git Split out USB port parsing Make rewriting it easier. --- 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;