Show total files in du mode

This commit is contained in:
Arun Prakash Jana 2017-06-22 09:39:17 +05:30
parent 2524dfb08c
commit 303f36aed0
No known key found for this signature in database
GPG key ID: A75979F35C080412
2 changed files with 29 additions and 16 deletions

View file

@ -128,7 +128,7 @@ static struct key bindings[] = {
{ 'o', SEL_DFB, "", "" },
/* Toggle sort by size */
{ 's', SEL_FSIZE, "", "" },
/* Sort by total block size including dir contents */
/* Sort by total block count including dir contents */
{ 'S', SEL_BSIZE, "", "" },
/* Toggle sort by time */
{ 't', SEL_MTIME, "", "" },

43
nnn.c
View file

@ -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);
}