aboutsummaryrefslogtreecommitdiff
path: root/src/block.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/block.c')
-rw-r--r--src/block.c19
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], &copy->group.children[i]);
+ }
+}
+
void block_free(block_t *block)
{
free(block->label);