From 0daba6bd4342f1f080a35ca0da3d8ec63edef51f Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 9 Oct 2008 15:47:22 +0200 Subject: 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. --- src/update.c | 47 +++++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/update.c b/src/update.c index ddd3e27d1..b93aadc5d 100644 --- a/src/update.c +++ b/src/update.c @@ -320,14 +320,36 @@ updateDirectory(struct directory *directory) return ret; } +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 * -- cgit v1.2.3