X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Flib%2Fvalue.c;h=c8865ebc05c2d37eb451a3ccbb6bf1acdd920073;hb=6871026b82224d83bb63cbb44cc33c16c766d96d;hp=42c4bfd1dcd403d17cc429020bfb25f4815866af;hpb=393729a6d00d2d9132000692547720e2e177d69b;p=babeltrace.git diff --git a/src/lib/value.c b/src/lib/value.c index 42c4bfd1..c8865ebc 100644 --- a/src/lib/value.c +++ b/src/lib/value.c @@ -136,6 +136,9 @@ void (* const destroy_funcs[])(struct bt_value *) = { static struct bt_value *bt_value_null_copy(const struct bt_value *null_obj) { + BT_ASSERT(null_obj == bt_value_null); + + bt_object_get_ref_no_null_check(bt_value_null); return (void *) bt_value_null; } @@ -994,7 +997,8 @@ bt_value_array_append_string_element(struct bt_value *array_obj, } enum bt_value_array_append_element_status -bt_value_array_append_empty_array_element(struct bt_value *array_obj) +bt_value_array_append_empty_array_element(struct bt_value *array_obj, + struct bt_value **element_obj) { enum bt_value_array_append_element_status ret; struct bt_value *empty_array_obj = NULL; @@ -1002,12 +1006,18 @@ bt_value_array_append_empty_array_element(struct bt_value *array_obj) empty_array_obj = bt_value_array_create(); ret = bt_value_array_append_element(array_obj, (void *) empty_array_obj); + + if (element_obj) { + *element_obj = empty_array_obj; + } + bt_object_put_ref(empty_array_obj); return ret; } enum bt_value_array_append_element_status -bt_value_array_append_empty_map_element(struct bt_value *array_obj) +bt_value_array_append_empty_map_element(struct bt_value *array_obj, + struct bt_value **element_obj) { enum bt_value_array_append_element_status ret; struct bt_value *map_obj = NULL; @@ -1015,6 +1025,11 @@ bt_value_array_append_empty_map_element(struct bt_value *array_obj) map_obj = bt_value_map_create(); ret = bt_value_array_append_element(array_obj, (void *) map_obj); + + if (element_obj) { + *element_obj = map_obj; + } + bt_object_put_ref(map_obj); return ret; } @@ -1160,7 +1175,8 @@ enum bt_value_map_insert_entry_status bt_value_map_insert_string_entry( enum bt_value_map_insert_entry_status bt_value_map_insert_empty_array_entry( - struct bt_value *map_obj, const char *key) + struct bt_value *map_obj, const char *key, + bt_value **entry_obj) { enum bt_value_map_insert_entry_status ret; struct bt_value *array_obj = NULL; @@ -1168,12 +1184,18 @@ bt_value_map_insert_empty_array_entry( array_obj = bt_value_array_create(); ret = bt_value_map_insert_entry(map_obj, key, (void *) array_obj); + + if (entry_obj) { + *entry_obj = array_obj; + } + bt_object_put_ref(array_obj); return ret; } enum bt_value_map_insert_entry_status -bt_value_map_insert_empty_map_entry(struct bt_value *map_obj, const char *key) +bt_value_map_insert_empty_map_entry(struct bt_value *map_obj, const char *key, + bt_value **entry_obj) { enum bt_value_map_insert_entry_status ret; struct bt_value *empty_map_obj = NULL; @@ -1181,6 +1203,11 @@ bt_value_map_insert_empty_map_entry(struct bt_value *map_obj, const char *key) empty_map_obj = bt_value_map_create(); ret = bt_value_map_insert_entry(map_obj, key, (void *) empty_map_obj); + + if (entry_obj) { + *entry_obj = empty_map_obj; + } + bt_object_put_ref(empty_map_obj); return ret; }