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;
|
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 *
|
static struct directory *
|
||||||
addDirectoryPathToDB(const char *utf8path)
|
addDirectoryPathToDB(const char *utf8path)
|
||||||
{
|
{
|
||||||
char path_max_tmp[MPD_PATH_MAX];
|
char path_max_tmp[MPD_PATH_MAX];
|
||||||
char *parent;
|
char *parent;
|
||||||
struct directory *parentDirectory;
|
struct directory *parentDirectory;
|
||||||
struct directory *directory;
|
|
||||||
struct song *conflicting;
|
|
||||||
|
|
||||||
parent = parent_path(path_max_tmp, utf8path);
|
parent = parent_path(path_max_tmp, utf8path);
|
||||||
|
|
||||||
@ -339,26 +361,7 @@ addDirectoryPathToDB(const char *utf8path)
|
|||||||
if (!parentDirectory)
|
if (!parentDirectory)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if ((directory = directory_get_child(parentDirectory, utf8path))) {
|
return directory_make_child_checked(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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct directory *
|
static struct directory *
|
||||||
|
Loading…
Reference in New Issue
Block a user