]> xenbits.xensource.com Git - libvirt.git/commitdiff
secret: Introduce virSecretObjListNumOfSecrets
authorJohn Ferlan <jferlan@redhat.com>
Sun, 28 Feb 2016 14:34:21 +0000 (09:34 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Mon, 25 Apr 2016 19:45:29 +0000 (15:45 -0400)
Add function to count the hashed secret obj list with filters. This
will replace the guts of secret_driver's secretConnectNumOfSecrets.

src/conf/virsecretobj.c
src/conf/virsecretobj.h

index b808902f296e9d9e1d9fd980b4d77291514cd8cd..7f103e3bd2e2d39041c4d7faa1e2c9b8c35ee2e3 100644 (file)
@@ -430,3 +430,47 @@ virSecretObjListAdd(virSecretObjListPtr secrets,
     virObjectUnlock(secrets);
     return ret;
 }
+
+
+struct virSecretObjListGetHelperData {
+    virConnectPtr conn;
+    virSecretObjListACLFilter filter;
+    int got;
+};
+
+
+static int
+virSecretObjListGetHelper(void *payload,
+                          const void *name ATTRIBUTE_UNUSED,
+                          void *opaque)
+{
+    struct virSecretObjListGetHelperData *data = opaque;
+    virSecretObjPtr obj = payload;
+
+    virObjectLock(obj);
+
+    if (data->filter && !data->filter(data->conn, obj->def))
+        goto cleanup;
+
+    data->got++;
+
+ cleanup:
+    virObjectUnlock(obj);
+    return 0;
+}
+
+
+int
+virSecretObjListNumOfSecrets(virSecretObjListPtr secrets,
+                             virSecretObjListACLFilter filter,
+                             virConnectPtr conn)
+{
+    struct virSecretObjListGetHelperData data = {
+        .conn = conn, .filter = filter, .got = 0 };
+
+    virObjectLock(secrets);
+    virHashForEach(secrets->objs, virSecretObjListGetHelper, &data);
+    virObjectUnlock(secrets);
+
+    return data.got;
+}
index 290e91b84a4ad29442eead54e5eebaa159fca993..7f0d40a25656ae724456bc0d05522186263a42d0 100644 (file)
@@ -73,4 +73,11 @@ virSecretObjPtr virSecretObjListAdd(virSecretObjListPtr secrets,
                                     const char *configDir,
                                     virSecretDefPtr *oldDef);
 
+typedef bool (*virSecretObjListACLFilter)(virConnectPtr conn,
+                                          virSecretDefPtr def);
+
+int virSecretObjListNumOfSecrets(virSecretObjListPtr secrets,
+                                 virSecretObjListACLFilter filter,
+                                 virConnectPtr conn);
+
 #endif /* __VIRSECRETOBJ_H__ */