aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/database.c10
-rw-r--r--src/database.h13
-rw-r--r--src/main.c11
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 <glib.h>
@@ -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");
}
}