]> granicus.if.org Git - p11-kit/commitdiff
iter: Add a p11_kit_iter_destroy_object() function
authorStef Walter <stef@thewalter.net>
Tue, 27 Aug 2013 19:15:24 +0000 (21:15 +0200)
committerStef Walter <stef@thewalter.net>
Wed, 28 Aug 2013 12:00:17 +0000 (14:00 +0200)
Handy function since this is a common need.

doc/manual/p11-kit-sections.txt
p11-kit/iter.c
p11-kit/iter.h
p11-kit/tests/test-iter.c

index e066fe1c9a8461a05acb09073f3d069f8ae62eb0..28ebae0a7112f786cd59019421c3e73b698ab5aa 100644 (file)
@@ -113,6 +113,7 @@ p11_kit_iter_get_session
 p11_kit_iter_keep_session
 p11_kit_iter_get_object
 p11_kit_iter_load_attributes
+p11_kit_iter_destroy_object
 p11_kit_iter_free
 P11KitIterBehavior
 </SECTION>
index e8e466c0af55aa8884a3518a4381064fb93d955c..6a3ad4abddac088ad40f9e88b804c8a8f2cf190d 100644 (file)
@@ -730,6 +730,24 @@ p11_kit_iter_get_object (P11KitIter *iter)
        return iter->object;
 }
 
+/**
+ * p11_kit_iter_destroy_object:
+ * @iter: teh iterator
+ *
+ * Destory the current matching object.
+ *
+ * This can only be called after p11_kit_iter_next() succeeds.
+ *
+ * Returns: CKR_OK or a failure code
+ */
+CK_RV
+p11_kit_iter_destroy_object (P11KitIter *iter)
+{
+       return_val_if_fail (iter != NULL, CKR_GENERAL_ERROR);
+       return_val_if_fail (iter->iterating, CKR_GENERAL_ERROR);
+       return (iter->module->C_DestroyObject) (iter->session, iter->object);
+}
+
 /**
  * p11_kit_iter_load_attributes:
  * @iter: the iterator
index 2ded9fe372c40ca0097c129bb8ef2fdc0c4bf4b9..0201db0a56879bf63b1bc0c3809088a972939f59 100644 (file)
@@ -99,6 +99,7 @@ CK_RV                 p11_kit_iter_load_attributes          (P11KitIter *iter,
 
 CK_SESSION_HANDLE     p11_kit_iter_keep_session             (P11KitIter *iter);
 
+CK_RV                 p11_kit_iter_destroy_object           (P11KitIter *iter);
 
 #endif /* P11_KIT_FUTURE_UNSTABLE_API */
 
index 46b825e61c8bd029712067149b17f0b19a9f5e89..b72795e0d4b647edba2057ad2b5ba9be7e9b3fe0 100644 (file)
@@ -1182,6 +1182,45 @@ test_many (void *flags)
        assert (rv == CKR_OK);
 }
 
+static void
+test_destroy_object (void)
+{
+       CK_FUNCTION_LIST **modules;
+       P11KitIter *iter;
+       CK_OBJECT_HANDLE object;
+       CK_SESSION_HANDLE session;
+       CK_FUNCTION_LIST *module;
+       CK_ULONG size;
+       CK_RV rv;
+
+       modules = initialize_and_get_modules ();
+
+       iter = p11_kit_iter_new (NULL, P11_KIT_ITER_WANT_WRITABLE);
+
+       p11_kit_iter_begin (iter, modules);
+
+       /* Should have matched */
+       rv = p11_kit_iter_next (iter);
+       assert_num_eq (rv, CKR_OK);
+
+       object = p11_kit_iter_get_object (iter);
+       session = p11_kit_iter_get_session (iter);
+       module = p11_kit_iter_get_module (iter);
+
+       rv = (module->C_GetObjectSize) (session, object, &size);
+       assert_num_eq (rv, CKR_OK);
+
+       rv = p11_kit_iter_destroy_object (iter);
+       assert_num_eq (rv, CKR_OK);
+
+       rv = (module->C_GetObjectSize) (session, object, &size);
+       assert_num_eq (rv, CKR_OBJECT_HANDLE_INVALID);
+
+       p11_kit_iter_free (iter);
+
+       finalize_and_free_modules (modules);
+}
+
 int
 main (int argc,
       char *argv[])
@@ -1218,6 +1257,7 @@ main (int argc,
        p11_test (test_load_attributes_fail_late, "/iter/test_load_attributes_fail_late");
        p11_testx (test_many, "", "/iter/test-many");
        p11_testx (test_many, "busy-sessions", "/iter/test-many-busy");
+       p11_test (test_destroy_object, "/iter/destroy-object");
 
        return p11_test_run (argc, argv);
 }