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

2016-04-18 Thread Cole Robinson
On 03/02/2016 01:55 PM, John Ferlan wrote:
> 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(-)
> 

ACK, mirrors virNetworkObjListGetNames and looks sensible on its own.

- Cole

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


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

2016-03-02 Thread John Ferlan
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