summaryrefslogtreecommitdiff
path: root/src/df.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2006-01-24 23:30:46 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2006-01-24 23:30:46 +0000
commit5b917cfa592bb92be296e1370a811ada3cb17a25 (patch)
tree6edccb4b11ab937219dbc138821d4470062e769f /src/df.c
parent0efb6d171e370ab993e554385d6023888f13d30c (diff)
downloadcoreutils-5b917cfa592bb92be296e1370a811ada3cb17a25.tar.xz
(show_dev): If the file system claims to have more available than total
blocks, report the number of used blocks as being total - available (a negative number) rather than as garbage.
Diffstat (limited to 'src/df.c')
-rw-r--r--src/df.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/src/df.c b/src/df.c
index 0286f8a2d..2eece1b46 100644
--- a/src/df.c
+++ b/src/df.c
@@ -1,5 +1,5 @@
/* df - summarize free disk space
- Copyright (C) 91, 1995-2005 Free Software Foundation, Inc.
+ Copyright (C) 91, 1995-2006 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -231,15 +231,15 @@ excluded_fstype (const char *fstype)
/* Like human_readable (N, BUF, human_output_opts, INPUT_UNITS, OUTPUT_UNITS),
except:
- - Return "-" if N is -1,
- - If NEGATIVE is 1 then N represents a negative number,
- expressed in two's complement. */
+ - If NEGATIVE, then N represents a negative number,
+ expressed in two's complement.
+ - Otherwise, return "-" if N is UINTMAX_MAX. */
static char const *
df_readable (bool negative, uintmax_t n, char *buf,
uintmax_t input_units, uintmax_t output_units)
{
- if (n == UINTMAX_MAX)
+ if (n == UINTMAX_MAX && !negative)
return "-";
else
{
@@ -357,20 +357,17 @@ show_dev (char const *disk, char const *mount_point,
output_units = output_block_size;
total = fsu.fsu_blocks;
available = fsu.fsu_bavail;
- negate_available = fsu.fsu_bavail_top_bit_set;
+ negate_available = (fsu.fsu_bavail_top_bit_set
+ & (available != UINTMAX_MAX));
available_to_root = fsu.fsu_bfree;
}
- used = -1;
+ used = UINTMAX_MAX;
negate_used = false;
if (total != UINTMAX_MAX && available_to_root != UINTMAX_MAX)
{
used = total - available_to_root;
- if (total < available_to_root)
- {
- negate_used = true;
- used = - used;
- }
+ negate_used = (total < available_to_root);
}
printf (" %*s %*s %*s ",