aboutsummaryrefslogtreecommitdiff
path: root/src/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/config.c')
-rw-r--r--src/config.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/config.c b/src/config.c
index ff587da..cfeb70f 100644
--- a/src/config.c
+++ b/src/config.c
@@ -277,14 +277,13 @@ void config_read(config_t *config, FILE *file)
block = &config->blocks[config->n_blocks - 1];
char *label = strcopy(section + 6);
- if (*label == '\0') {
+ if (label == NULL || *label == '\0') {
++errors;
log_value_error("Block section must have a non-empty label",
"s:section", section,
"i:line", ini.line);
free(label);
- } else
- block->label = label;
+ }
if ((key = any_ini_stream_next_key(&ini)) == NULL || strcmp(key, "type")) {
++errors;
@@ -309,6 +308,7 @@ void config_read(config_t *config, FILE *file)
const config_block_t block_infos[] = {
block_text_info,
block_group_info,
+ block_ram_info,
{ 0 }
};
@@ -316,10 +316,14 @@ void config_read(config_t *config, FILE *file)
if (strcmp(block_infos[i].type_name, value))
continue;
info = &block_infos[i];
- memcpy(block, &info->base, sizeof(block_t));
- block->info = result = !strcmp(value, "text")
- ? block
- : malloc(info->type_size);
+ block_copy(block, &info->base);
+ free(block->label);
+ block->label = label;
+
+ if (info->type_size == 0)
+ result = block;
+ else
+ block->info = result = malloc(info->type_size);
goto skip_pair;
}
@@ -410,7 +414,9 @@ void config_resolve(config_t *config, block_t *block)
{
int errors = 0;
+ block->label = strcopy("main");
block->type = BLOCK_GROUP;
+ block->group.spacing = 10;
block->group.n_children = config->n_blocks;
block->group.children = malloc(config->n_blocks * sizeof(block_t *));