summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/icl-state.c69
-rw-r--r--lib/icl-value.c6
2 files changed, 12 insertions, 63 deletions
diff --git a/lib/icl-state.c b/lib/icl-state.c
index 5d9d6ee..6a245b2 100644
--- a/lib/icl-state.c
+++ b/lib/icl-state.c
@@ -543,72 +543,15 @@ API int iotcon_state_clone(iotcon_state_h state, iotcon_state_h *state_clone)
void icl_state_clone_foreach(char *key, iotcon_value_h src_val, iotcon_state_h dest_state)
{
FN_CALL;
- int type, ret;
- iotcon_value_h value, copied_val;
- iotcon_list_h child_list, copied_list;
- iotcon_state_h child_state;
- iotcon_state_h copied_state = NULL;
-
- type = src_val->type;
- switch (type) {
- case IOTCON_TYPE_INT:
- case IOTCON_TYPE_BOOL:
- case IOTCON_TYPE_DOUBLE:
- case IOTCON_TYPE_STR:
- case IOTCON_TYPE_BYTE_STR:
- case IOTCON_TYPE_NULL:
- copied_val = icl_value_clone(src_val);
- if (NULL == copied_val) {
- ERR("icl_value_clone() Fail");
- return;
- }
-
- icl_state_set_value(dest_state, key, copied_val);
- break;
- case IOTCON_TYPE_LIST:
- ret = icl_value_get_list(src_val, &child_list);
- if (IOTCON_ERROR_NONE != ret) {
- ERR("icl_value_get_list() Fail(%d)", ret);
- return;
- }
-
- copied_list = icl_list_clone(child_list);
- if (NULL == copied_list) {
- ERR("icl_list_clone() Fail");
- return;
- }
-
- value = icl_value_create_list(copied_list);
- if (NULL == value) {
- ERR("icl_value_create_list() Fail");
- iotcon_list_destroy(copied_list);
- return;
- }
+ iotcon_value_h copied_val;
- icl_state_set_value(dest_state, key, value);
- break;
- case IOTCON_TYPE_STATE:
- ret = icl_value_get_state(src_val, &child_state);
- if (IOTCON_ERROR_NONE != ret) {
- ERR("icl_value_get_state() Fail(%d)", ret);
- return;
- }
-
- g_hash_table_foreach(child_state->hash_table, (GHFunc)icl_state_clone_foreach,
- copied_state);
-
- value = icl_value_create_state(copied_state);
- if (NULL == value) {
- ERR("icl_value_create_state(%p) Fail", copied_state);
- return;
- }
-
- icl_state_set_value(dest_state, key, value);
- break;
- default:
- ERR("Invalid type(%d)", type);
+ copied_val = icl_value_clone(src_val);
+ if (NULL == copied_val) {
+ ERR("icl_value_clone() Fail");
return;
}
+
+ icl_state_set_value(dest_state, key, copied_val);
}
diff --git a/lib/icl-value.c b/lib/icl-value.c
index fd73f29..2366ffe 100644
--- a/lib/icl-value.c
+++ b/lib/icl-value.c
@@ -363,6 +363,12 @@ iotcon_value_h icl_value_clone(iotcon_value_h src)
dest = icl_value_create_byte_str(((icl_val_byte_str_s*)real)->s,
((icl_val_byte_str_s*)real)->len);
break;
+ case IOTCON_TYPE_LIST:
+ dest = icl_value_create_list(((icl_val_list_s*)real)->list);
+ break;
+ case IOTCON_TYPE_STATE:
+ dest = icl_value_create_state(((icl_val_state_s*)real)->state);
+ break;
default:
ERR("Invalid type(%d)", src->type);
break;