diff options
-rwxr-xr-x | src/keyval.c | 9 | ||||
-rwxr-xr-x | src/keyval_array.c | 13 |
2 files changed, 19 insertions, 3 deletions
diff --git a/src/keyval.c b/src/keyval.c index e3f906a..d49be0e 100755 --- a/src/keyval.c +++ b/src/keyval.c @@ -39,6 +39,7 @@ keyval_t *keyval_new(keyval_t *kv, const char *key, const int type, const void *val, const size_t size) { int must_free_obj = kv ? 0 : 1; + char *str; if (!kv) { kv = calloc(1, sizeof(keyval_t)); @@ -70,8 +71,14 @@ keyval_t *keyval_new(keyval_t *kv, const char *key, keyval_free(kv, must_free_obj); return NULL; } - if (val) + if (val) { memcpy(kv->val, val, size); + if (type == BUNDLE_TYPE_STR) { + str = (char *)kv->val; + if (str[size - 1] != '\0') + str[size - 1] = '\0'; + } + } } kv->method = &method; diff --git a/src/keyval_array.c b/src/keyval_array.c index e05f79c..7c4fe56 100755 --- a/src/keyval_array.c +++ b/src/keyval_array.c @@ -174,7 +174,7 @@ int keyval_array_copy_array(keyval_array_t *kva, void **array_val, /* Copy each array item */ for (i = 0; i < array_len; i++) { - kva->array_val[i] = malloc(measure_size(array_val[i])); + kva->array_val[i] = calloc(1, measure_size(array_val[i])); if (!(kva->array_val[i])) { set_last_result(BUNDLE_ERROR_OUT_OF_MEMORY); goto cleanup_exit; @@ -204,6 +204,9 @@ int keyval_array_is_idx_valid(keyval_array_t *kva, int idx) int keyval_array_set_element(keyval_array_t *kva, int idx, void *val, size_t size) { + keyval_t *kv = (keyval_t *)kva; + char *str; + /* An element is already exist in the idx! */ if (kva->array_val[idx]) { /* val==NULL means 'Free this element!' */ @@ -217,11 +220,17 @@ int keyval_array_set_element(keyval_array_t *kva, int idx, void *val, size_t siz } } else { /* Normal case. Copy value into the array. */ - kva->array_val[idx] = malloc(size); + kva->array_val[idx] = calloc(1, size); if (!(kva->array_val[idx])) return BUNDLE_ERROR_OUT_OF_MEMORY; if (val) { memcpy(kva->array_val[idx], val, size); + if (kv->type & BUNDLE_TYPE_STR) { + str = (char *)kva->array_val[idx]; + if (str[size - 1] != '\0') + str[size - 1] = '\0'; + } + kva->array_element_size[idx] = size; } } |