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
 {

-- 


Reply via email to