aboutsummaryrefslogtreecommitdiffstats
path: root/nnn.c
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2017-06-22 09:39:17 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2017-06-22 09:39:17 +0530
commit303f36aed0dbb3bc6560f4ba0de1b375167d0827 (patch)
tree319c74fa9a692d06efba011bf185df4a511a98c8 /nnn.c
parent2524dfb08c4f0a8f4ba83cb3dc3b07a074af1664 (diff)
downloadnnn-303f36aed0dbb3bc6560f4ba0de1b375167d0827.tar.gz
Show total files in du mode
Diffstat (limited to 'nnn.c')
-rw-r--r--nnn.c43
1 files changed, 28 insertions, 15 deletions
diff --git a/nnn.c b/nnn.c
index 115bed8..c066fbc 100644
--- a/nnn.c
+++ b/nnn.c
@@ -169,6 +169,7 @@ static char *editor;
static char *desktop_manager;
static blkcnt_t ent_blocks;
static blkcnt_t dir_blocks;
+static ulong num_files;
static size_t fs_free;
static uint open_max;
static bm bookmark[MAX_BM];
@@ -1431,6 +1432,7 @@ sum_bsizes(const char *fpath, const struct stat *sb,
if (sb->st_blocks && (typeflag == FTW_F || typeflag == FTW_D))
ent_blocks += sb->st_blocks;
+ ++num_files;
return 0;
}
@@ -1479,8 +1481,10 @@ dentfill(char *path, struct entry **dents,
n = 0;
- if (cfg.blkorder)
+ if (cfg.blkorder) {
+ num_files = 0;
dir_blocks = 0;
+ }
dirp = opendir(path);
if (dirp == NULL)
@@ -1492,18 +1496,14 @@ dentfill(char *path, struct entry **dents,
(dp->d_name[1] == '.' && dp->d_name[2] == '\0'))))
continue;
- mkpath(path, dp->d_name, newpath, PATH_MAX);
- if (lstat(newpath, &sb) == -1) {
- continue;
- /* if (*dents)
- free(*dents);
- printerr(1, "lstat"); */
- }
-
if (filter(re, dp->d_name) == 0) {
if (!cfg.blkorder)
continue;
+ mkpath(path, dp->d_name, newpath, PATH_MAX);
+ if (lstat(newpath, &sb) == -1)
+ continue;
+
if (S_ISDIR(sb.st_mode)) {
ent_blocks = 0;
if (nftw(newpath, sum_bsizes, open_max,
@@ -1512,12 +1512,23 @@ dentfill(char *path, struct entry **dents,
dir_blocks += sb.st_blocks;
} else
dir_blocks += ent_blocks;
- } else if (sb.st_blocks)
- dir_blocks += sb.st_blocks;
+ } else {
+ if (sb.st_blocks)
+ dir_blocks += sb.st_blocks;
+
+ ++num_files;
+ }
continue;
}
+ mkpath(path, dp->d_name, newpath, PATH_MAX);
+ if (lstat(newpath, &sb) == -1) {
+ if (*dents)
+ free(*dents);
+ printerr(1, "lstat");
+ }
+
if (n == total_dents) {
total_dents += 64;
*dents = realloc(*dents, total_dents * sizeof(**dents));
@@ -1540,8 +1551,10 @@ dentfill(char *path, struct entry **dents,
(*dents)[n].blocks = sb.st_blocks;
} else
(*dents)[n].blocks = ent_blocks;
- } else
+ } else {
(*dents)[n].blocks = sb.st_blocks;
+ ++num_files;
+ }
if ((*dents)[n].blocks)
dir_blocks += (*dents)[n].blocks;
@@ -1695,9 +1708,9 @@ redraw(char *path)
sprintf(g_buf, "total %d %s[%s%s]", ndents, sort,
replace_escape(dents[cur].name), ind);
else {
- i = sprintf(g_buf, "du: %s in dir, ",
- coolsize(dir_blocks << 9));
- sprintf(g_buf + i, "%s free [%s%s]", coolsize(fs_free),
+ i = sprintf(g_buf, "du: %s (%lu files) ",
+ coolsize(dir_blocks << 9), num_files);
+ sprintf(g_buf + i, "vol: %s free [%s%s]", coolsize(fs_free),
replace_escape(dents[cur].name), ind);
}