aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/block.h5
-rw-r--r--src/blocks/date.c10
-rw-r--r--src/blocks/fs.c10
-rw-r--r--src/blocks/group.c7
-rw-r--r--src/blocks/ram.c10
-rw-r--r--src/blocks/script.c10
-rw-r--r--src/blocks/text.c7
-rw-r--r--src/config.c4
8 files changed, 31 insertions, 32 deletions
diff --git a/src/block.h b/src/block.h
index e461e0d..dc1f975 100644
--- a/src/block.h
+++ b/src/block.h
@@ -92,7 +92,7 @@ typedef struct {
// Called to allocate a block with its default state
//
-typedef block_t *(*block_alloc_t)(const block_scheme_t *scheme);
+typedef void (*block_init_t)(block_t *block, const block_scheme_t *scheme);
// Called to cleanup a block and free its memory
// NOTE: This should NOT free any other block!
@@ -106,7 +106,8 @@ typedef int (*block_validate_t)(block_t *block, const block_scheme_t *scheme);
struct block_scheme {
const char *name;
const config_entry_t *entries;
- block_alloc_t alloc_fn;
+ size_t size;
+ block_init_t init_fn;
block_clean_t clean_fn;
block_validate_t validate_fn;
};
diff --git a/src/blocks/date.c b/src/blocks/date.c
index 4fcdb2a..c9ffb55 100644
--- a/src/blocks/date.c
+++ b/src/blocks/date.c
@@ -31,13 +31,12 @@ static void block_date_update(block_t *block)
assert(date->block.text != NULL);
}
-static block_t *block_date_alloc(const block_scheme_t *scheme)
+static void block_date_init(block_t *block, const block_scheme_t *scheme)
{
- block_t *block = calloc(1, sizeof(block_date_t));
- block->type = BLOCK_TEXT;
+ extern const block_scheme_t block_text_scheme;
+ block_text_scheme.init_fn(block, scheme);
block->update_interval = block_date_interval;
block->update_fn = block_date_update;
- return block;
}
static void block_date_clean(block_t *block)
@@ -65,7 +64,8 @@ static int block_date_validate(block_t *block, const block_scheme_t *scheme)
const block_scheme_t block_date_scheme = {
.name = "date",
.entries = NULL,
- .alloc_fn = block_date_alloc,
+ .size = sizeof(block_date_t),
+ .init_fn = block_date_init,
.clean_fn = block_date_clean,
.validate_fn = block_date_validate,
};
diff --git a/src/blocks/fs.c b/src/blocks/fs.c
index 6069d3e..39b669a 100644
--- a/src/blocks/fs.c
+++ b/src/blocks/fs.c
@@ -119,13 +119,12 @@ static void block_fs_update(block_t *block)
assert(fs->block.text != NULL);
}
-static block_t *block_fs_alloc(const block_scheme_t *scheme)
+static void block_fs_init(block_t *block, const block_scheme_t *scheme)
{
- block_t *block = calloc(1, sizeof(block_fs_t));
- block->type = BLOCK_TEXT;
+ extern const block_scheme_t block_text_scheme;
+ block_text_scheme.init_fn(block, scheme);
block->update_interval = block_fs_interval;
block->update_fn = block_fs_update;
- return block;
}
static void block_fs_clean(block_t *block)
@@ -180,7 +179,8 @@ static const config_entry_t block_fs_entries[] = {
const block_scheme_t block_fs_scheme = {
.name = "fs",
.entries = block_fs_entries,
- .alloc_fn = block_fs_alloc,
+ .size = sizeof(block_fs_t),
+ .init_fn = block_fs_init,
.clean_fn = block_fs_clean,
.validate_fn = block_fs_validate,
};
diff --git a/src/blocks/group.c b/src/blocks/group.c
index 4fdff64..d56ed9a 100644
--- a/src/blocks/group.c
+++ b/src/blocks/group.c
@@ -1,10 +1,8 @@
#include "../block.h"
-static block_t *block_group_alloc(const block_scheme_t *scheme)
+static void block_group_init(block_t *block, const block_scheme_t *scheme)
{
- block_t *block = calloc(1, sizeof(block_group_t));
block->type = BLOCK_GROUP;
- return block;
}
static void block_group_clean(block_t *block)
@@ -16,7 +14,8 @@ static void block_group_clean(block_t *block)
const block_scheme_t block_group_scheme = {
.name = "group",
.entries = NULL,
- .alloc_fn = block_group_alloc,
+ .size = sizeof(block_group_t),
+ .init_fn = block_group_init,
.clean_fn = block_group_clean,
.validate_fn = NULL,
};
diff --git a/src/blocks/ram.c b/src/blocks/ram.c
index 46ec361..ed7465f 100644
--- a/src/blocks/ram.c
+++ b/src/blocks/ram.c
@@ -128,13 +128,12 @@ static void block_ram_update(block_t *block)
assert(ram->block.text != NULL);
}
-static block_t *block_ram_alloc(const block_scheme_t *scheme)
+static void block_ram_init(block_t *block, const block_scheme_t *scheme)
{
- block_t *block = calloc(1, sizeof(block_ram_t));
- block->type = BLOCK_TEXT;
+ extern const block_scheme_t block_text_scheme;
+ block_text_scheme.init_fn(block, scheme);
block->update_interval = block_ram_interval;
block->update_fn = block_ram_update;
- return block;
}
static void block_ram_clean(block_t *block)
@@ -176,7 +175,8 @@ static int block_ram_validate(block_t *block, const block_scheme_t *scheme)
const block_scheme_t block_ram_scheme = {
.name = "ram",
.entries = NULL,
- .alloc_fn = block_ram_alloc,
+ .size = sizeof(block_ram_t),
+ .init_fn = block_ram_init,
.clean_fn = block_ram_clean,
.validate_fn = block_ram_validate,
};
diff --git a/src/blocks/script.c b/src/blocks/script.c
index 08ed9e3..51e5328 100644
--- a/src/blocks/script.c
+++ b/src/blocks/script.c
@@ -43,13 +43,12 @@ static void block_script_update(block_t *block)
assert(script->block.text != NULL);
}
-static block_t *block_script_alloc(const block_scheme_t *scheme)
+static void block_script_init(block_t *block, const block_scheme_t *scheme)
{
- block_t *block = calloc(1, sizeof(block_script_t));
- block->type = BLOCK_TEXT;
+ extern const block_scheme_t block_text_scheme;
+ block_text_scheme.init_fn(block, scheme);
block->update_interval = block_script_interval;
block->update_fn = block_script_update;
- return block;
}
static void block_script_clean(block_t *block)
@@ -81,7 +80,8 @@ static const config_entry_t block_script_entries[] = {
const block_scheme_t block_script_scheme = {
.name = "script",
.entries = block_script_entries,
- .alloc_fn = block_script_alloc,
+ .size = sizeof(block_script_t),
+ .init_fn = block_script_init,
.clean_fn = block_script_clean,
.validate_fn = block_script_validate,
};
diff --git a/src/blocks/text.c b/src/blocks/text.c
index 0acb1de..3eba8f4 100644
--- a/src/blocks/text.c
+++ b/src/blocks/text.c
@@ -2,11 +2,9 @@
#include "../any_log.h"
-static block_t *block_text_alloc(const block_scheme_t *scheme)
+static void block_text_init(block_t *block, const block_scheme_t *scheme)
{
- block_t *block = calloc(1, sizeof(block_text_t));
block->type = BLOCK_TEXT;
- return block;
}
static void block_text_clean(block_t *block)
@@ -31,7 +29,8 @@ static int block_text_validate(block_t *block, const block_scheme_t *scheme)
const block_scheme_t block_text_scheme = {
.name = "text",
.entries = NULL,
- .alloc_fn = block_text_alloc,
+ .size = sizeof(block_text_t),
+ .init_fn = block_text_init,
.clean_fn = block_text_clean,
.validate_fn = block_text_validate,
};
diff --git a/src/config.c b/src/config.c
index 309ed27..3e83390 100644
--- a/src/config.c
+++ b/src/config.c
@@ -419,9 +419,9 @@ static block_t *config_alloc_block(config_t *config, const block_scheme_t *schem
config->blocks = realloc(config->blocks, ++config->n_blocks * sizeof(block_t *));
assert(config->blocks != NULL);
- config->blocks[config->n_blocks - 1] = scheme->alloc_fn(scheme);
- block_t *block = config->blocks[config->n_blocks - 1];
+ block_t *block = config->blocks[config->n_blocks - 1] = calloc(1, scheme->size);
assert(block != NULL);
+ scheme->init_fn(block, scheme);
block->label = label;
block->scheme = scheme;