Add bundle cpp APIs
[platform/core/base/bundle.git] / src / bundle.c
index f5e6864..2afa47f 100644 (file)
@@ -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;