#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include <sys/statvfs.h>
#include <curses.h>
#include <dirent.h>
}
off_t blk_size;
+size_t fs_free = 0;
static int
sum_sizes(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf)
DIR *dirp;
struct dirent *dp;
struct stat sb;
+ struct statvfs svb;
int r, n = 0;
dirp = opendir(path);
if (dirp == NULL)
return 0;
+ r = statvfs(path, &svb);
+ if (r == -1)
+ fs_free = 0;
+ else
+ fs_free = svb.f_bsize * svb.f_bavail;
+
while ((dp = readdir(dirp)) != NULL) {
/* Skip self and parent */
if (strcmp(dp->d_name, ".") == 0 ||
sprintf(sort, "by time ");
else if (sizeorder)
sprintf(sort, "by size ");
- else if (bsizeorder)
- sprintf(sort, "by content size ");
else
sort[0] = '\0';
else
ind[0] = '\0';
- sprintf(cwd, "total %d %s[%s%s]", ndents, sort,
- dents[cur].name, ind);
+ if (!bsizeorder)
+ sprintf(cwd, "total %d %s[%s%s]", ndents, sort,
+ dents[cur].name, ind);
+ else
+ sprintf(cwd, "total %d by disk usage, %s free [%s%s]",
+ ndents, coolsize(fs_free), dents[cur].name, ind);
+
printmsg(cwd);
} else
printmsg("0 items");