]> xenbits.xensource.com Git - libvirt.git/commitdiff
Split out USB port parsing
authorJán Tomko <jtomko@redhat.com>
Thu, 16 Jun 2016 13:00:27 +0000 (15:00 +0200)
committerJán Tomko <jtomko@redhat.com>
Wed, 22 Jun 2016 19:33:57 +0000 (21:33 +0200)
Make rewriting it easier.

src/conf/domain_conf.c

index 75ad03f49aa4da551c2394104dc66060ccb2c243..a0feb24b1f1e28acc2eaf39eeb8f9252d5b1af02 100644 (file)
@@ -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 <address> '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 <address> 'port' attribute"));
+    if (port && virDomainDeviceUSBAddressParsePort(port) < 0)
         goto cleanup;
-    }
 
     addr->port = port;
     port = NULL;