]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
network_conf: Introduce virNetworkObjListGetNames
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 23 Feb 2015 16:37:17 +0000 (17:37 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 9 Mar 2015 13:03:30 +0000 (14:03 +0100)
An accessor following pattern laid out by virDomainObjList* APIs.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/conf/network_conf.c
src/conf/network_conf.h
src/libvirt_private.syms

index cb54e56571492dcce6f018090318a18aee17940b..fdf59076ef20c8f13f8a68727ce20f9679322c0b 100644 (file)
@@ -4317,3 +4317,41 @@ virNetworkObjListForEach(virNetworkObjListPtr nets,
 
     return ret;
 }
+
+int
+virNetworkObjListGetNames(virNetworkObjListPtr nets,
+                          bool active,
+                          char **names,
+                          int nnames,
+                          virNetworkObjListFilter filter,
+                          virConnectPtr conn)
+{
+    int got = 0;
+    size_t i;
+
+    for (i = 0; i < nets->count && got < nnames; i++) {
+        virNetworkObjPtr obj = nets->objs[i];
+        virNetworkObjLock(obj);
+        if (filter && !filter(conn, obj->def)) {
+            virNetworkObjUnlock(obj);
+            continue;
+        }
+
+        if ((active && virNetworkObjIsActive(obj)) ||
+            (!active && !virNetworkObjIsActive(obj))) {
+            if (VIR_STRDUP(names[got], obj->def->name) < 0) {
+                virNetworkObjUnlock(obj);
+                goto error;
+            }
+            got++;
+        }
+        virNetworkObjUnlock(obj);
+    }
+
+    return got;
+
+ error:
+    for (i = 0; i < got; i++)
+        VIR_FREE(names[i]);
+    return -1;
+}
index 749c7fbf62e7e0e5ce71de7cc9f340541be2d1cf..598ddc2192581615cd872476493b1ff638e2bb32 100644 (file)
@@ -451,6 +451,14 @@ typedef int (*virNetworkObjListIterator)(virNetworkObjPtr net,
 int virNetworkObjListForEach(virNetworkObjListPtr nets,
                              virNetworkObjListIterator callback,
                              void *opaque);
+
+int virNetworkObjListGetNames(virNetworkObjListPtr nets,
+                              bool active,
+                              char **names,
+                              int nnames,
+                              virNetworkObjListFilter filter,
+                              virConnectPtr conn);
+
 /* for testing */
 int
 virNetworkDefUpdateSection(virNetworkDefPtr def,
index 460730e28bf53aafb38e699ed2978f922b48c20a..203b888191868fa70ca3c186309f95793f1d4c3a 100644 (file)
@@ -571,6 +571,7 @@ virNetworkObjIsDuplicate;
 virNetworkObjListExport;
 virNetworkObjListForEach;
 virNetworkObjListFree;
+virNetworkObjListGetNames;
 virNetworkObjLock;
 virNetworkObjReplacePersistentDef;
 virNetworkObjSetDefTransient;