From ca65f66c3cdbbb8af941d3624b85757355f38ad8 Mon Sep 17 00:00:00 2001 From: Toni Ylenius Date: Fri, 6 Jan 2012 18:13:56 +0200 Subject: [PATCH] df: Set negative free space values to zero. Some file systems (eg. UFS) may report negative free spave values. Previously this caused underflow, but now it is prevented by setting negative values to zero. Change-Id: I821adb8a6d7a40dcbd6c65ab3541fbcd714f8aba Conflicts: src/df.c --- src/df.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/df.c b/src/df.c index 2e9b2ae8..9d53b0b6 100644 --- a/src/df.c +++ b/src/df.c @@ -280,7 +280,22 @@ static int df_read (void) uint64_t blk_reserved; uint64_t blk_used; - /* Sanity-check for the values in the struct */ + /* + * Sanity-check for the values in the struct + */ + /* Check for negative "available" byes. For example UFS can + * report negative free space for user. Notice. blk_reserved + * will start to diminish after this. */ +#if HAVE_STATVFS + /* Cast is needed to avoid compiler warnings. + * ((struct statvfs).f_bavail is unsigned (POSIX)) */ + if (((int64_t) statbuf.f_bavail) < 0) + statbuf.f_bavail = 0; +#elif HAVE_STATFS + if (statbuf.f_bavail < 0) + statbuf.f_bavail = 0; +#endif + /* Make sure that f_blocks >= f_bfree >= f_bavail */ if (statbuf.f_bfree < statbuf.f_bavail) statbuf.f_bfree = statbuf.f_bavail; if (statbuf.f_blocks < statbuf.f_bfree) -- 2.11.0