From 7aebefe61c47a4e49512e4ecc42a929ae3236f64 Mon Sep 17 00:00:00 2001 From: Tristan Riehs Date: Sun, 31 May 2026 18:22:24 +0200 Subject: Factorize database opening --- src/main.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index e53ce61..7997f8f 100644 --- a/src/main.c +++ b/src/main.c @@ -40,7 +40,8 @@ static void parse_args(int argc, const struct ftag_command *commands, int command_count); -static void __sqlite3_check(int rc, sqlite3 *db, const char *file, int line, const char *func) +static void __sqlite3_check(int rc, sqlite3 *db, + const char *file, int line, const char *func) { /* Note: "rc" stands for "return code" */ if (rc == SQLITE_OK) @@ -54,6 +55,15 @@ static void __sqlite3_check(int rc, sqlite3 *db, const char *file, int line, con #define sqlite3_check(RC, DB) \ __sqlite3_check(RC, DB, __FILE__, __LINE__, __func__) +static sqlite3 *ftag_db_open(void) +{ + const char *db_path = ftag_config_get(FC_DATABASE_PATH); + sqlite3 *db; + int rc = sqlite3_open(db_path, &db); + sqlite3_check(rc, db); + return db; +} + /* Convert heap-allocated *STR from C string to SQL string, essentially by * adding single quotes to escape single quotes. */ static void sanitize_sql_str(char **str) @@ -159,8 +169,7 @@ static void ftag_file_get_extension(char *out, int size, const char *file) strbuild(sql, "SELECT extension FROM files WHERE canonical_name = '%s';", file); - rc = sqlite3_open(ftag_config_get(FC_DATABASE_PATH), &db); - sqlite3_check(rc, db); + db = ftag_db_open(); rc = sqlite3_exec(db, sql, ftag_file_get_extension_callback, &ext, NULL); sqlite3_check(rc, db); sqlite3_close(db); @@ -311,8 +320,7 @@ static void ftag_list_table(const char *table, const char *col) char sql[64]; sqlite3 *db = NULL; int rc; - rc = sqlite3_open(ftag_config_get(FC_DATABASE_PATH), &db); - sqlite3_check(rc, db); + db = ftag_db_open(); strbuild(sql, "SELECT %s FROM %s;", col, table); rc = sqlite3_exec(db, sql, ftag_print, NULL, NULL); sqlite3_check(rc, db); @@ -554,8 +562,7 @@ static void ftag_file_add(int argc, char **argv) /* step 2: retrieve sums of files already in the database */ sqlite3 *db; - rc = sqlite3_open(ftag_config_get(FC_DATABASE_PATH), &db); - sqlite3_check(rc, db); + db = ftag_db_open(); int next_id = table_next_id(db, "files"); int file_count = next_id; /* number of files already in the database */ uint32_t known_sums_array[file_count]; @@ -663,8 +670,8 @@ static void ftag_file_tag(int argc, char **argv) const char *file = argv[0]; char sql[64]; sqlite3 *db; - int rc = sqlite3_open(ftag_config_get(FC_DATABASE_PATH), &db); - sqlite3_check(rc, db); + int rc; + db = ftag_db_open(); int file_id = get_id_by_col(db, "files", "canonical_name", file); printf("%s: debug: file id is %d\n", __func__, file_id); for (int i = 1; i < argc; i++) { @@ -818,8 +825,7 @@ static void ftag_query(int argc, char **argv) char sql[4096]; sqlite3 *db; int rc; - rc = sqlite3_open(ftag_config_get(FC_DATABASE_PATH), &db); - sqlite3_check(rc, db); + db = ftag_db_open(); char sql_join[2048]; memset(sql_join, 0, sizeof(sql_join)); ftag_query_join(db, sql_join, sizeof(sql_join)-1, @@ -990,8 +996,7 @@ static void ftag_tag_add(int argc, char **argv) sqlite3 *db; int rc; - rc = sqlite3_open(ftag_config_get(FC_DATABASE_PATH), &db); - sqlite3_check(rc, db); + db = ftag_db_open(); strbuild(sql, "SELECT name, description FROM tags WHERE name = '%s';", new_tag_name); -- cgit v1.2.3