diff options
-rw-r--r-- | main.c | 2 | ||||
-rw-r--r-- | sxiv.h | 2 | ||||
-rw-r--r-- | thumbs.c | 2 | ||||
-rw-r--r-- | util.c | 12 |
4 files changed, 12 insertions, 6 deletions
@@ -889,7 +889,7 @@ int main(int argc, char **argv) continue; } start = fileidx; - while ((filename = r_readdir(&dir)) != NULL) { + while ((filename = r_readdir(&dir, true)) != NULL) { check_add_file(filename, false); free((void*) filename); } @@ -364,7 +364,7 @@ void error(int, int, const char*, ...); void size_readable(float*, const char**); int r_opendir(r_dir_t*, const char*, bool); int r_closedir(r_dir_t*); -char* r_readdir(r_dir_t*); +char* r_readdir(r_dir_t*, bool); int r_mkdir(char*); @@ -131,7 +131,7 @@ void tns_clean_cache(tns_t *tns) dirlen = strlen(cache_dir); - while ((cfile = r_readdir(&dir)) != NULL) { + while ((cfile = r_readdir(&dir, false)) != NULL) { filename = cfile + dirlen; delete = false; @@ -134,7 +134,7 @@ int r_closedir(r_dir_t *rdir) return ret; } -char* r_readdir(r_dir_t *rdir) +char* r_readdir(r_dir_t *rdir, bool skip_dotfiles) { size_t len; char *filename; @@ -143,8 +143,14 @@ char* r_readdir(r_dir_t *rdir) while (true) { if (rdir->dir != NULL && (dentry = readdir(rdir->dir)) != NULL) { - if (dentry->d_name[0] == '.') - continue; + if (dentry->d_name[0] == '.') { + if (skip_dotfiles) + continue; + if (dentry->d_name[1] == '\0') + continue; + if (dentry->d_name[1] == '.' && dentry->d_name[2] == '\0') + continue; + } len = strlen(rdir->name) + strlen(dentry->d_name) + 2; filename = (char*) emalloc(len); |