提交 dc904004 编写于 作者: O openharmony_ci 提交者: Gitee

!171 ftruncate新增支持FAT12与FAT16

Merge pull request !171 from JING/ftruncate
...@@ -171,6 +171,19 @@ int fatfs_2_vfs(int result) ...@@ -171,6 +171,19 @@ int fatfs_2_vfs(int result)
return status; return status;
} }
static bool fatfs_is_last_cluster(FATFS *fs, DWORD cclust)
{
switch (fs->fs_type) {
case FS_FAT12:
return (cclust == FAT12_END_OF_CLUSTER);
case FS_FAT16:
return (cclust == FAT16_END_OF_CLUSTER);
case FS_FAT32:
default:
return (cclust == FAT32_END_OF_CLUSTER);
}
}
static int fatfs_sync(unsigned long mountflags, FATFS *fs) static int fatfs_sync(unsigned long mountflags, FATFS *fs)
{ {
#ifdef LOSCFG_FS_FAT_CACHE #ifdef LOSCFG_FS_FAT_CACHE
...@@ -806,7 +819,7 @@ static FRESULT realloc_cluster(FILINFO *finfo, FFOBJID *obj, FSIZE_t size) ...@@ -806,7 +819,7 @@ static FRESULT realloc_cluster(FILINFO *finfo, FFOBJID *obj, FSIZE_t size)
if ((cclust == BAD_CLUSTER) || (cclust == DISK_ERROR)) { if ((cclust == BAD_CLUSTER) || (cclust == DISK_ERROR)) {
return FR_DISK_ERR; return FR_DISK_ERR;
} }
if (cclust != END_OF_FILE) { /* Remove extra cluster if existing */ if (!fatfs_is_last_cluster(obj->fs, cclust)) { /* Remove extra cluster if existing */
result = remove_chain(obj, cclust, pclust); result = remove_chain(obj, cclust, pclust);
if (result != FR_OK) { if (result != FR_OK) {
return result; return result;
......
...@@ -55,7 +55,9 @@ extern "C" { ...@@ -55,7 +55,9 @@ extern "C" {
#define FAT32_MAXSIZE 0x100000000 #define FAT32_MAXSIZE 0x100000000
#define BAD_CLUSTER 0x7FFFFFFF #define BAD_CLUSTER 0x7FFFFFFF
#define DISK_ERROR 0xFFFFFFFF #define DISK_ERROR 0xFFFFFFFF
#define END_OF_FILE 0x0FFFFFFF #define FAT12_END_OF_CLUSTER 0x00000FFF
#define FAT16_END_OF_CLUSTER 0x0000FFFF
#define FAT32_END_OF_CLUSTER 0x0FFFFFFF
#define FAT_ERROR (-1) #define FAT_ERROR (-1)
/* MBR */ /* MBR */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册