From 82166b715c2e8b39eb20d179c95aa982335ad07c Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 4 Jan 2009 21:18:16 +0100 Subject: database: db_init() initializes library, does not update For updating the database, directory_update_init() should be called explicitly. --- src/database.c | 10 ++-------- src/database.h | 13 +++++++++++++ src/main.c | 11 ++++++++++- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/database.c b/src/database.c index b465a3472..7c5e829ac 100644 --- a/src/database.c +++ b/src/database.c @@ -22,10 +22,8 @@ #include "directory_save.h" #include "song.h" #include "conf.h" -#include "ls.h" #include "path.h" #include "stats.h" -#include "update.h" #include "config.h" #include @@ -48,13 +46,7 @@ static time_t directory_dbModTime; void db_init(void) { - unsigned ret; - music_root = directory_new("", NULL); - - ret = directory_update_init(NULL); - if (ret == 0) - g_error("directory update failed"); } void @@ -256,6 +248,8 @@ db_load(void) int foundFsCharset = 0; int foundVersion = 0; + assert(music_root != NULL); + if (!music_root) music_root = directory_new("", NULL); while (!(fp = fopen(dbFile, "r")) && errno == EINTR) ; diff --git a/src/database.h b/src/database.h index b6884b604..238ddb374 100644 --- a/src/database.h +++ b/src/database.h @@ -24,12 +24,25 @@ struct directory; +/** + * Initialize the database library. + */ void db_init(void); void db_finish(void); +/** + * Clear the database. + */ +static inline void +db_clear(void) +{ + db_finish(); + db_init(); +} + struct directory * db_get_root(void); diff --git a/src/main.c b/src/main.c index d0573e9b3..bd00d4007 100644 --- a/src/main.c +++ b/src/main.c @@ -126,7 +126,11 @@ static void changeToUser(void) static void openDB(Options * options, char *argv0) { + db_init(); + if (options->createDB > 0 || db_load() < 0) { + unsigned job; + if (options->createDB < 0) { g_error("can't open db file and using " "\"--no-create-db\" command line option; " @@ -134,7 +138,12 @@ static void openDB(Options * options, char *argv0) } if (db_check() < 0) exit(EXIT_FAILURE); - db_init(); + + db_clear(); + + job = directory_update_init(NULL); + if (job == 0) + g_error("directory update failed"); } } -- cgit v1.2.3