]> Sergey Matveev's repositories - nnn.git/commitdiff
Use single API for nftw
authorArun Prakash Jana <engineerarun@gmail.com>
Wed, 18 Dec 2019 20:23:11 +0000 (01:53 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Wed, 18 Dec 2019 20:23:11 +0000 (01:53 +0530)
src/nnn.c

index dbb6e71fbf04ca7875c5112457bf1dd8701b7e01..20b14ba1d899919be8f7e84ef90dfb7647578305 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -3702,9 +3702,30 @@ static void dentfree(void)
        free(dents);
 }
 
-static int dentfill(char *path, struct entry **dents)
+static blkcnt_t dirwalk(char *path, struct stat *psb)
 {
        static uint open_max;
+
+       /* Increase current open file descriptor limit */
+       if (!open_max)
+               open_max = max_openfds();
+
+       ent_blocks = 0;
+       tolastln();
+       addstr(xbasename(path));
+       addstr(" [^C aborts]\n");
+       refresh();
+
+       if (nftw(path, nftw_fn, open_max, FTW_MOUNT | FTW_PHYS) < 0) {
+               DPRINTF_S("nftw failed");
+               return (cfg.apparentsz ? psb->st_size : psb->st_blocks);
+       }
+
+       return ent_blocks;
+}
+
+static int dentfill(char *path, struct entry **dents)
+{
        int n = 0, count, flags = 0;
        ulong num_saved;
        struct dirent *dp;
@@ -3729,10 +3750,6 @@ static int dentfill(char *path, struct entry **dents)
                        printwarn(NULL);
                        return 0;
                }
-
-               /* Increase current open file descriptor limit */
-               if (!open_max)
-                       open_max = max_openfds();
        }
 
 #if _POSIX_C_SOURCE >= 200112L
@@ -3774,20 +3791,9 @@ static int dentfill(char *path, struct entry **dents)
 
                        if (S_ISDIR(sb.st_mode)) {
                                if (sb_path.st_dev == sb.st_dev) {
-                                       ent_blocks = 0;
                                        mkpath(path, namep, buf);
 
-                                       tolastln();
-                                       addstr(xbasename(buf));
-                                       addstr(" [^C aborts]\n");
-                                       refresh();
-                                       if (nftw(buf, nftw_fn, open_max, FTW_MOUNT | FTW_PHYS) < 0) {
-                                               DPRINTF_S("nftw failed");
-                                               dir_blocks += (cfg.apparentsz
-                                                              ? sb.st_size
-                                                              : sb.st_blocks);
-                                       } else
-                                               dir_blocks += ent_blocks;
+                                       dir_blocks += dirwalk(buf, &sb);
 
                                        if (interrupted) {
                                                closedir(dirp);
@@ -3875,19 +3881,11 @@ static int dentfill(char *path, struct entry **dents)
 
                if (cfg.blkorder) {
                        if (S_ISDIR(sb.st_mode)) {
-                               ent_blocks = 0;
                                num_saved = num_files + 1;
                                mkpath(path, namep, buf);
 
-                               tolastln();
-                               addstr(xbasename(buf));
-                               addstr(" [^C aborts]\n");
-                               refresh();
-                               if (nftw(buf, nftw_fn, open_max, FTW_MOUNT | FTW_PHYS) < 0) {
-                                       DPRINTF_S("nftw failed");
-                                       dentp->blocks = (cfg.apparentsz ? sb.st_size : sb.st_blocks);
-                               } else
-                                       dentp->blocks = ent_blocks;
+                               /* Need to show the disk usage of this dir */
+                               dentp->blocks = dirwalk(buf, &sb);
 
                                if (sb_path.st_dev == sb.st_dev) // NOLINT
                                        dir_blocks += dentp->blocks;
@@ -4217,16 +4215,15 @@ static void browse(char *ipath, const char *session)
        char mark[PATH_MAX] __attribute__ ((aligned));
        char rundir[PATH_MAX] __attribute__ ((aligned));
        char runfile[NAME_MAX + 1] __attribute__ ((aligned));
-       uchar opener_flags = (cfg.cliopener ? F_CLI : (F_NOTRACE | F_NOWAIT));
-       int r = -1, fd, presel, selstartid = 0, selendid = 0;
+       char *path, *lastdir, *lastname, *dir, *tmp;
        ino_t inode = 0;
        enum action sel;
-       bool dir_changed = FALSE;
        struct stat sb;
-       char *path, *lastdir, *lastname, *dir, *tmp;
        MEVENT event;
        struct timespec mousetimings[2] = {{.tv_sec = 0, .tv_nsec = 0}, {.tv_sec = 0, .tv_nsec = 0} };
-       bool currentmouse = 1;
+       int r = -1, fd, presel, selstartid = 0, selendid = 0;
+       const uchar opener_flags = (cfg.cliopener ? F_CLI : (F_NOTRACE | F_NOWAIT));
+       bool currentmouse = 1, dir_changed = FALSE;
 
        atexit(dentfree);