summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2009-03-25 14:16:46 -0700
committerJim Meyering <meyering@redhat.com>2009-03-26 08:53:21 +0100
commitc04cb1274c492344aa0adbe453903a017d33c744 (patch)
treec6b7f551ea38ad45e8bee7a639d978f710b7cf83
parentb102ed9ba6e529cc3dcf6be63c95d0f93d5499e0 (diff)
downloadcoreutils-c04cb1274c492344aa0adbe453903a017d33c744.tar.xz
df: fix a bug when totaling unknown values
* 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.
-rw-r--r--src/df.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/df.c b/src/df.c
index 0bb3b1e5c..bb24934d5 100644
--- 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;