!26 mkfs.fat: Fix calculation of FAT32 cluster size on non 512 bytes sector disks

From: @wguanghao 
Reviewed-by: @swf504 
Signed-off-by: @swf504
This commit is contained in:
openeuler-ci-bot 2023-12-04 02:09:11 +00:00 committed by Gitee
commit 63d29118c4
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 55 additions and 11 deletions

View File

@ -0,0 +1,40 @@
From b71c7c400276cc48acc257c294e01825773100dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali.rohar@gmail.com>
Date: Sat, 11 Aug 2018 20:34:08 +0200
Subject: [PATCH] mkfs.fat: Fix calculation of FAT32 cluster size on non 512
bytes sector disks
Previous FAT32 calculation worked correctly only for disks with 512 byte
sectors. New calculation formula is generalized variant of previous one,
but to be sector size independent.
---
src/mkfs.fat.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/mkfs.fat.c b/src/mkfs.fat.c
index ff89013..f7d8607 100644
--- a/src/mkfs.fat.c
+++ b/src/mkfs.fat.c
@@ -588,13 +588,13 @@ static void establish_params(struct device_info *info)
* fs size <= 16G: 8k clusters
* fs size <= 32G: 16k clusters
* fs size > 32G: 32k clusters
- *
- * This only works correctly for 512 byte sectors!
*/
- uint32_t sz_mb = info->size / (1024 * 1024);
- cluster_size =
- sz_mb > 32 * 1024 ? 64 : sz_mb > 16 * 1024 ? 32 : sz_mb >
- 8 * 1024 ? 16 : sz_mb > 260 ? 8 : 1;
+ unsigned long long int sectors = info->size / sector_size;
+ cluster_size = sectors > 32*1024*1024*2 ? 64 :
+ sectors > 16*1024*1024*2 ? 32 :
+ sectors > 8*1024*1024*2 ? 16 :
+ sectors > 260*1024*2 ? 8 : 1;
+
}
if (info->geom_heads > 0) {
--
1.8.3.1

View File

@ -1,6 +1,6 @@
Name: dosfstools
Version: 4.1
Release: 12
Release: 13
Summary: FAT file system userspace tools
License: GPLv3+
URL: http://www.github.com/dosfstools/dosfstools
@ -8,16 +8,17 @@ Source0: http://www.github.com/%{name}/%{name}/releases/download/v%{versi
BuildRequires: gcc autoconf automake systemd-devel
Patch0: 0000-Fix-signed-integer-overflow-in-FSTART.patch
Patch1: 0001-Avoid-returning-deleted-directory-entries-as-labels.patch
Patch2: 0002-src-check.c-Fix-up-mtools-created-bad-dir-entries.patch
Patch3: 0003-Remove-long-file-name-when-changing-short-file-name.patch
Patch4: 0004-Fix-gcc-sprintf-length-warnings.patch
Patch5: 0005-fsck.fat-Fix-Year-2038-Bug.patch
Patch6: 0006-mkfs.fat-Fix-parsing-of-block-number.patch
Patch7: 0007-device_info-Fix-parsing-partition-number.patch
Patch8: 0008-Fix-memory-leaks-in-read_fat-function.patch
Patch9: 0009-Turn-label-in-struct-DOS_FS-into-char-array-from-poi.patch
Patch0: 0000-Fix-signed-integer-overflow-in-FSTART.patch
Patch1: 0001-Avoid-returning-deleted-directory-entries-as-labels.patch
Patch2: 0002-src-check.c-Fix-up-mtools-created-bad-dir-entries.patch
Patch3: 0003-Remove-long-file-name-when-changing-short-file-name.patch
Patch4: 0004-Fix-gcc-sprintf-length-warnings.patch
Patch5: 0005-fsck.fat-Fix-Year-2038-Bug.patch
Patch6: 0006-mkfs.fat-Fix-parsing-of-block-number.patch
Patch7: 0007-device_info-Fix-parsing-partition-number.patch
Patch8: 0008-Fix-memory-leaks-in-read_fat-function.patch
Patch9: 0009-Turn-label-in-struct-DOS_FS-into-char-array-from-poi.patch
Patch10: 0010-mkfs.fat-Fix-calculation-of-FAT32-cluster-size-on-no.patch
%description
The dosfstools package contains programs mkfs.fat, fsck.fat and fatlabel to
@ -54,6 +55,9 @@ make check
%{_mandir}/man8/*
%changelog
* Thu Nov 30 2023 wuguanghao <wuguanghao3@huawei.com> - 4.1-13
- mkfs.fat: Fix calculation of FAT32 cluster size on no 512 bytes sector disks
* Tue Jul 5 2022 zhanchengbin <zhanchengbin1@huawei.com> - 4.1-12
- fix execution successd when format a disk with partitions.