aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/conf.c18
-rw-r--r--src/conf.h8
-rw-r--r--src/main.c11
3 files changed, 32 insertions, 5 deletions
diff --git a/src/conf.c b/src/conf.c
index f71ace7f2..adc8ad876 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -387,6 +387,24 @@ config_get_string(const char *name, const char *default_value)
return param->value;
}
+const char *
+config_get_path(const char *name)
+{
+ struct config_param *param = config_get_param(name);
+ char *path;
+
+ if (param == NULL)
+ return NULL;
+
+ path = parsePath(param->value);
+ if (path == NULL)
+ g_error("error parsing \"%s\" at line %i\n",
+ name, param->line);
+
+ g_free(param->value);
+ return param->value = path;
+}
+
struct block_param *
getBlockParam(struct config_param * param, const char *name)
{
diff --git a/src/conf.h b/src/conf.h
index 01a2e5e17..283f763a2 100644
--- a/src/conf.h
+++ b/src/conf.h
@@ -101,6 +101,14 @@ config_get_param(const char *name)
const char *
config_get_string(const char *name, const char *default_value);
+/**
+ * Returns an optional configuration variable which contains an
+ * absolute path. If there is a tilde prefix, it is expanded. Aborts
+ * MPD if the path is not a valid absolute path.
+ */
+const char *
+config_get_path(const char *name);
+
struct block_param *
getBlockParam(struct config_param *param, const char *name);
diff --git a/src/main.c b/src/main.c
index 9b1203a92..c7f9e9987 100644
--- a/src/main.c
+++ b/src/main.c
@@ -81,19 +81,20 @@ struct notify main_notify;
static void openDB(Options * options, char *argv0)
{
- struct config_param *param;
+ const char *path = config_get_path(CONF_DB_FILE);
- param = parseConfigFilePath(CONF_DB_FILE,
- mapper_has_music_directory());
if (!mapper_has_music_directory()) {
- if (param != NULL)
+ if (path != NULL)
g_message("Found " CONF_DB_FILE " setting without "
CONF_MUSIC_DIR " - disabling database");
db_init(NULL);
return;
}
- db_init(param->value);
+ if (path == NULL)
+ g_error(CONF_DB_FILE " setting missing");
+
+ db_init(path);
if (options->createDB > 0 || !db_load()) {
unsigned job;