From d2928798379dbe935f5aac6ae51f34aa43d6e536 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Mon, 21 Dec 2015 10:57:23 -0500 Subject: [PATCH] gui/settings: Read settings file on startup Signed-off-by: Anna Schumaker --- gui/settings.c | 17 ++++++++++++++++- tests/gui/settings.c | 7 +++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/gui/settings.c b/gui/settings.c index 66be5e02..e538c0cf 100644 --- a/gui/settings.c +++ b/gui/settings.c @@ -10,7 +10,7 @@ static struct file gui_settings_file = FILE_INIT("settings", 0); static void __settings_save_item(gpointer key, gpointer value, gpointer data) { - file_writef(&gui_settings_file, "%s %u\n", (const char *)key, + file_writef(&gui_settings_file, "%s %u\n", (const gchar *)key, GPOINTER_TO_UINT(value)); } @@ -24,11 +24,26 @@ static void __settings_save() file_close(&gui_settings_file); } +static void __settings_read() +{ + unsigned int num, i, value; + gchar *key; + + file_readf(&gui_settings_file, "%u\n", &num); + for (i = 0; i < num; i++) { + file_readf(&gui_settings_file, "%m[^ ] %u\n", &key, &value); + g_hash_table_insert(gui_settings, key, GUINT_TO_POINTER(value)); + } +} void gui_settings_init() { gui_settings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); + + if (file_open(&gui_settings_file, OPEN_READ)) + __settings_read(); + file_close(&gui_settings_file); } void gui_settings_deinit() diff --git a/tests/gui/settings.c b/tests/gui/settings.c index db014d23..d7f5108e 100644 --- a/tests/gui/settings.c +++ b/tests/gui/settings.c @@ -31,6 +31,13 @@ static void test_settings() test_equal(gui_settings_get("test.value1"), 0); test_equal(gui_settings_get("test.value2"), 0); test_equal(file_exists(&f), (bool)true); + + gui_settings_init(); + test_not_equal((void *)test_get_gui_settings(), NULL); + test_equal(gui_settings_get("test.value1"), 42); + test_equal(gui_settings_get("test.value2"), 84); + + gui_settings_deinit(); } DECLARE_UNIT_TESTS(