aboutsummaryrefslogtreecommitdiffstats
path: root/src/update.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-10-09 15:37:21 +0200
committerMax Kellermann <max@duempel.org>2008-10-09 15:37:21 +0200
commit476578d2a9a439735a35b380c7b631b978ca1ca3 (patch)
tree0558b2f8df7057886b002ac4b753ccd7bec780a6 /src/update.c
parent60d122e850f928f03fffbf4b31c9f1b25fd4b318 (diff)
downloadmpd-476578d2a9a439735a35b380c7b631b978ca1ca3.tar.gz
mpd-476578d2a9a439735a35b380c7b631b978ca1ca3.tar.xz
mpd-476578d2a9a439735a35b380c7b631b978ca1ca3.zip
update: removed addToDirectory()
Use updateInDirectory() instead of addToDirectory(). Eliminate a duplicate stat() in updateInDirectory() by calling song_file_update() directly.
Diffstat (limited to 'src/update.c')
-rw-r--r--src/update.c51
1 files changed, 12 insertions, 39 deletions
diff --git a/src/update.c b/src/update.c
index e24702749..55740bfc4 100644
--- a/src/update.c
+++ b/src/update.c
@@ -187,35 +187,6 @@ addSubDirectoryToDirectory(struct directory *directory,
}
static enum update_return
-addToDirectory(struct directory *directory, const char *name)
-{
- struct stat st;
-
- if (myStat(name, &st)) {
- DEBUG("failed to stat %s: %s\n", name, strerror(errno));
- return UPDATE_RETURN_ERROR;
- }
-
- if (S_ISREG(st.st_mode) &&
- hasMusicSuffix(name, 0) && isMusic(name, NULL, 0)) {
- struct song *song;
- const char *shortname = mpd_basename(name);
-
- if (!(song = song_file_load(shortname, directory)))
- return -1;
- songvec_add(&directory->songs, song);
- LOG("added %s\n", name);
- return UPDATE_RETURN_UPDATED;
- } else if (S_ISDIR(st.st_mode)) {
- return addSubDirectoryToDirectory(directory, name, &st);
- }
-
- DEBUG("addToDirectory: %s is not a directory or music\n", name);
-
- return UPDATE_RETURN_ERROR;
-}
-
-static enum update_return
updateInDirectory(struct directory *directory, const char *name)
{
struct song *song;
@@ -228,7 +199,12 @@ updateInDirectory(struct directory *directory, const char *name)
const char *shortname = mpd_basename(name);
if (!(song = songvec_find(&directory->songs, shortname))) {
- addToDirectory(directory, name);
+ song = song_file_load(shortname, directory);
+ if (song == NULL)
+ return -1;
+
+ songvec_add(&directory->songs, song);
+ LOG("added %s\n", name);
return UPDATE_RETURN_UPDATED;
} else if (st.st_mtime != song->mtime) {
LOG("updating %s\n", name);
@@ -247,6 +223,8 @@ updateInDirectory(struct directory *directory, const char *name)
}
}
+ DEBUG("update: %s is not a directory or music\n", name);
+
return UPDATE_RETURN_NOUPDATE;
}
@@ -293,14 +271,9 @@ updateDirectory(struct directory *directory)
if (!isRootDirectory(directory->path))
utf8 = pfx_dir(path_max_tmp, utf8, strlen(utf8),
dirname, strlen(dirname));
- if (was_empty) {
- if (addToDirectory(directory, path_max_tmp) ==
- UPDATE_RETURN_UPDATED)
- ret = UPDATE_RETURN_UPDATED;
- } else {
- if (updateInDirectory(directory, path_max_tmp) > 0)
- ret = UPDATE_RETURN_UPDATED;
- }
+ if (updateInDirectory(directory, path_max_tmp) ==
+ UPDATE_RETURN_UPDATED)
+ ret = UPDATE_RETURN_UPDATED;
}
closedir(dir);
@@ -446,7 +419,7 @@ static enum update_return updatePath(const char *utf8path)
} else if (0 == inodeFoundInParent(parentDirectory->parent,
parentDirectory->inode,
parentDirectory->device)
- && addToDirectory(parentDirectory, path)
+ && updateInDirectory(parentDirectory, path)
== UPDATE_RETURN_UPDATED) {
ret = UPDATE_RETURN_UPDATED;
}