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
1 changed files with 10 additions and 20 deletions

View File

@ -161,23 +161,6 @@ delete_song_if_removed(struct song *song, void *_data)
return 0; 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 static void
removeDeletedFromDirectory(char *path_max_tmp, struct directory *directory) removeDeletedFromDirectory(char *path_max_tmp, struct directory *directory)
{ {
@ -405,13 +388,20 @@ addParentPathToDB(const char *utf8path)
static void static void
updatePath(const char *path) updatePath(const char *path)
{ {
struct directory *parent;
const char *name;
struct stat st; struct stat st;
parent = addParentPathToDB(path);
if (parent == NULL)
return;
name = mpd_basename(path);
if (myStat(path, &st) == 0) if (myStat(path, &st) == 0)
updateInDirectory(addParentPathToDB(path), updateInDirectory(parent, name, &st);
mpd_basename(path), &st);
else else
delete_path(path); delete_name_in(parent, name);
} }
static void * update_task(void *_path) static void * update_task(void *_path)