From e3d4fa6946140d91c02a8ae53e56ab8d056f172c Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Fri, 30 Jan 2009 13:47:45 +0100
Subject: [PATCH] mapper: remove trailing slashes from music_directory

When the user configures a music_directory with a trailing slash, it
may break playlist loading, because MPD expects a double slash.  Chop
off the trailing slash.
---
 NEWS         |  1 +
 src/mapper.c | 16 +++++++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index 0b3ab53a0..416d8ae0d 100644
--- a/NEWS
+++ b/NEWS
@@ -41,6 +41,7 @@ ver 0.14.2 (2009/??/??)
   - jack: allocate ring buffers before connecting
   - jack: clear "shutdown" flag on reconnect
   - jack: reduced sleep time to 1ms
+* mapper: remove trailing slashes from music_directory
 
 
 ver 0.14.1 (2009/01/17)
diff --git a/src/mapper.c b/src/mapper.c
index 28471e60e..1eecbf283 100644
--- a/src/mapper.c
+++ b/src/mapper.c
@@ -40,13 +40,27 @@ static size_t music_dir_length;
 
 static char *playlist_dir;
 
+/**
+ * Duplicate a string, chop all trailing slashes.
+ */
+static char *
+strdup_chop_slash(const char *path_fs)
+{
+	size_t length = strlen(path_fs);
+
+	while (length > 0 && path_fs[length - 1] == G_DIR_SEPARATOR)
+		--length;
+
+	return g_strndup(path_fs, length);
+}
+
 static void
 mapper_set_music_dir(const char *path)
 {
 	int ret;
 	struct stat st;
 
-	music_dir = g_strdup(path);
+	music_dir = strdup_chop_slash(path);
 	music_dir_length = strlen(music_dir);
 
 	ret = stat(music_dir, &st);