]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
df: fix a bug when totaling unknown values
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 25 Mar 2009 21:16:46 +0000 (14:16 -0700)
committerJim Meyering <meyering@redhat.com>
Thu, 26 Mar 2009 07:53:21 +0000 (08:53 +0100)
* src/df.c (show_dev): Don't add UINTMAX_MAX to grand totals, as that
value indicates that the true value is unknown; adding it effectively
subtracts 1 from the total, whereas we want to leave the total alone.

src/df.c

index 0bb3b1e5c27a4716f680802b176fa23e45819f02..bb24934d5e5bfb3225cb5215a2129847146b8d40 100644 (file)
--- a/src/df.c
+++ b/src/df.c
@@ -393,8 +393,10 @@ show_dev (char const *disk, char const *mount_point,
       negate_available = false;
       available_to_root = available;
 
-      grand_fsu.fsu_files += total;
-      grand_fsu.fsu_ffree += available;
+      if (total != UINTMAX_MAX)
+       grand_fsu.fsu_files += total;
+      if (available != UINTMAX_MAX)
+       grand_fsu.fsu_ffree += available;
     }
   else
     {
@@ -422,11 +424,14 @@ show_dev (char const *disk, char const *mount_point,
                          & (available != UINTMAX_MAX));
       available_to_root = fsu.fsu_bfree;
 
-      grand_fsu.fsu_blocks += input_units * total;
-      grand_fsu.fsu_bfree  += input_units * available_to_root;
-      add_uint_with_neg_flag (&grand_fsu.fsu_bavail,
-                             &grand_fsu.fsu_bavail_top_bit_set,
-                             input_units * available, negate_available);
+      if (total != UINTMAX_MAX)
+       grand_fsu.fsu_blocks += input_units * total;
+      if (available_to_root != UINTMAX_MAX)
+       grand_fsu.fsu_bfree  += input_units * available_to_root;
+      if (available != UINTMAX_MAX)
+       add_uint_with_neg_flag (&grand_fsu.fsu_bavail,
+                               &grand_fsu.fsu_bavail_top_bit_set,
+                               input_units * available, negate_available);
     }
 
   used = UINTMAX_MAX;