]> Sergey Matveev's repositories - nnn.git/commitdiff
Show unprivileged free blocks in du mode
authorArun Prakash Jana <engineerarun@gmail.com>
Mon, 10 Apr 2017 04:51:44 +0000 (10:21 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Mon, 10 Apr 2017 04:58:34 +0000 (10:28 +0530)
nnn.c

diff --git a/nnn.c b/nnn.c
index 5eec8d5ec027f76d99947b0698d6a5bc09b0699d..805ec9ecead12c85248fae004d8d7799904c79ef 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -2,6 +2,7 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/wait.h>
+#include <sys/statvfs.h>
 
 #include <curses.h>
 #include <dirent.h>
@@ -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");