netstar pushed a commit to branch master. http://git.enlightenment.org/apps/evisum.git/commit/?id=74efbb1178512c78b5688575731e88e97c7bf635
commit 74efbb1178512c78b5688575731e88e97c7bf635 Author: Alastair Poole <nets...@gmail.com> Date: Sat Sep 5 22:21:57 2020 +0100 config: sanity checks. Avoid missing issues like this again. --- src/bin/evisum_config.c | 47 +++++++++++++++++++++++++++++++++++++++-------- src/bin/evisum_config.h | 2 +- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/bin/evisum_config.c b/src/bin/evisum_config.c index c1183fd..e82792a 100644 --- a/src/bin/evisum_config.c +++ b/src/bin/evisum_config.c @@ -29,6 +29,33 @@ config_shutdown(void) efreet_shutdown(); } +static void +_config_fail(const char *msg) +{ + fprintf(stderr, "ERR: config %s.\n", msg); + exit(1); +} + +static void +_config_check(Evisum_Config *cfg) +{ + if (cfg->version > CONFIG_VERSION) + _config_fail("version"); + + if (cfg->poll_delay <= 0) + _config_fail("poll"); +} + +static Evisum_Config * +_config_init() +{ + Evisum_Config *cfg = calloc(1, sizeof(Evisum_Config)); + cfg->version = CONFIG_VERSION; + cfg->poll_delay = 3; + + return cfg; +} + Evisum_Config * config_load(void) { @@ -39,23 +66,27 @@ config_load(void) const char *path = _config_file_path(); if (!ecore_file_exists(path)) { - cfg = calloc(1, sizeof(Evisum_Config)); - cfg->version = CONFIG_VERSION; - cfg->poll_delay = 3; + cfg = _config_init(); + f = eet_open(path, EET_FILE_MODE_WRITE); + if (!f) _config_fail("create"); eet_write(f, "Config", cfg, sizeof(Evisum_Config), 0); eet_close(f); } else { f = eet_open(path, EET_FILE_MODE_READ); - if (!f) exit(127); + if (!f) _config_fail("read"); cfg = eet_read(f, "Config", &size); - // Correct a bogus poll delay. - if (cfg->poll_delay <= 0) + + _config_check(cfg); + + if (cfg->version < CONFIG_VERSION) { - fprintf(stderr, "WARNING: correcting a bad configuration (sorry!).\n"); - cfg->poll_delay = 3; + free(cfg); + fprintf(stderr, "INFO: Reinitialising configuration\n"); + + cfg = _config_init(); } eet_close(f); } diff --git a/src/bin/evisum_config.h b/src/bin/evisum_config.h index ac4882a..ec3b30e 100644 --- a/src/bin/evisum_config.h +++ b/src/bin/evisum_config.h @@ -3,7 +3,7 @@ #include "ui/ui.h" -#define CONFIG_VERSION 0x0004 +#define CONFIG_VERSION 0x0005 typedef struct _Evisum_Config { --