diff options
Diffstat (limited to 'ckcapi-session.c')
-rw-r--r-- | ckcapi-session.c | 44 |
1 files changed, 12 insertions, 32 deletions
diff --git a/ckcapi-session.c b/ckcapi-session.c index 5daae6e..496c039 100644 --- a/ckcapi-session.c +++ b/ckcapi-session.c @@ -16,8 +16,7 @@ object_data_release(CkCapiObjectData* objdata) { ASSERT(objdata->data_funcs); ASSERT(objdata->data_funcs->release); - (objdata->data_funcs->release)(objdata->data); - free(objdata); + (objdata->data_funcs->release)(objdata); } CkCapiSession* @@ -370,19 +369,11 @@ ckcapi_session_get_object_data(CkCapiSession* sess, CkCapiObject* obj, if(*objdata) return CKR_OK; - newdata = calloc(sizeof(CkCapiObjectData), 1); - if(!newdata) - return CKR_HOST_MEMORY; - - newdata->object = id; - ret = (obj->obj_funcs->load_data)(sess, obj, newdata); - if(ret != CKR_OK) { - free(newdata); + ret = (obj->obj_funcs->load_data)(sess, obj, &newdata); + if(ret != CKR_OK) return ret; - } newdata->object = id; - ASSERT(newdata->data); ASSERT(newdata->data_funcs); if(!ckcapi_hash_set(sess->object_data, &newdata->object, @@ -449,37 +440,26 @@ ckcapi_session_get_object_data_for(CkCapiSession* sess, CK_OBJECT_HANDLE hand, return ckcapi_session_get_object_data(sess, obj, objdata); } -CK_RV -ckcapi_session_set_object_data(CkCapiSession* sess, CkCapiObject* obj, - const CkCapiObjectData* objdata) +void +ckcapi_session_take_object_data(CkCapiSession* sess, CkCapiObject* obj, + CkCapiObjectData* objdata) { - CkCapiObjectData* newdata; CkCapiObjectData* prev; ASSERT(obj); ASSERT(sess); ASSERT(sess->object_data); - ASSERT(objdata); - - newdata = calloc(sizeof(CkCapiObjectData), 1); - if(!newdata) - return CKR_HOST_MEMORY; - - newdata->object = obj->id; - newdata->data = objdata->data; - newdata->data_funcs = objdata->data_funcs; + ASSERT(objdata); + objdata->object = obj->id; + prev = ckcapi_hash_rem(sess->object_data, &obj->id, sizeof(obj->id)); if(prev) object_data_release(prev); - if(!ckcapi_hash_set(sess->object_data, &newdata->object, - sizeof(newdata->object), newdata)) { - free(newdata); - return CKR_HOST_MEMORY; - } - - return CKR_OK; + if(!ckcapi_hash_set(sess->object_data, &objdata->object, + sizeof(objdata->object), objdata)) + object_data_release(objdata); } |