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
---
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
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list