diff options
author | Stef Walter <stef@memberwebs.com> | 2007-05-06 14:27:39 +0000 |
---|---|---|
committer | Stef Walter <stef@memberwebs.com> | 2007-05-06 14:27:39 +0000 |
commit | 8ddd21cad4109c44a388acaab72507b8f54e4c35 (patch) | |
tree | 203961770737cdcdd598204c12b0f64c22a6b7cc /ckcapi-session.c | |
parent | 80ca168a6b656dfc7bcc0cc32e90391b66b6bf4c (diff) |
Fix problem with objects going away due to duplicates.
Diffstat (limited to 'ckcapi-session.c')
-rw-r--r-- | ckcapi-session.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/ckcapi-session.c b/ckcapi-session.c index dc35ce0..5daae6e 100644 --- a/ckcapi-session.c +++ b/ckcapi-session.c @@ -550,7 +550,7 @@ void purge_duplicate_objects(CkCapiArray* arr) { CkCapiHash* checks; - CkCapiObject* v; + CK_OBJECT_HANDLE* v; size_t i; checks = ckcapi_hash_new(); @@ -559,15 +559,15 @@ purge_duplicate_objects(CkCapiArray* arr) for(i = 0; i < arr->len; ) { - v = ckcapi_array_index(arr, CkCapiObject*, i); - if(ckcapi_hash_get(checks, &v, sizeof(CkCapiObject*))) + v = &ckcapi_array_index(arr, CK_OBJECT_HANDLE, i); + if(ckcapi_hash_get(checks, v, sizeof(CK_OBJECT_HANDLE))) { ckcapi_array_remove_index(arr, i); /* Look at same i again */ } else { - if(!ckcapi_hash_set(checks, &v, sizeof(CkCapiObject*), &v)) + if(!ckcapi_hash_set(checks, v, sizeof(CK_OBJECT_HANDLE), v)) break; ++i; } @@ -589,7 +589,7 @@ ckcapi_session_find_init(CkCapiSession* sess, CK_ATTRIBUTE_PTR match, if(sess->operation_type != OPERATION_NONE) return CKR_OPERATION_ACTIVE; - arr = ckcapi_array_new(0, 1, sizeof(CkCapiObject*)); + arr = ckcapi_array_new(0, 1, sizeof(CK_OBJECT_HANDLE)); if(!arr) return CKR_HOST_MEMORY; @@ -633,7 +633,8 @@ ckcapi_session_find(CkCapiSession* sess, CK_OBJECT_HANDLE_PTR objects, arr = (CkCapiArray*)sess->operation_data; *object_count = (max_object_count > arr->len ? arr->len : max_object_count); for(i = 0; i < *object_count; ++i) - objects[i] = ckcapi_array_index(arr, CkCapiObject*, i)->id; + objects[i] = ckcapi_array_index(arr, CK_OBJECT_HANDLE, i); + ckcapi_array_remove_range(arr, 0, *object_count); return CKR_OK; |