]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
(show_dev): If fsu_bavail_top_bit_set is nonzero,
authorJim Meyering <jim@meyering.net>
Thu, 19 Mar 1998 22:18:29 +0000 (22:18 +0000)
committerJim Meyering <jim@meyering.net>
Thu, 19 Mar 1998 22:18:29 +0000 (22:18 +0000)
assume the original value corresponding to fsu_bavail was negative.

src/df.c

index 450ca5daceeb1a70411e8fa053ad11a05583f063..c14e89ce3d3a4749d575a3b6e53208d960c94aea 100644 (file)
--- a/src/df.c
+++ b/src/df.c
@@ -268,7 +268,9 @@ show_dev (const char *disk, const char *mount_point, const char *fstype)
   else
     {
       int w = human_readable_base ? 5 : 7;
-      char buf[3][LONGEST_HUMAN_READABLE + 1];
+      char buf[2][LONGEST_HUMAN_READABLE + 1];
+      char availbuf[LONGEST_HUMAN_READABLE + 2];
+      char *avail;
       double blocks_percent_used;
       uintmax_t blocks_used;
 
@@ -281,18 +283,31 @@ show_dev (const char *disk, const char *mount_point, const char *fstype)
        {
          blocks_used = fsu.fsu_blocks - fsu.fsu_bfree;
          blocks_percent_used =
-           (fsu.fsu_bfree < fsu.fsu_bavail ? -1
-            : (blocks_used + fsu.fsu_bavail) == 0 ? 0
+           ((fsu.fsu_bavail == -1
+             || blocks_used + fsu.fsu_bavail == 0
+             || (fsu.fsu_bavail_top_bit_set
+                 ? blocks_used < - fsu.fsu_bavail
+                 : fsu.fsu_bfree < fsu.fsu_bavail))
+            ? -1
             : blocks_used * 100.0 / (blocks_used + fsu.fsu_bavail));
        }
 
+      avail = df_readable ((fsu.fsu_bavail_top_bit_set
+                           ? - fsu.fsu_bavail
+                           : fsu.fsu_bavail),
+                          availbuf + 1, fsu.fsu_blocksize,
+                          output_units, human_readable_base);
+
+      if (fsu.fsu_bavail_top_bit_set)
+       *--avail = '-';
+
       printf (" %*s %*s  %*s ",
              w, df_readable (fsu.fsu_blocks, buf[0], fsu.fsu_blocksize,
                              output_units, human_readable_base),
              w, df_readable (blocks_used, buf[1], fsu.fsu_blocksize,
                              output_units, human_readable_base),
-             w, df_readable (fsu.fsu_bavail, buf[2], fsu.fsu_blocksize,
-                             output_units, human_readable_base));
+             w, avail);
+
       if (blocks_percent_used < 0)
        printf ("     -  ");
       else
@@ -738,4 +753,3 @@ with the portable output format"));
   close_stdout ();
   exit (exit_status);
 }
-