From cab3b501fc591be361977e40c96976233e26a5e4 Mon Sep 17 00:00:00 2001 From: Linus Probert Date: Mon, 16 Apr 2018 21:19:26 +0200 Subject: [PATCH] Borke out some of the settings sqlite code to it's own module. --- CMakeLists.txt | 1 + src/db.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/db.h | 19 +++++++++++++++++++ src/settings.c | 39 ++++++++++++++++++--------------------- 4 files changed, 79 insertions(+), 21 deletions(-) create mode 100644 src/db.c create mode 100644 src/db.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d4bedb2..91305e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,6 +121,7 @@ add_executable(breakhack src/vector2d src/map_room_modifiers src/sqlite3 + src/db src/settings ) diff --git a/src/db.c b/src/db.c new file mode 100644 index 0000000..9d7dd82 --- /dev/null +++ b/src/db.c @@ -0,0 +1,41 @@ +#include "db.h" +#include "sqlite3.h" +#include "util.h" + +bool +db_open(const char *file, sqlite3 **db) +{ + debug("Opening DB: %s", file); + + int result = sqlite3_open(file, db); + if (result) { + error("Failed to open db: %s", sqlite3_errmsg(db)); + } + return result == 0; +} + +bool +db_execute_stmnt(const char *stmnt, + sqlite3 *db, + int(*cb)(void*, int, char**, char**), + void *cb_arg) +{ + debug("Executing sql: %s", stmnt); + + char *errorMsg = NULL; + if (sqlite3_exec(db, stmnt, cb, cb_arg, &errorMsg)) { + error("Faled to execute statement: %s", stmnt); + error("Sqlite3: %s", errorMsg); + sqlite3_free(errorMsg); + return false; + } + return true; +} + +void db_close(sqlite3 **db) +{ + char *fname = sqlite3_db_filename(*db, NULL); + debug("Closing db: %s", fname); + sqlite3_close(*db); + *db = NULL; +} diff --git a/src/db.h b/src/db.h new file mode 100644 index 0000000..1b84b54 --- /dev/null +++ b/src/db.h @@ -0,0 +1,19 @@ +#ifndef DB_H_ +#define DB_H_ + +#include +#include "sqlite3.h" + +bool +db_open(const char *file, sqlite3 **db); + +bool +db_execute_stmnt(const char *stmnt, + sqlite3 *db, + int(*cb)(void*, int, char**, char**), + void *cb_arg); + +void +db_close(sqlite3 **db); + +#endif // DB_H_ \ No newline at end of file diff --git a/src/settings.c b/src/settings.c index 3231cf7..76a4754 100644 --- a/src/settings.c +++ b/src/settings.c @@ -22,6 +22,7 @@ #include "sqlite3.h" #include "util.h" #include "defines.h" +#include "db.h" #define SETTINGS_DB_FILE ".data.db" @@ -40,17 +41,11 @@ set_default_settings(void) static void execute_statement(const char *stmt, - int (*cb)(void*, int, char**, char**), - void *cb_arg) + int(*cb)(void*, int, char**, char**), + void *cb_arg) { - char *errorMsg; - - set_default_settings(); - if (sqlite3_exec(db, stmt, cb, cb_arg, &errorMsg)) { - error("Faled to execture statement: %s", stmt); - error("Sqlite3: %s", errorMsg); - sqlite3_free(errorMsg); - sqlite3_close(db); + if (!db_execute_stmnt(stmt, db, cb, cb_arg)) { + db_close(&db); fatal("Exiting"); } } @@ -59,8 +54,8 @@ static void create_tables(void) { execute_statement("CREATE TABLE IF NOT EXISTS settings_int(key TEXT PRIMARY KEY, value INTEGER)", - NULL, - NULL); + NULL, + NULL); } static int @@ -73,12 +68,13 @@ load_settings_cb(void *unused, int count, char **values, char **colNames) if (strcmp("key", colNames[i]) != 0) continue; - debug("Loading setting: %s = %s", values[i], values[i+1]); + debug("Loading setting: %s = %s", values[i], values[i + 1]); if (!strcmp(KEY_SOUND_ENABLED, values[i])) { - settings.sound_enabled = (bool) atoi(values[i+1]); + settings.sound_enabled = (bool)atoi(values[i + 1]); i += 2; - } else if (!strcmp(KEY_MUSIC_ENABLED, values[i])) { - settings.music_enabled = (bool) atoi(values[i+1]); + } + else if (!strcmp(KEY_MUSIC_ENABLED, values[i])) { + settings.music_enabled = (bool)atoi(values[i + 1]); i += 2; } } @@ -94,12 +90,11 @@ load_settings(void) void settings_init(void) { - int result = sqlite3_open(SETTINGS_DB_FILE, &db); - if (result) { - error("Failed to open settings db: %s", sqlite3_errmsg(db)); - sqlite3_close(db); + if (!db_open(SETTINGS_DB_FILE, &db)) { + db_close(&db); fatal("Exiting"); } + set_default_settings(); create_tables(); load_settings(); } @@ -107,6 +102,8 @@ settings_init(void) static void save_setting_int(const char *key, int value) { + // TODO(Linus): Move this into db.c, probably using varargs + const char *stmtStr = "INSERT OR REPLACE INTO settings_int(key, value) values (?, ?)"; const char *pzTest; sqlite3_stmt *stmt; @@ -147,5 +144,5 @@ void settings_close(void) { settings_save(); - sqlite3_close(db); + db_close(&db); }