diff options
Diffstat (limited to 'src/block.c')
| -rw-r--r-- | src/block.c | 19 |
1 files changed, 19 insertions, 0 deletions
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 <string.h> + #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); |
