update: always look up parent directory in updatePath()

By always creating the parent directory, we can use delete_name_in()
without further lookups.  The parents which may non exist will be
pruned later.  An update request for a non-existing or empty directory
should be quite unusual, so this doesn't add any measurable overhead.
This commit is contained in:
Max Kellermann 2008-10-13 16:55:55 +02:00
parent a52343732b
commit 94a5a5a985

View File

@ -161,23 +161,6 @@ delete_song_if_removed(struct song *song, void *_data)
return 0;
}
static void
delete_path(const char *path)
{
struct directory *directory = db_get_directory(path);
struct song *song = db_get_song(path);
if (directory != NULL) {
delete_directory(directory);
modified = true;
}
if (song != NULL) {
delete_song(song->parent, song);
modified = true;
}
}
static void
removeDeletedFromDirectory(char *path_max_tmp, struct directory *directory)
{
@ -405,13 +388,20 @@ addParentPathToDB(const char *utf8path)
static void
updatePath(const char *path)
{
struct directory *parent;
const char *name;
struct stat st;
parent = addParentPathToDB(path);
if (parent == NULL)
return;
name = mpd_basename(path);
if (myStat(path, &st) == 0)
updateInDirectory(addParentPathToDB(path),
mpd_basename(path), &st);
updateInDirectory(parent, name, &st);
else
delete_path(path);
delete_name_in(parent, name);
}
static void * update_task(void *_path)