]> Sergey Matveev's repositories - nnn.git/commitdiff
Add if blocks used (helps in large dirs)
authorArun Prakash Jana <engineerarun@gmail.com>
Thu, 22 Jun 2017 01:37:51 +0000 (07:07 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Thu, 22 Jun 2017 01:42:40 +0000 (07:12 +0530)
nnn.c

diff --git a/nnn.c b/nnn.c
index ddbc550e6c9e621cf7fec97035bcbf7b02848e15..a4ecae234143b61e62a8bcf95d2dec884dd4e6c3 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -168,7 +168,7 @@ static char *copier;
 static char *editor;
 static char *desktop_manager;
 static off_t blk_size;
-static off_t dir_size;
+static off_t dir_blocks;
 static size_t fs_free;
 static uint open_max;
 static bm bookmark[MAX_BM];
@@ -1428,7 +1428,7 @@ static int
 sum_bsizes(const char *fpath, const struct stat *sb,
           int typeflag, struct FTW *ftwbuf)
 {
-       if (typeflag == FTW_F || typeflag == FTW_D)
+       if (sb->st_blocks && (typeflag == FTW_F || typeflag == FTW_D))
                blk_size += sb->st_blocks;
 
        return 0;
@@ -1480,7 +1480,7 @@ dentfill(char *path, struct entry **dents,
        n = 0;
 
        if (cfg.bsizeorder)
-               dir_size = 0;
+               dir_blocks = 0;
 
        dirp = opendir(path);
        if (dirp == NULL)
@@ -1509,11 +1509,11 @@ dentfill(char *path, struct entry **dents,
                                if (nftw(newpath, sum_bsizes, open_max,
                                         FTW_MOUNT | FTW_PHYS) == -1) {
                                        printmsg("nftw(3) failed");
-                                       dir_size += sb.st_blocks;
+                                       dir_blocks += sb.st_blocks;
                                } else
-                                       dir_size += blk_size;
-                       } else
-                               dir_size += sb.st_blocks;
+                                       dir_blocks += blk_size;
+                       } else if (sb.st_blocks)
+                               dir_blocks += sb.st_blocks;
 
                        continue;
                }
@@ -1543,7 +1543,8 @@ dentfill(char *path, struct entry **dents,
                        } else
                                (*dents)[n].bsize = sb.st_blocks;
 
-                       dir_size += (*dents)[n].bsize;
+                       if ((*dents)[n].bsize)
+                               dir_blocks += (*dents)[n].bsize;
                }
 
                ++n;
@@ -1695,7 +1696,7 @@ redraw(char *path)
                                        replace_escape(dents[cur].name), ind);
                        else {
                                i = sprintf(g_buf, "du: %s in dir, ",
-                                           coolsize(dir_size << 9));
+                                           coolsize(dir_blocks << 9));
                                sprintf(g_buf + i, "%s free [%s%s]", coolsize(fs_free),
                                        replace_escape(dents[cur].name), ind);
                        }