From c04cb1274c492344aa0adbe453903a017d33c744 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 25 Mar 2009 14:16:46 -0700 Subject: 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. --- src/df.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'src/df.c') 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; -- cgit v1.2.3