You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
1.2 KiB
31 lines
1.2 KiB
diff --git a/src/mkfs.fat.c b/src/mkfs.fat.c
|
|
index a7609b0..26ce3fd 100644
|
|
--- a/src/mkfs.fat.c
|
|
+++ b/src/mkfs.fat.c
|
|
@@ -517,6 +517,7 @@ static void establish_params(struct device_info *info)
|
|
unsigned int heads = 255;
|
|
unsigned int media = 0xf8;
|
|
unsigned int cluster_size = 4; /* starting point for FAT12 and FAT16 */
|
|
+ unsigned int sector_size_mult = 1; /* x 512 == sector_size */
|
|
int def_root_dir_entries = 512;
|
|
|
|
if (info->size < 512 * 1024 * 1024) {
|
|
@@ -590,11 +591,15 @@ static void establish_params(struct device_info *info)
|
|
* fs size > 32G: 32k clusters
|
|
*
|
|
* This only works correctly for 512 byte sectors!
|
|
+ * For other sector sizes it tries to approximate.
|
|
*/
|
|
uint32_t sz_mb = info->size / (1024 * 1024);
|
|
+ if (info->sector_size > 0)
|
|
+ sector_size_mult = info->sector_size / 512;
|
|
cluster_size =
|
|
- sz_mb > 32 * 1024 ? 64 : sz_mb > 16 * 1024 ? 32 : sz_mb >
|
|
- 8 * 1024 ? 16 : sz_mb > 260 ? 8 : 1;
|
|
+ sz_mb > 32 * 1024 * sector_size_mult ? 64 : sz_mb >
|
|
+ 16 * 1024 * sector_size_mult ? 32 : sz_mb >
|
|
+ 8 * 1024 * sector_size_mult ? 16 : sz_mb > 260 * sector_size_mult ? 8 : 1;
|
|
}
|
|
|
|
if (info->geom_heads > 0) {
|