summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/dosfs/msdos_format.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-05-31 13:50:08 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-05-31 13:50:08 +0200
commit53f2ca3be67186a8a99a8d819640e1141e2efbff (patch)
tree9181541da331fac339af17b4d8f3f659fee223c7 /cpukit/libfs/src/dosfs/msdos_format.c
parentlibblock: Move rtems_bdbuf_get_media_block() call (diff)
downloadrtems-53f2ca3be67186a8a99a8d819640e1141e2efbff.tar.bz2
dosfs: Fix format request with sectors per cluster
Diffstat (limited to 'cpukit/libfs/src/dosfs/msdos_format.c')
-rw-r--r--cpukit/libfs/src/dosfs/msdos_format.c12
1 files 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;