From 0c737d3b2e4728347cf4d52025f9fc2ebbee6e90 Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Wed, 1 May 2024 10:01:56 -0400 Subject: readdir_r use in tagcache.check_dir, ft_load Change-Id: Ibcde39ed247e100dd47ae877fb2a3625bbb38d8b --- apps/filetree.c | 20 +++++++++----------- apps/tagcache.c | 6 ++++-- 2 files changed, 13 insertions(+), 13 deletions(-) (limited to 'apps') diff --git a/apps/filetree.c b/apps/filetree.c index b5f5dece5a..99bb1340d7 100644 --- a/apps/filetree.c +++ b/apps/filetree.c @@ -292,6 +292,7 @@ int ft_load(struct tree_context* c, const char* tempdir) int files_in_dir = 0; int name_buffer_used = 0; + struct dirent direntry; struct dirent *entry; bool (*callback_show_item)(char *, int, struct tree_context *) = NULL; DIR *dir; @@ -313,7 +314,7 @@ int ft_load(struct tree_context* c, const char* tempdir) c->dirfull = false; tree_lock_cache(c); - while ((entry = readdir(dir))) { + while (readdir_r(dir, &direntry, &entry) == 0 && entry) { int len; struct dirinfo info; struct entry* dptr = tree_get_entry_at(c, files_in_dir); @@ -326,18 +327,18 @@ int ft_load(struct tree_context* c, const char* tempdir) info = dir_get_info(dir, entry); len = strlen((char *)entry->d_name); - /* skip directories . and .. */ - if ((info.attribute & ATTR_DIRECTORY) && - (((len == 1) && (!strncmp((char *)entry->d_name, ".", 1))) || - ((len == 2) && (!strncmp((char *)entry->d_name, "..", 2))))) { - continue; - } - /* Skip FAT volume ID */ if (info.attribute & ATTR_VOLUME_ID) { continue; } + dptr->attr = info.attribute; + int dir_attr = (dptr->attr & ATTR_DIRECTORY); + + /* skip directories . and .. */ + if (dir_attr && is_dotdir_name(entry->d_name)) + continue; + /* filter out dotfiles and hidden files */ if (*c->dirfilter != SHOW_ALL && ((entry->d_name[0]=='.') || @@ -345,9 +346,6 @@ int ft_load(struct tree_context* c, const char* tempdir) continue; } - dptr->attr = info.attribute; - int dir_attr = (dptr->attr & ATTR_DIRECTORY); - /* check for known file types */ if ( !(dir_attr) ) dptr->attr |= filetype_get_attr((char *)entry->d_name); diff --git a/apps/tagcache.c b/apps/tagcache.c index 9463d7c865..302b6ad9de 100644 --- a/apps/tagcache.c +++ b/apps/tagcache.c @@ -4863,8 +4863,8 @@ static int free_search_roots(struct search_roots_ll * start) static bool check_dir(const char *dirname, int add_files) { + static struct dirent direntry; /* function is recursive, static uses less stack */ int success = false; - DIR *dir = opendir(dirname); if (!dir) { @@ -4883,7 +4883,9 @@ static bool check_dir(const char *dirname, int add_files) /* Recursively scan the dir. */ while (!check_event_queue()) { - struct dirent *entry = readdir(dir); + struct dirent *entry; + readdir_r(dir, &direntry, &entry); + if (entry == NULL) { success = true; -- cgit v1.2.3