From b9c544d8984d0d3b7ad714f1984ec81a5fe662e6 Mon Sep 17 00:00:00 2001 From: chenjing Date: Wed, 21 Apr 2021 16:16:08 +0800 Subject: [PATCH] Description: [fix]ftruncate bugfix Bug: #I3NEVN Test: --- fs/fat/os_adapt/fatfs.c | 5 ++++- fs/fat/os_adapt/fatfs.h | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/fs/fat/os_adapt/fatfs.c b/fs/fat/os_adapt/fatfs.c index 0ff14a06..8a671370 100644 --- a/fs/fat/os_adapt/fatfs.c +++ b/fs/fat/os_adapt/fatfs.c @@ -806,7 +806,10 @@ static FRESULT realloc_cluster(FILINFO *finfo, FFOBJID *obj, FSIZE_t size) if ((cclust == BAD_CLUSTER) || (cclust == DISK_ERROR)) { return FR_DISK_ERR; } - if (cclust != END_OF_FILE) { /* Remove extra cluster if existing */ + if ((obj->fs->fs_type == FS_FAT12 && cclust != FAT12_END_OF_FILE) || + (obj->fs->fs_type == FS_FAT16 && cclust != FAT16_END_OF_FILE) || + (obj->fs->fs_type == FS_FAT32 && cclust != FAT32_END_OF_FILE)) { + /* Remove extra cluster if existing */ result = remove_chain(obj, cclust, pclust); if (result != FR_OK) { return result; diff --git a/fs/fat/os_adapt/fatfs.h b/fs/fat/os_adapt/fatfs.h index 5610a3bd..f387a682 100644 --- a/fs/fat/os_adapt/fatfs.h +++ b/fs/fat/os_adapt/fatfs.h @@ -55,7 +55,9 @@ extern "C" { #define FAT32_MAXSIZE 0x100000000 #define BAD_CLUSTER 0x7FFFFFFF #define DISK_ERROR 0xFFFFFFFF -#define END_OF_FILE 0x0FFFFFFF +#define FAT12_END_OF_FILE 0x00000FFF +#define FAT16_END_OF_FILE 0x0000FFFF +#define FAT32_END_OF_FILE 0x0FFFFFFF #define FAT_ERROR (-1) /* MBR */