summaryrefslogtreecommitdiffstats
path: root/src/sratom.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sratom.c')
-rw-r--r--src/sratom.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/sratom.c b/src/sratom.c
index 7966e65..9a55b25 100644
--- a/src/sratom.c
+++ b/src/sratom.c
@@ -709,8 +709,12 @@ read_node(Sratom* sratom,
map->handle, (const char*)sord_node_get_string(child_type_node));
uint32_t child_size = atom_size(sratom, child_type);
if (child_size > 0) {
- lv2_atom_forge_vector_head(forge, &frame, child_size, child_type);
+ LV2_Atom_Forge_Ref ref = lv2_atom_forge_vector_head(
+ forge, &frame, child_size, child_type);
read_list_value(sratom, forge, world, model, value, MODE_BODY);
+ lv2_atom_forge_pop(forge, &frame);
+ frame.ref = 0;
+ lv2_atom_forge_pad(forge, lv2_atom_forge_deref(forge, ref)->size);
}
sord_node_free(world, child_type_node);
} else if (value && sord_node_equals(sord_node_get_datatype(value),
@@ -730,6 +734,7 @@ read_node(Sratom* sratom,
lv2_atom_forge_object(forge, &frame, 0, type_urid);
read_resource(sratom, forge, world, model, node, type_urid);
}
+
if (frame.ref) {
lv2_atom_forge_pop(forge, &frame);
}