From 516540ba565d47c79ac18f8bfe395e0d38598fea Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 9 Oct 2008 19:17:25 +0200 Subject: update: eliminated addSubDirectoryToDirectory() In updateInDirectory(), add new directories immediately and delete them when they turn out to be empty. This simplifies the code and allows us to eliminate addSubDirectoryToDirectory(). --- src/update.c | 35 ++++++++--------------------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/src/update.c b/src/update.c index a1e33ba22..69ae9794d 100644 --- a/src/update.c +++ b/src/update.c @@ -218,23 +218,6 @@ inodeFoundInParent(struct directory *parent, ino_t inode, dev_t device) static enum update_return updateDirectory(struct directory *directory, const struct stat *st); -static enum update_return -addSubDirectoryToDirectory(struct directory *directory, - const char *name, const struct stat *st) -{ - struct directory *subDirectory; - - subDirectory = directory_new(name, directory); - if (updateDirectory(subDirectory, st) != UPDATE_RETURN_UPDATED) { - directory_free(subDirectory); - return UPDATE_RETURN_NOUPDATE; - } - - dirvec_add(&directory->children, subDirectory); - - return UPDATE_RETURN_UPDATED; -} - static enum update_return updateInDirectory(struct directory *directory, const char *name, const struct stat *st) @@ -257,23 +240,21 @@ updateInDirectory(struct directory *directory, } } else if (S_ISDIR(st->st_mode)) { struct directory *subdir; + enum update_return ret; if (inodeFoundInParent(directory, st->st_ino, st->st_dev)) return UPDATE_RETURN_ERROR; - if ((subdir = directory_get_child(directory, name))) { - enum update_return ret; + if (!(subdir = directory_get_child(directory, name))) + subdir = directory_new_child(directory, name); - assert(directory == subdir->parent); + assert(directory == subdir->parent); - ret = updateDirectory(subdir, st); - if (ret == UPDATE_RETURN_ERROR) - delete_directory(subdir); + ret = updateDirectory(subdir, st); + if (ret == UPDATE_RETURN_ERROR || directory_is_empty(subdir)) + delete_directory(subdir); - return ret; - } else { - return addSubDirectoryToDirectory(directory, name, st); - } + return ret; } DEBUG("update: %s is not a directory or music\n", name); -- cgit v1.2.3