diff options
| author | Federico Angelilli <code@fedang.net> | 2024-07-11 15:10:24 +0200 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2024-07-11 15:10:24 +0200 |
| commit | 6942efee2d41a768501e23bd06f38dbb4fde197b (patch) | |
| tree | 9f7723da2d5e21ffe1f47c2cf4e68363ec2f75b4 /src/block.c | |
| parent | 226c6b5bf79912b657c7cb4c5a679891030fa453 (diff) | |
Copy blocks
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); |
