From 9c6b2a32f510778252f3a9c79725334aaec4d80b Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Sun, 18 Jan 2009 17:54:46 +0100
Subject: [PATCH] conf: added config_get_path()

config_get_path() is an simpler interface than parseConfigFilePath().
---
 src/conf.c | 18 ++++++++++++++++++
 src/conf.h |  8 ++++++++
 src/main.c | 11 ++++++-----
 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;