diff options
Diffstat (limited to 'src/block.c')
| -rw-r--r-- | src/block.c | 60 |
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); } |
