From a927c5c36c8dfe0b22e5dddcd2043d2cd39e5a30 Mon Sep 17 00:00:00 2001 From: night0721 Date: Fri, 20 Sep 2024 17:50:24 +0100 Subject: [PATCH] Remove database name config option, instead name can't be changed Add create_data_dir function in util.c --- include/config.h | 1 - include/util.h | 1 + lib/util.c | 18 +++++++++++++----- src/client/db.c | 9 ++++++++- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/include/config.h b/include/config.h index f77a191..22599a1 100644 --- a/include/config.h +++ b/include/config.h @@ -3,7 +3,6 @@ #define PORT 20247 #define MAX_NAME 32 /* Max username length */ -#define DATABASE_NAME "test.db" #define MAX_DATA_LENGTH 8192 /* Don't touch unless you know what you are doing */ diff --git a/include/util.h b/include/util.h index 54e28e9..3d996ed 100644 --- a/include/util.h +++ b/include/util.h @@ -11,6 +11,7 @@ void *memalloc(size_t size); void *estrdup(void *str); char *replace_home(char *str); void mkdir_p(const char *destdir); +void create_data_dir(); void write_log(int type, const char *fmt, ...); void print_bin(const unsigned char *ptr, size_t length); diff --git a/lib/util.c b/lib/util.c index 4dfb391..7526da5 100644 --- a/lib/util.c +++ b/lib/util.c @@ -123,16 +123,24 @@ void mkdir_p(const char *destdir) return; } +void create_data_dir() +{ + char *client_data_dir = estrdup(CLIENT_DATA_DIR); + mkdir_p(client_data_dir); + client_data_dir = replace_home(client_data_dir); + free(client_data_dir); +} + void write_log(int type, const char *fmt, ...) { va_list args; va_start(args, fmt); - char *client_data_dir = estrdup(CLIENT_DATA_DIR); - mkdir_p(client_data_dir); - client_data_dir = replace_home(client_data_dir); char *client_log = memalloc(PATH_MAX); - snprintf(client_log, PATH_MAX, "%s/%s", client_data_dir, "zen.log"); - free(client_data_dir); + snprintf(client_log, PATH_MAX, "%s/%s", CLIENT_DATA_DIR, "zen.log"); + if (access(client_log, W_OK) != 0) { + /* If log file doesn't exist, most likely data dir won't exist too */ + create_data_dir(); + } FILE *log = fopen(client_log, "a"); if (log != NULL) { time_t now = time(NULL); diff --git a/src/client/db.c b/src/client/db.c index 8eb7f24..f2ee7a6 100644 --- a/src/client/db.c +++ b/src/client/db.c @@ -31,7 +31,14 @@ int sqlite_init() sqlite3 *db; char *err_msg = 0; - int rc = sqlite3_open(DATABASE_NAME, &db); + char *zen_db = memalloc(PATH_MAX); + snprintf(zen_db, PATH_MAX, "%s/%s", CLIENT_DATA_DIR, "zen.db"); + if (access(zen_db, W_OK) != 0) { + /* If log file doesn't exist, most likely data dir won't exist too */ + create_data_dir(); + } + + int rc = sqlite3_open(zen_db, &db); if (rc != SQLITE_OK) { fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));