From 1fac2b92d6c53655086a2cc3a653b8e78d92a043 Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Tue, 27 Aug 2013 21:15:24 +0200 Subject: iter: Add a p11_kit_iter_destroy_object() function Handy function since this is a common need. --- p11-kit/iter.c | 18 ++++++++++++++++++ p11-kit/iter.h | 1 + p11-kit/tests/test-iter.c | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) (limited to 'p11-kit') diff --git a/p11-kit/iter.c b/p11-kit/iter.c index e8e466c..6a3ad4a 100644 --- a/p11-kit/iter.c +++ b/p11-kit/iter.c @@ -731,6 +731,24 @@ p11_kit_iter_get_object (P11KitIter *iter) } /** + * 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 * @template: (array length=count) (inout): the attributes to load diff --git a/p11-kit/iter.h b/p11-kit/iter.h index 2ded9fe..0201db0 100644 --- a/p11-kit/iter.h +++ b/p11-kit/iter.h @@ -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 */ diff --git a/p11-kit/tests/test-iter.c b/p11-kit/tests/test-iter.c index 46b825e..b72795e 100644 --- a/p11-kit/tests/test-iter.c +++ b/p11-kit/tests/test-iter.c @@ -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); } -- cgit v1.1