From b1239854371ceef6c0f933ca0472040837365333 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Mon, 10 Apr 2017 10:21:44 +0530 Subject: [PATCH] Show unprivileged free blocks in du mode --- nnn.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/nnn.c b/nnn.c index 5eec8d5e..805ec9ec 100644 --- a/nnn.c +++ b/nnn.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -929,6 +930,7 @@ show_help(void) } 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) @@ -955,12 +957,19 @@ dentfill(char *path, struct entry **dents, 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 || @@ -1114,8 +1123,6 @@ redraw(char *path) sprintf(sort, "by time "); else if (sizeorder) sprintf(sort, "by size "); - else if (bsizeorder) - sprintf(sort, "by content size "); else sort[0] = '\0'; @@ -1132,8 +1139,13 @@ redraw(char *path) 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");