[libvirt] [PATCH 02/12] conf: use VIR_(INSERT_DELETE)_ELEMENTS in virNetworkUpdate backend

Laine Stump laine at laine.org
Sat Oct 20 09:20:26 UTC 2012


The already-written backend functions for virNetworkUpdate that add
and delete items into lists within the a network were already debugged
to work properly, but future such functions will use
VIR_(INSERT|DELETE)_ELEMENTS_N instead, so these are changed for
uniformity.
---
 src/conf/network_conf.c | 94 +++++++++++++++----------------------------------
 src/conf/network_conf.h | 10 +++---
 2 files changed, 33 insertions(+), 71 deletions(-)

diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 8ad72e7..a8c42a0 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -2453,27 +2453,15 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
                 goto cleanup;
             }
         }
+
         /* add to beginning/end of list */
-        if (VIR_REALLOC_N(ipdef->hosts, ipdef->nhosts +1) < 0) {
+        if (VIR_INSERT_ELEMENTS_N(ipdef->hosts,
+                                  command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST
+                                  ? 0 : ipdef->nhosts,
+                                  ipdef->nhosts, 1, &host) < 0) {
             virReportOOMError();
             goto cleanup;
         }
-
-        if (command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST) {
-
-            ipdef->hosts[ipdef->nhosts] = host;
-            ipdef->nhosts++;
-            memset(&host, 0, sizeof(host));
-
-        } else { /* implied (command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST) */
-
-            memmove(ipdef->hosts + 1, ipdef->hosts,
-                    sizeof(*ipdef->hosts) * ipdef->nhosts);
-            ipdef->hosts[0] = host;
-            ipdef->nhosts++;
-            memset(&host, 0, sizeof(host));
-        }
-
     } else if (command == VIR_NETWORK_UPDATE_COMMAND_DELETE) {
 
         if (virNetworkDHCPHostDefParseXML(def->name, ctxt->node, &host, false) < 0)
@@ -2499,10 +2487,8 @@ virNetworkDefUpdateIPDHCPHost(virNetworkDefPtr def,
 
         /* remove it */
         virNetworkDHCPHostDefClear(&ipdef->hosts[ii]);
-        memmove(ipdef->hosts + ii, ipdef->hosts + ii + 1,
-                sizeof(*ipdef->hosts) * (ipdef->nhosts - ii - 1));
-        ipdef->nhosts--;
-        ignore_value(VIR_REALLOC_N(ipdef->hosts, ipdef->nhosts));
+        ignore_value(VIR_DELETE_ELEMENTS_N(ipdef->hosts, ii, ipdef->nhosts, 1));
+
     } else {
         virNetworkDefUpdateUnknownCommand(command);
         goto cleanup;
@@ -2573,21 +2559,14 @@ virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr def,
         }
 
         /* add to beginning/end of list */
-        if (VIR_REALLOC_N(ipdef->ranges, ipdef->nranges +1) < 0) {
+        if (VIR_INSERT_ELEMENTS_N(ipdef->ranges,
+                                  command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST
+                                  ? 0 : ipdef->nranges,
+                                  ipdef->nranges, 1, &range) < 0) {
             virReportOOMError();
             goto cleanup;
         }
 
-        if (command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST) {
-            ipdef->ranges[ipdef->nranges] = range;
-        } else { /* implied (command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST) */
-            memmove(ipdef->ranges + 1, ipdef->ranges,
-                    sizeof(*ipdef->ranges) * ipdef->nranges);
-            ipdef->ranges[0] = range;
-        }
-        ipdef->nranges++;
-        memset(&range, 0, sizeof(range));
-
     } else if (command == VIR_NETWORK_UPDATE_COMMAND_DELETE) {
 
         if (ii == ipdef->nranges) {
@@ -2599,10 +2578,9 @@ virNetworkDefUpdateIPDHCPRange(virNetworkDefPtr def,
 
         /* remove it */
         /* NB: nothing to clear from a RangeDef that's being freed */
-        memmove(ipdef->ranges + ii, ipdef->ranges + ii + 1,
-                sizeof(*ipdef->ranges) * (ipdef->nranges - ii - 1));
-        ipdef->nranges--;
-        ignore_value(VIR_REALLOC_N(ipdef->ranges, ipdef->nranges));
+        ignore_value(VIR_DELETE_ELEMENTS_N(ipdef->ranges, ii,
+                                           ipdef->nranges, 1));
+
     } else {
         virNetworkDefUpdateUnknownCommand(command);
         goto cleanup;
@@ -2677,21 +2655,14 @@ virNetworkDefUpdateForwardInterface(virNetworkDefPtr def,
         }
 
         /* add to beginning/end of list */
-        if (VIR_REALLOC_N(def->forwardIfs, def->nForwardIfs + 1) < 0) {
+        if (VIR_INSERT_ELEMENTS_N(def->forwardIfs,
+                                  command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST
+                                  ? 0 : def->nForwardIfs,
+                                  def->nForwardIfs, 1, &iface) < 0) {
             virReportOOMError();
             goto cleanup;
         }
 
-        if (command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST) {
-            def->forwardIfs[def->nForwardIfs] = iface;
-        } else { /* implied (command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST) */
-            memmove(def->forwardIfs + 1, def->forwardIfs,
-                    sizeof(*def->forwardIfs) * def->nForwardIfs);
-            def->forwardIfs[0] = iface;
-        }
-        def->nForwardIfs++;
-        memset(&iface, 0, sizeof(iface));
-
     } else if (command == VIR_NETWORK_UPDATE_COMMAND_DELETE) {
 
         if (ii == def->nForwardIfs) {
@@ -2715,10 +2686,9 @@ virNetworkDefUpdateForwardInterface(virNetworkDefPtr def,
 
         /* remove it */
         virNetworkForwardIfDefClear(&def->forwardIfs[ii]);
-        memmove(def->forwardIfs + ii, def->forwardIfs + ii + 1,
-                sizeof(*def->forwardIfs) * (def->nForwardIfs - ii - 1));
-        def->nForwardIfs--;
-        ignore_value(VIR_REALLOC_N(def->forwardIfs, def->nForwardIfs));
+        ignore_value(VIR_DELETE_ELEMENTS_N(def->forwardIfs, ii,
+                                           def->nForwardIfs, 1));
+
     } else {
         virNetworkDefUpdateUnknownCommand(command);
         goto cleanup;
@@ -2813,29 +2783,21 @@ virNetworkDefUpdatePortGroup(virNetworkDefPtr def,
         (command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST)) {
 
         /* add to beginning/end of list */
-        if (VIR_REALLOC_N(def->portGroups, def->nPortGroups +1) < 0) {
+        if (VIR_INSERT_ELEMENTS_N(def->portGroups,
+                                  command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST
+                                  ? 0 : def->nPortGroups,
+                                  def->nPortGroups, 1, &portgroup) < 0) {
             virReportOOMError();
             goto cleanup;
         }
 
-        if (command == VIR_NETWORK_UPDATE_COMMAND_ADD_LAST) {
-            def->portGroups[def->nPortGroups] = portgroup;
-        } else { /* implied (command == VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST) */
-            memmove(def->portGroups + 1, def->portGroups,
-                    sizeof(*def->portGroups) * def->nPortGroups);
-            def->portGroups[0] = portgroup;
-        }
-        def->nPortGroups++;
-        memset(&portgroup, 0, sizeof(portgroup));
-
     } else if (command == VIR_NETWORK_UPDATE_COMMAND_DELETE) {
 
         /* remove it */
         virPortGroupDefClear(&def->portGroups[foundName]);
-        memmove(def->portGroups + foundName, def->portGroups + foundName + 1,
-                sizeof(*def->portGroups) * (def->nPortGroups - foundName - 1));
-        def->nPortGroups--;
-        ignore_value(VIR_REALLOC_N(def->portGroups, def->nPortGroups));
+        ignore_value(VIR_DELETE_ELEMENTS_N(def->portGroups, foundName,
+                                           def->nPortGroups, 1));
+
     } else {
         virNetworkDefUpdateUnknownCommand(command);
         goto cleanup;
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index 1b22cc2..7d90a19 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -106,11 +106,11 @@ struct _virNetworkDNSHostDef {
 typedef struct _virNetworkDNSDef virNetworkDNSDef;
 typedef virNetworkDNSDef *virNetworkDNSDefPtr;
 struct _virNetworkDNSDef {
-    unsigned int ntxts;
+    size_t ntxts;
     virNetworkDNSTxtDefPtr txts;
-    unsigned int nhosts;
+    size_t nhosts;
     virNetworkDNSHostDefPtr hosts;
-    unsigned int nsrvs;
+    size_t nsrvs;
     virNetworkDNSSrvDefPtr srvs;
 };
 
@@ -131,10 +131,10 @@ struct _virNetworkIpDef {
     unsigned int prefix;        /* ipv6 - only prefix allowed */
     virSocketAddr netmask;      /* ipv4 - either netmask or prefix specified */
 
-    unsigned int nranges;        /* Zero or more dhcp ranges */
+    size_t nranges;             /* Zero or more dhcp ranges */
     virNetworkDHCPRangeDefPtr ranges;
 
-    unsigned int nhosts;         /* Zero or more dhcp hosts */
+    size_t nhosts;              /* Zero or more dhcp hosts */
     virNetworkDHCPHostDefPtr hosts;
 
     char *tftproot;
-- 
1.7.11.7




More information about the libvir-list mailing list