From 53f2ca3be67186a8a99a8d819640e1141e2efbff Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 31 May 2012 13:50:08 +0200 Subject: dosfs: Fix format request with sectors per cluster --- cpukit/libfs/src/dosfs/msdos_format.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/cpukit/libfs/src/dosfs/msdos_format.c b/cpukit/libfs/src/dosfs/msdos_format.c index 9af86b7d62..305cec9596 100644 --- a/cpukit/libfs/src/dosfs/msdos_format.c +++ b/cpukit/libfs/src/dosfs/msdos_format.c @@ -484,14 +484,22 @@ static int msdos_format_determine_fmt_params * NOTE: maximum sect_per_clust is arbitrarily choosen with values that * are a compromise concerning capacity and efficency */ + uint32_t fat12_sect_per_clust = 8; + uint32_t fat16_sect_per_clust = 32; + + if (rqdata != NULL && rqdata->sectors_per_cluster != 0) { + fat12_sect_per_clust = rqdata->sectors_per_cluster; + fat16_sect_per_clust = rqdata->sectors_per_cluster; + } + if (fmt_params->totl_sector_cnt - < ((uint32_t)FAT_FAT12_MAX_CLN)*8) { + < FAT_FAT12_MAX_CLN * fat12_sect_per_clust) { fmt_params->fattype = FAT_FAT12; /* start trying with small clusters */ fmt_params->sectors_per_cluster = 2; } else if (fmt_params->totl_sector_cnt - < ((uint32_t)FAT_FAT16_MAX_CLN)*32) { + < FAT_FAT16_MAX_CLN * fat16_sect_per_clust) { fmt_params->fattype = FAT_FAT16; /* start trying with small clusters */ fmt_params->sectors_per_cluster = 2; -- cgit v1.2.3