diff options
author | Xin Li <delphij@google.com> | 2020-04-28 09:03:01 -0700 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2020-04-28 09:03:01 -0700 |
commit | 114d448191fbfa8e8f361a609dd5d3e94163b307 (patch) | |
tree | dd4ed4f55de937e63bdd649a4e29a2c5bf819703 | |
parent | 2282fc83db4e27df1cb853a63db405830f77e7eb (diff) | |
parent | e4d49c78b0857a9e5fde6e18299581e8aaaca345 (diff) | |
download | fsck_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.c | 26 |
1 files changed, 12 insertions, 14 deletions
@@ -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) { |