From 8c22a60290bb9727a48c2bde94ab38f18c7e847d Mon Sep 17 00:00:00 2001 From: Magnus Holmgren Date: Tue, 30 Jun 2009 17:39:03 +0000 Subject: Small change to significantly reduce stack usage during database scanning. This should fix FS#10396. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21576 a1c6a512-1295-4272-9138-f99709370657 --- apps/tagcache.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'apps') diff --git a/apps/tagcache.c b/apps/tagcache.c index d7a377e7e2..8448c02db1 100644 --- a/apps/tagcache.c +++ b/apps/tagcache.c @@ -4091,13 +4091,30 @@ static bool check_deleted_files(void) return true; } + +/* Note that this function must not be inlined, otherwise the whole point + * of having the code in a separate function is lost. + */ +static void __attribute__ ((noinline)) check_ignore(const char *dirname, + int *ignore, int *unignore) +{ + char newpath[MAX_PATH]; + + /* check for a database.ignore file */ + snprintf(newpath, MAX_PATH, "%s/database.ignore", dirname); + *ignore = file_exists(newpath); + /* check for a database.unignore file */ + snprintf(newpath, MAX_PATH, "%s/database.unignore", dirname); + *unignore = file_exists(newpath); +} + + static bool check_dir(const char *dirname, int add_files) { DIR *dir; int len; int success = false; int ignore, unignore; - char newpath[MAX_PATH]; dir = opendir(dirname); if (!dir) @@ -4106,12 +4123,8 @@ static bool check_dir(const char *dirname, int add_files) return false; } - /* check for a database.ignore file */ - snprintf(newpath, MAX_PATH, "%s/database.ignore", dirname); - ignore = file_exists(newpath); - /* check for a database.unignore file */ - snprintf(newpath, MAX_PATH, "%s/database.unignore", dirname); - unignore = file_exists(newpath); + /* check for a database.ignore and database.unignore */ + check_ignore(dirname, &ignore, &unignore); /* don't do anything if both ignore and unignore are there */ if (ignore != unignore) -- cgit v1.2.3