aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/update.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/update.c b/src/update.c
index dd48bfe78..1415852e0 100644
--- a/src/update.c
+++ b/src/update.c
@@ -340,21 +340,23 @@ directory_make_child_checked(struct directory *parent, const char *path)
static struct directory *
addDirectoryPathToDB(const char *utf8path)
{
- char path_max_tmp[MPD_PATH_MAX];
- char *parent;
- struct directory *parentDirectory;
+ struct directory *directory = db_get_root();
+ char *duplicated = xstrdup(utf8path);
+ char *slash = duplicated;
- parent = parent_path(path_max_tmp, utf8path);
+ while (1) {
+ if ((slash = strchr(slash, '/')))
+ *slash = 0;
- if (strlen(parent) == 0)
- parentDirectory = db_get_root();
- else
- parentDirectory = addDirectoryPathToDB(parent);
+ directory = directory_make_child_checked(directory, duplicated);
+ if (!directory || !slash)
+ break;
- if (!parentDirectory)
- return NULL;
+ *slash++ = '/';
+ }
- return directory_make_child_checked(parentDirectory, utf8path);
+ free(duplicated);
+ return directory;
}
static struct directory * addParentPathToDB(const char *utf8path)