diff --git a/components/dfs/filesystems/elmfat/dfs_elm.c b/components/dfs/filesystems/elmfat/dfs_elm.c index 0d7f9b781c5b5cb6a84c8e17cbce28edbf889e45..4495bd9b3e6d45919611161f2995f326777dbe58 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 7cd35c7f8cdda4d7b5f20388968fc0d8219c0c1f..e24c2fa85bd0f58a868c5cab9ec1ce8439110d8b 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