aboutsummaryrefslogtreecommitdiff
path: root/src/block.c
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2024-11-12 00:36:47 +0100
committerFederico Angelilli <code@fedang.net>2024-11-12 00:36:47 +0100
commit686802c2a472746a1b40fab30cbb0351e536c9ba (patch)
tree9a4fe3fa654fbe7b9bb35893a2da71c9754745b4 /src/block.c
parent3f2af32442b9384d316651d42ad35945533dc39e (diff)
Modify block struct
Diffstat (limited to 'src/block.c')
-rw-r--r--src/block.c60
1 files changed, 32 insertions, 28 deletions
diff --git a/src/block.c b/src/block.c
index 29a8394..f735174 100644
--- a/src/block.c
+++ b/src/block.c
@@ -1,4 +1,5 @@
#include <string.h>
+#include <assert.h>
#include "block.h"
#include "util.h"
@@ -6,7 +7,7 @@
void block_update(block_t *block)
{
- if (block->update_cb != NULL) {
+ if (block->update_fn != NULL) {
struct timespec now, diff;
timespec_get(&now, TIME_UTC);
diff = timespec_diff(now, block->update_last);
@@ -16,47 +17,50 @@ void block_update(block_t *block)
"s:label", block->label,
"g:ts", ANY_LOG_FORMATTER(timespec_print), &now);
- block->update_cb(block);
+ block->update_fn(block);
block->update_last = now;
}
}
+ // NOTE: Block spec should handle its children by itself...
+ //
if (block->type == BLOCK_GROUP) {
- for (int i = 0; i < block->group.n_children; i++)
- block_update(block->group.children[i]);
+ block_group_t *group = (block_group_t *)block;
+ for (size_t i = 0; i < group->n_children; i++)
+ block_update(group->children[i]);
}
}
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->group.children[i] = malloc(sizeof(block_t));
- block_copy(block->group.children[i], copy->group.children[i]);
- }
- }
+// 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->group.children[i] = malloc(sizeof(block_t));
+// block_copy(block->group.children[i], copy->group.children[i]);
+// }
+// }
}
// NOTE: This does not recursively free groups!
void block_free(block_t *block)
{
free(block->label);
-
- if (block->type == BLOCK_TEXT) {
- free(block->text.text);
- } else if (block->type == BLOCK_GROUP) {
- free(block->group.children);
- }
-
- if (block->finalize_cb != NULL)
- block->finalize_cb(block);
+//
+// if (block->type == BLOCK_TEXT) {
+// free(block->text.text);
+// } else if (block->type == BLOCK_GROUP) {
+// free(block->group.children);
+// }
+//
+ assert(block->clean_fn != NULL);
+ block->clean_fn(block);
}