From 01bf8687f27db7d4ddec019a606670d43ec14680 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Thu, 9 Oct 2008 19:15:56 +0200
Subject: update: do the recursive directory check only once

The recursive checks were performed in several functions, and
sometimes a directory was checked twice.
---
 src/update.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/src/update.c b/src/update.c
index c8eb33b6d..5b2721cdb 100644
--- a/src/update.c
+++ b/src/update.c
@@ -224,9 +224,6 @@ addSubDirectoryToDirectory(struct directory *directory,
 {
 	struct directory *subDirectory;
 
-	if (inodeFoundInParent(directory, st->st_ino, st->st_dev))
-		return UPDATE_RETURN_NOUPDATE;
-
 	subDirectory = directory_new(name, directory);
 	if (updateDirectory(subDirectory, st) != UPDATE_RETURN_UPDATED) {
 		directory_free(subDirectory);
@@ -260,8 +257,12 @@ updateInDirectory(struct directory *directory,
 			return UPDATE_RETURN_UPDATED;
 		}
 	} else if (S_ISDIR(st->st_mode)) {
-		struct directory *subdir = directory_get_child(directory, name);
-		if (subdir) {
+		struct directory *subdir;
+
+		if (inodeFoundInParent(directory, st->st_ino, st->st_dev))
+			return UPDATE_RETURN_ERROR;
+
+		if ((subdir = directory_get_child(directory, name))) {
 			enum update_return ret;
 
 			assert(directory == subdir->parent);
@@ -302,10 +303,6 @@ updateDirectory(struct directory *directory, const struct stat *st)
 
 	directory_set_stat(directory, st);
 
-	if (inodeFoundInParent(directory->parent,
-			       directory->inode, directory->device))
-		return UPDATE_RETURN_ERROR;
-
 	dir = opendir(opendir_path(path_max_tmp, dirname));
 	if (!dir)
 		return UPDATE_RETURN_ERROR;
-- 
cgit v1.2.3