diff options
-rw-r--r-- | src/update.c | 24 |
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) |