[libvirt] [PATCH 08/10] secret: Introduce virSecretObjListGetUUIDs

John Ferlan jferlan at redhat.com
Wed Mar 2 18:55:05 UTC 2016


Add function to return counted listed of uuids to from the hashed secrets
object list. This will replace the guts of secretConnectListSecrets.

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 src/conf/secret_conf.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++-
 src/conf/secret_conf.h |  6 ++++++
 2 files changed, 58 insertions(+), 1 deletion(-)

diff --git a/src/conf/secret_conf.c b/src/conf/secret_conf.c
index 92ac4cd..0e73c2d 100644
--- a/src/conf/secret_conf.c
+++ b/src/conf/secret_conf.c
@@ -473,6 +473,9 @@ struct virSecretObjListGetHelperData {
     virConnectPtr conn;
     virSecretObjListACLFilter filter;
     int got;
+    char **uuids;
+    int nuuids;
+    bool error;
 };
 
 
@@ -484,11 +487,27 @@ virSecretObjListGetHelper(void *payload,
     struct virSecretObjListGetHelperData *data = opaque;
     virSecretObjPtr obj = payload;
 
+    if (data->error)
+        return 0;
+
+    if (data->nuuids >= 0 && data->got == data->nuuids)
+        return 0;
+
     virObjectLock(obj);
 
     if (data->filter && !data->filter(data->conn, obj->def))
         goto cleanup;
 
+    if (data->uuids) {
+        char *uuidstr;
+
+        if (VIR_ALLOC_N(uuidstr, VIR_UUID_STRING_BUFLEN) < 0)
+            goto cleanup;
+
+        virUUIDFormat(obj->def->uuid, uuidstr);
+        data->uuids[data->got] = uuidstr;
+    }
+
     data->got++;
 
  cleanup:
@@ -503,7 +522,8 @@ virSecretObjListNumOfSecrets(virSecretObjListPtr secrets,
                              virConnectPtr conn)
 {
     struct virSecretObjListGetHelperData data = {
-        .conn = conn, .filter = filter, .got = 0 };
+        .conn = conn, .filter = filter, .got = 0,
+        .uuids = NULL, .nuuids = -1, .error = false };
 
     virObjectLock(secrets);
     virHashForEach(secrets->objs, virSecretObjListGetHelper, &data);
@@ -630,6 +650,37 @@ virSecretObjListExport(virConnectPtr conn,
 }
 
 
+int
+virSecretObjListGetUUIDs(virSecretObjListPtr secrets,
+                         char **uuids,
+                         int nuuids,
+                         virSecretObjListACLFilter filter,
+                         virConnectPtr conn)
+{
+    int ret = -1;
+
+    struct virSecretObjListGetHelperData data = {
+        .conn = conn, .filter = filter, .got = 0,
+        .uuids = uuids, .nuuids = nuuids, .error = false };
+
+    virObjectLock(secrets);
+    virHashForEach(secrets->objs, virSecretObjListGetHelper, &data);
+    virObjectUnlock(secrets);
+
+    if (data.error)
+        goto cleanup;
+
+    ret = data.got;
+
+ cleanup:
+    if (ret < 0) {
+        while (data.got)
+            VIR_FREE(data.uuids[--data.got]);
+    }
+    return ret;
+}
+
+
 void
 virSecretDefFree(virSecretDefPtr def)
 {
diff --git a/src/conf/secret_conf.h b/src/conf/secret_conf.h
index a3acd54..15b07d5 100644
--- a/src/conf/secret_conf.h
+++ b/src/conf/secret_conf.h
@@ -107,6 +107,12 @@ int virSecretObjListExport(virConnectPtr conn,
                            virSecretObjListACLFilter filter,
                            unsigned int flags);
 
+int virSecretObjListGetUUIDs(virSecretObjListPtr secrets,
+                             char **uuids,
+                             int nuuids,
+                             virSecretObjListACLFilter filter,
+                             virConnectPtr conn);
+
 void virSecretDefFree(virSecretDefPtr def);
 virSecretDefPtr virSecretDefParseString(const char *xml);
 virSecretDefPtr virSecretDefParseFile(const char *filename);
-- 
2.5.0




More information about the libvir-list mailing list