summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2020-04-28 09:03:01 -0700
committerXin Li <delphij@google.com>2020-04-28 09:03:01 -0700
commit114d448191fbfa8e8f361a609dd5d3e94163b307 (patch)
treedd4ed4f55de937e63bdd649a4e29a2c5bf819703
parent2282fc83db4e27df1cb853a63db405830f77e7eb (diff)
parente4d49c78b0857a9e5fde6e18299581e8aaaca345 (diff)
downloadfsck_msdos-114d448191fbfa8e8f361a609dd5d3e94163b307.tar.gz
Sync with upstream 2ccadef (svn revision 360428):
Do not overflow when calculating file system size. Test: build Bug: 155183047 Change-Id: I05a8f1b3ef10ec6a765a78adf122f274dcda12cd
-rw-r--r--check.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/check.c b/check.c
index f2e896b..9519315 100644
--- a/check.c
+++ b/check.c
@@ -54,6 +54,8 @@ checkfilesys(const char *fname)
int finish_dosdirsection=0;
int mod = 0;
int ret = 8;
+ int64_t freebytes;
+ int64_t badbytes;
rdonly = alwaysno;
if (!preen)
@@ -129,37 +131,33 @@ checkfilesys(const char *fname)
mod |= FSERROR;
}
+ freebytes = (int64_t)boot.NumFree * boot.ClusterSize;
+ badbytes = (int64_t)boot.NumBad * boot.ClusterSize;
+
#ifdef HAVE_LIBUTIL_H
char freestr[7], badstr[7];
- int64_t freebytes = boot.NumFree * boot.ClusterSize;
humanize_number(freestr, sizeof(freestr), freebytes, "",
HN_AUTOSCALE, HN_DECIMAL | HN_IEC_PREFIXES);
if (boot.NumBad) {
- int64_t badbytes = boot.NumBad * boot.ClusterSize;
-
humanize_number(badstr, sizeof(badstr), badbytes, "",
HN_AUTOSCALE, HN_B | HN_DECIMAL | HN_IEC_PREFIXES);
pwarn("%d files, %sB free (%d clusters), %sB bad (%d clusters)\n",
- boot.NumFiles,
- freestr, boot.NumFree,
+ boot.NumFiles, freestr, boot.NumFree,
badstr, boot.NumBad);
} else {
pwarn("%d files, %sB free (%d clusters)\n",
- boot.NumFiles,
- freestr, boot.NumFree);
+ boot.NumFiles, freestr, boot.NumFree);
}
#else
if (boot.NumBad)
- pwarn("%d files, %d KiB free (%d clusters), %d KiB bad (%d clusters)\n",
- boot.NumFiles,
- boot.NumFree * boot.ClusterSize / 1024, boot.NumFree,
- boot.NumBad * boot.ClusterSize / 1024, boot.NumBad);
+ pwarn("%d files, %jd KiB free (%d clusters), %jd KiB bad (%d clusters)\n",
+ boot.NumFiles, (intmax_t)freebytes / 1024, boot.NumFree,
+ (intmax_t)badbytes / 1024, boot.NumBad);
else
- pwarn("%d files, %d KiB free (%d clusters)\n",
- boot.NumFiles,
- boot.NumFree * boot.ClusterSize / 1024, boot.NumFree);
+ pwarn("%d files, %jd KiB free (%d clusters)\n",
+ boot.NumFiles, (intmax_t)freebytes / 1024, boot.NumFree);
#endif
if (mod && (mod & FSERROR) == 0) {