From 6942efee2d41a768501e23bd06f38dbb4fde197b Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Thu, 11 Jul 2024 15:10:24 +0200 Subject: Copy blocks --- src/block.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/block.c') diff --git a/src/block.c b/src/block.c index e739ceb..2b31de8 100644 --- a/src/block.c +++ b/src/block.c @@ -1,3 +1,5 @@ +#include + #include "block.h" #include "util.h" #include "any_log.h" @@ -24,6 +26,23 @@ void block_update(block_t *block) } } +void block_copy(block_t *copy, const block_t *block) +{ + memcpy(copy, block, sizeof(block_t)); + + // NOTE: Strings must be copied + copy->label = strcopy(block->label); + + if (block->type == BLOCK_TEXT) { + copy->text.text = strcopy(block->text.text); + } else if (block->type == BLOCK_GROUP) { + copy->group.children = calloc(block->group.n_children, sizeof(block_t)); + + for (int i = 0; i < block->group.n_children; i++) + block_copy(&block->group.children[i], ©->group.children[i]); + } +} + void block_free(block_t *block) { free(block->label); -- cgit v1.2.3