diff --git a/fs/fat/ff.c b/fs/fat/ff.c index 33f8b61..ba4adfc 100644 --- a/fs/fat/ff.c +++ b/fs/fat/ff.c @@ -1591,9 +1591,14 @@ return -EINVAL; /* Number of sectors per FAT */ + fmt = FS_FAT12; fasize = LD_WORD(fs->win+BPB_FATSz16); - if (!fasize) + if (!fasize) { fasize = LD_DWORD(fs->win+BPB_FATSz32); + if (fasize) + /* Must be FAT32 */ + fmt = FS_FAT32; + } fs->fsize = fasize; /* Number of FAT copies */ @@ -1633,11 +1638,8 @@ nclst = (tsect - sysect) / fs->csize; if (!nclst) return -EINVAL; /* (Invalid volume size) */ - fmt = FS_FAT12; - if (nclst >= MIN_FAT16) + if (fmt == FS_FAT12 && nclst >= MIN_FAT16) fmt = FS_FAT16; - if (nclst >= MIN_FAT32) - fmt = FS_FAT32; /* Boundaries and Limits */ /* Number of FAT entries */