{ '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, "", "" },
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];
if (sb->st_blocks && (typeflag == FTW_F || typeflag == FTW_D))
ent_blocks += sb->st_blocks;
+ ++num_files;
return 0;
}
n = 0;
- if (cfg.blkorder)
+ if (cfg.blkorder) {
+ num_files = 0;
dir_blocks = 0;
+ }
dirp = opendir(path);
if (dirp == NULL)
(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,
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));
(*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;
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);
}