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];
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;
n = 0;
if (cfg.bsizeorder)
- dir_size = 0;
+ dir_blocks = 0;
dirp = opendir(path);
if (dirp == NULL)
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;
}
} else
(*dents)[n].bsize = sb.st_blocks;
- dir_size += (*dents)[n].bsize;
+ if ((*dents)[n].bsize)
+ dir_blocks += (*dents)[n].bsize;
}
++n;
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);
}