From e601c2a6ed1968517acf080b7d6cdc57b5a14070 Mon Sep 17 00:00:00 2001 From: bernard Date: Sun, 26 Jan 2014 20:30:37 +0800 Subject: [PATCH] Add sector size check when mounting a FAT file system. --- components/dfs/filesystems/elmfat/dfs_elm.c | 16 +++++++++++++--- include/rtdef.h | 3 +++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/components/dfs/filesystems/elmfat/dfs_elm.c b/components/dfs/filesystems/elmfat/dfs_elm.c index 0d7f9b781..4495bd9b3 100644 --- a/components/dfs/filesystems/elmfat/dfs_elm.c +++ b/components/dfs/filesystems/elmfat/dfs_elm.c @@ -110,20 +110,30 @@ int dfs_elm_mount(struct dfs_filesystem *fs, unsigned long rwflag, const void *d FATFS *fat; FRESULT result; int index; + struct rt_device_blk_geometry geometry; /* get an empty position */ index = get_disk(RT_NULL); if (index == -1) - return -DFS_STATUS_ENOSPC; + return -DFS_STATUS_ENOENT; /* save device */ disk[index] = fs->dev_id; - + /* check sector size */ + if (rt_device_control(fs->dev_id, RT_DEVICE_CTRL_BLK_GETGEOME, &geometry) == RT_EOK) + { + if (geometry.block_size > _MAX_SS) + { + rt_kprintf("Block size of device is great than sector size of FAT.\n"); + return -DFS_STATUS_EINVAL; + } + } + fat = (FATFS *)rt_malloc(sizeof(FATFS)); if (fat == RT_NULL) { disk[index] = RT_NULL; - return -1; + return -DFS_STATUS_ENOMEM; } /* mount fatfs, always 0 logic driver */ diff --git a/include/rtdef.h b/include/rtdef.h index 7cd35c7f8..e24c2fa85 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -34,6 +34,9 @@ #ifndef __RT_DEF_H__ #define __RT_DEF_H__ +/* include rtconfig header to import configuration */ +#include + #ifdef __cplusplus extern "C" { #endif -- GitLab