diff options
Diffstat (limited to 'src/bundle.c')
-rw-r--r-- | src/bundle.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/bundle.c b/src/bundle.c index f5e6864..2afa47f 100644 --- a/src/bundle.c +++ b/src/bundle.c @@ -374,6 +374,40 @@ int bundle_keyval_get_array_val(bundle_keyval_t *kv, void ***array_val, array_val, array_len, array_item_size); } +bundle_keyval_t *bundle_keyval_dup(const bundle_keyval_t *kv) +{ + bundle_keyval_t *ret_kv = NULL; + void *byte = NULL; + size_t byte_len; + size_t len; + + if (!kv) + return NULL; + + if (keyval_type_is_array(kv->type)) { + len = keyval_array_encode( + (keyval_array_t *)kv, &byte, &byte_len); + if (len == 0) + return NULL; + len = keyval_array_decode(byte, + (keyval_array_t **)&ret_kv, byte_len); + free(byte); + if (len == 0) + return NULL; + } else { + len = keyval_encode((keyval_t *)kv, + (unsigned char **)&byte, &byte_len); + if (len == 0) + return NULL; + len = keyval_decode( + (unsigned char *)byte, (keyval_t **)&ret_kv, byte_len); + free(byte); + if (len == 0) + return NULL; + } + return ret_kv; +} + bundle *bundle_dup(bundle *b_from) { bundle *b_to; |