summaryrefslogtreecommitdiff
path: root/ckcapi-session.c
diff options
context:
space:
mode:
Diffstat (limited to 'ckcapi-session.c')
-rw-r--r--ckcapi-session.c44
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);
}