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(a)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