]> xenbits.xensource.com Git - libvirt.git/commitdiff
Change virNetDaemonGetServerNames to virNetDaemonGetServers
authorMartin Kletzander <mkletzan@redhat.com>
Tue, 1 Mar 2016 15:28:58 +0000 (16:28 +0100)
committerMartin Kletzander <mkletzan@redhat.com>
Fri, 11 Mar 2016 11:58:41 +0000 (12:58 +0100)
For now it does not matter which ones we return as the code is similarly
complex, however it will fit in with other constructs in the future,
mainly when we will be able to generate dispatch helpers.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
daemon/admin_server.c
src/libvirt_remote.syms
src/rpc/virnetdaemon.c
src/rpc/virnetdaemon.h

index 0ccb39e91c77a5cb181dc13080a58bed06264669..a35f3313060712eb333fa93582adbf055af6ed20 100644 (file)
@@ -42,33 +42,17 @@ adminDaemonListServers(virNetDaemonPtr dmn,
                        unsigned int flags)
 {
     int ret = -1;
-    const char **srv_names = NULL;
     virNetServerPtr *srvs = NULL;
-    size_t i;
-    ssize_t nsrvs = 0;
 
     virCheckFlags(0, -1);
 
-    if ((nsrvs = virNetDaemonGetServerNames(dmn, &srv_names)) < 0)
+    if ((ret = virNetDaemonGetServers(dmn, &srvs)) < 0)
         goto cleanup;
 
     if (servers) {
-        if (VIR_ALLOC_N(srvs, nsrvs) < 0)
-            goto cleanup;
-
-        for (i = 0; i < nsrvs; i++) {
-            if (!(srvs[i] = virNetDaemonGetServer(dmn, srv_names[i])))
-                goto cleanup;
-        }
-
         *servers = srvs;
         srvs = NULL;
     }
-
-    ret = nsrvs;
-
  cleanup:
-    VIR_FREE(srv_names);
-    virObjectListFree(srvs);
     return ret;
 }
index 4a3c5dfc8835302515c9d3f6943e63f8d3180f22..66f93833afda62bc8f8514c51a4a902977a171a5 100644 (file)
@@ -65,6 +65,7 @@ virNetDaemonAddSignalHandler;
 virNetDaemonAutoShutdown;
 virNetDaemonClose;
 virNetDaemonGetServer;
+virNetDaemonGetServers;
 virNetDaemonHasClients;
 virNetDaemonIsPrivileged;
 virNetDaemonNew;
index 9181ad7c474baf5407ec61748052d96f89a1cf21..c99914d2ba91a7bf21c1e8bbee7f59a0014913a7 100644 (file)
@@ -196,39 +196,54 @@ virNetDaemonGetServer(virNetDaemonPtr dmn,
 }
 
 
+struct collectData {
+    virNetServerPtr **servers;
+    size_t nservers;
+};
+
+
+static int
+collectServers(void *payload,
+               const void *name ATTRIBUTE_UNUSED,
+               void *opaque)
+{
+    virNetServerPtr srv = virObjectRef(payload);
+    struct collectData *data = opaque;
+
+    if (!srv)
+        return -1;
+
+    return VIR_APPEND_ELEMENT(*data->servers, data->nservers, srv);
+}
+
+
 /*
  * Returns number of names allocated in *servers, on error sets
  * *servers to NULL and returns -1.  List of *servers must be free()d,
  * but not the items in it (similarly to virHashGetItems).
  */
 ssize_t
-virNetDaemonGetServerNames(virNetDaemonPtr dmn,
-                           const char ***servers)
+virNetDaemonGetServers(virNetDaemonPtr dmn,
+                       virNetServerPtr **servers)
 {
-    virHashKeyValuePairPtr items = NULL;
-    size_t nservers = 0;
+    struct collectData data = { servers, 0 };
     ssize_t ret = -1;
-    size_t i;
 
     *servers = NULL;
 
     virObjectLock(dmn);
 
-    items = virHashGetItems(dmn->servers, NULL);
-    if (!items)
+    if (virHashForEach(dmn->servers, collectServers, &data) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                       _("Cannot get all servers from daemon"));
         goto cleanup;
-
-    for (i = 0; items[i].key; i++) {
-        if (VIR_APPEND_ELEMENT(*servers, nservers, items[i].key) < 0)
-            goto cleanup;
     }
 
-    ret = nservers;
+    ret = data.nservers;
 
  cleanup:
     if (ret < 0)
-        VIR_FREE(*servers);
-    VIR_FREE(items);
+        virObjectListFreeCount(*servers, data.nservers);
     virObjectUnlock(dmn);
     return ret;
 }
index 0084dfd6527aa122af2b6f79f273cf1fffabaebc..211009c5030a9e4f16db5fcbdc0767b33437cfb6 100644 (file)
@@ -82,6 +82,6 @@ bool virNetDaemonHasClients(virNetDaemonPtr dmn);
 
 virNetServerPtr virNetDaemonGetServer(virNetDaemonPtr dmn,
                                       const char *serverName);
-ssize_t virNetDaemonGetServerNames(virNetDaemonPtr dmn, const char ***servers);
+ssize_t virNetDaemonGetServers(virNetDaemonPtr dmn, virNetServerPtr **servers);
 
 #endif /* __VIR_NET_DAEMON_H__ */