[libvirt] [PATCH v2 01/24] network_conf: Introduce virNetworkObjListForEach

Michal Privoznik mprivozn at redhat.com
Thu Mar 5 11:05:02 UTC 2015


This API will be used in the future to call passed callback over
each network object in the list. It's slightly different to its
virDomainObjListForEach counterpart, because virDomainObjList
uses a hash table to store domain object, while virNetworkObjList
uses an array.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---
 src/conf/network_conf.c  | 27 +++++++++++++++++++++++++++
 src/conf/network_conf.h  |  6 ++++++
 src/libvirt_private.syms |  1 +
 3 files changed, 34 insertions(+)

diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index d0e7e1b..cb54e56 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -4290,3 +4290,30 @@ virNetworkObjListExport(virConnectPtr conn,
     VIR_FREE(tmp_nets);
     return ret;
 }
+
+/**
+ * virNetworkObjListForEach:
+ * @nets: a list of network objects
+ * @callback: function to call over each of object in the list
+ * @opaque: pointer to pass to the @callback
+ *
+ * Function iterates over the list of network objects and calls
+ * passed callback over each one of them.
+ *
+ * Returns: 0 on success, -1 otherwise.
+ */
+int
+virNetworkObjListForEach(virNetworkObjListPtr nets,
+                         virNetworkObjListIterator callback,
+                         void *opaque)
+{
+    int ret = 0;
+    size_t i = 0;
+
+    for (i = 0; i < nets->count; i++) {
+        if (callback(nets->objs[i], opaque) < 0)
+            ret = -1;
+    }
+
+    return ret;
+}
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index 16aea99..749c7fb 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -445,6 +445,12 @@ int virNetworkObjListExport(virConnectPtr conn,
                             virNetworkObjListFilter filter,
                             unsigned int flags);
 
+typedef int (*virNetworkObjListIterator)(virNetworkObjPtr net,
+                                         void *opaque);
+
+int virNetworkObjListForEach(virNetworkObjListPtr nets,
+                             virNetworkObjListIterator callback,
+                             void *opaque);
 /* for testing */
 int
 virNetworkDefUpdateSection(virNetworkDefPtr def,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 13e0931..a7285d8 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -569,6 +569,7 @@ virNetworkObjFree;
 virNetworkObjGetPersistentDef;
 virNetworkObjIsDuplicate;
 virNetworkObjListExport;
+virNetworkObjListForEach;
 virNetworkObjListFree;
 virNetworkObjLock;
 virNetworkObjReplacePersistentDef;
-- 
2.0.5




More information about the libvir-list mailing list