diff options
Diffstat (limited to 'src/sratom.c')
-rw-r--r-- | src/sratom.c | 7 |
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); } |