Commit 0daba6bd authored by Max Kellermann's avatar Max Kellermann

update: moved code to directory_make_child_checked()

The branching looks a bit complicated in addDirectoryPathToDB() - improve its readability by moving code to a simplified separate function.
parent 2ae94fec
......@@ -321,13 +321,35 @@ updateDirectory(struct directory *directory)
}
static struct directory *
directory_make_child_checked(struct directory *parent, const char *path)
{
struct directory *directory;
struct stat st;
struct song *conflicting;
directory = directory_get_child(parent, path);
if (directory != NULL)
return directory;
if (myStat(path, &st) < 0 ||
inodeFoundInParent(parent, st.st_ino, st.st_dev))
return NULL;
/* if we're adding directory paths, make sure to delete filenames
with potentially the same name */
conflicting = songvec_find(&parent->songs, mpd_basename(path));
if (conflicting)
delete_song(parent, conflicting);
return directory_new_child(parent, path);
}
static struct directory *
addDirectoryPathToDB(const char *utf8path)
{
char path_max_tmp[MPD_PATH_MAX];
char *parent;
struct directory *parentDirectory;
struct directory *directory;
struct song *conflicting;
parent = parent_path(path_max_tmp, utf8path);
......@@ -339,26 +361,7 @@ addDirectoryPathToDB(const char *utf8path)
if (!parentDirectory)
return NULL;
if ((directory = directory_get_child(parentDirectory, utf8path))) {
assert(parentDirectory == directory->parent);
} else {
struct stat st;
if (myStat(utf8path, &st) < 0 ||
inodeFoundInParent(parentDirectory, st.st_ino, st.st_dev))
return NULL;
directory = directory_new_child(parentDirectory,
utf8path);
}
/* if we're adding directory paths, make sure to delete filenames
with potentially the same name */
conflicting = songvec_find(&parentDirectory->songs,
mpd_basename(directory->path));
if (conflicting)
delete_song(parentDirectory, conflicting);
return directory;
return directory_make_child_checked(parentDirectory, utf8path);
}
static struct directory *
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment