From 94a5a5a985ab0ce3d8ca72d4e5be28a71a1010e0 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Mon, 13 Oct 2008 16:55:55 +0200
Subject: [PATCH] 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.
---
 src/update.c | 30 ++++++++++--------------------
 1 file changed, 10 insertions(+), 20 deletions(-)

diff --git a/src/update.c b/src/update.c
index 0219dad56..93ba1668c 100644
--- a/src/update.c
+++ b/src/update.c
@@ -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)