diff options
author | Joshua Allen <axlecrusher@gmail.com> | 2017-03-07 21:21:16 -0500 |
---|---|---|
committer | Joshua Allen <axlecrusher@gmail.com> | 2017-03-07 21:21:16 -0500 |
commit | 73405169f773cb4acc807102f3c0ba166214cbdf (patch) | |
tree | dbe64cecfce5970338a0274b70ac6563b0c704d9 /src/survive_config.c | |
parent | 6613cdc174401379b88f253385e8f82304de42f5 (diff) | |
download | libsurvive-73405169f773cb4acc807102f3c0ba166214cbdf.tar.gz libsurvive-73405169f773cb4acc807102f3c0ba166214cbdf.tar.bz2 |
dynamically expand config_entries in config_group
Diffstat (limited to 'src/survive_config.c')
-rw-r--r-- | src/survive_config.c | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/src/survive_config.c b/src/survive_config.c index 23d7ef1..b27563c 100644 --- a/src/survive_config.c +++ b/src/survive_config.c @@ -33,6 +33,26 @@ void init_config_group(config_group *cg, uint16_t count) { } } +void resize_config_group(config_group *cg, uint16_t count) { + uint16_t i = 0; + + if (count > cg->max_entries) { + config_entry* ptr = realloc(cg->config_entries, sizeof(config_entry)*count); + assert(ptr!=NULL); + + cg->config_entries = ptr; + + for (i=cg->max_entries;i<count;++i) { + cg->config_entries[i].data = NULL; + cg->config_entries[i].tag = NULL; + cg->config_entries[i].type = CONFIG_UNKNOWN; + cg->config_entries[i].elements = 0; + } + + cg->max_entries = count; + } +} + void config_init() { uint16_t i = 0; init_config_group(&global_config_values, MAX_CONFIG_ENTRIES); @@ -116,15 +136,12 @@ uint16_t config_read_float_array(config_group *cg, const char *tag, FLT** values } config_entry* next_unused_entry(config_group *cg) { - config_entry *cv = cg->config_entries + cg->used_entries; - assert(cg->used_entries < cg->max_entries); + config_entry *cv = NULL; +// assert(cg->used_entries < cg->max_entries); -/* - if (cg->used_entries >= cg->max_entries) { - cg->max_entries+=10; - cg->config_entries = realloc(cg->config_entries, sizeof(config_entry)*cg->max_entries); - } -*/ + if (cg->used_entries >= cg->max_entries) resize_config_group(cg, cg->max_entries + 10); + + cv = cg->config_entries + cg->used_entries; cg->used_entries++; return cv; |