From 4c99b47411932c2e46ca282597418329a7fbeea9 Mon Sep 17 00:00:00 2001 From: Doron Behar Date: Tue, 23 Apr 2019 14:42:38 +0300 Subject: [PATCH] Always read all files in the directory sxiv gets --- main.c | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/main.c b/main.c index 8adbf78..f5eeea1 100644 --- a/main.c +++ b/main.c @@ -21,6 +21,7 @@ #include "config.h" #include +#include #include #include #include @@ -817,15 +818,36 @@ void setup_signal(int sig, void (*handler)(int sig)) error(EXIT_FAILURE, errno, "signal %d", sig); } +int add_files_from_dir(char *directory, char *exclude_filename, bool recursive) +{ + r_dir_t dir; + if (r_opendir(&dir, directory, recursive) < 0) { + error(0, errno, "%s", directory); + return 1; + } + int start = fileidx; + char *filename; + while ((filename = r_readdir(&dir, true)) != NULL) { + + if (strcmp(filename, exclude_filename) != 0) { + check_add_file(filename, false); + } + free((void*) filename); + } + r_closedir(&dir); + if (fileidx - start > 1) + qsort(files + start, fileidx - start, sizeof(fileinfo_t), fncmp); + return 0; +} + int main(int argc, char **argv) { - int i, start; + int i; size_t n; ssize_t len; char *filename; const char *homedir, *dsuffix = ""; struct stat fstats; - r_dir_t dir; setup_signal(SIGCHLD, sigchld); setup_signal(SIGPIPE, SIG_IGN); @@ -874,19 +896,14 @@ int main(int argc, char **argv) } if (!S_ISDIR(fstats.st_mode)) { check_add_file(filename, true); + char *_filename = strdup(filename); + char *filedir = strdup(filename); + filedir = dirname(filename); + if (!add_files_from_dir(filedir, _filename, options->recursive)) + continue; } else { - if (r_opendir(&dir, filename, options->recursive) < 0) { - error(0, errno, "%s", filename); + if (!add_files_from_dir(filename, "", options->recursive)) continue; - } - start = fileidx; - while ((filename = r_readdir(&dir, true)) != NULL) { - check_add_file(filename, false); - free((void*) filename); - } - r_closedir(&dir); - if (fileidx - start > 1) - qsort(files + start, fileidx - start, sizeof(fileinfo_t), fncmp); } } -- 2.24.1