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.
This commit is contained in:
parent
2ae94fec6d
commit
0daba6bd43
47
src/update.c
47
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 *
|
||||
|
Loading…
Reference in New Issue
Block a user