fix ftruncate
This commit is contained in:
parent
b9c544d898
commit
3027cfe543
|
@ -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,10 +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 ((obj->fs->fs_type == FS_FAT12 && cclust != FAT12_END_OF_FILE) ||
|
if (!fatfs_is_last_cluster(obj->fs, cclust)) { /* Remove extra cluster if existing */
|
||||||
(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);
|
result = remove_chain(obj, cclust, pclust);
|
||||||
if (result != FR_OK) {
|
if (result != FR_OK) {
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -55,9 +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 FAT12_END_OF_FILE 0x00000FFF
|
#define FAT12_END_OF_CLUSTER 0x00000FFF
|
||||||
#define FAT16_END_OF_FILE 0x0000FFFF
|
#define FAT16_END_OF_CLUSTER 0x0000FFFF
|
||||||
#define FAT32_END_OF_FILE 0x0FFFFFFF
|
#define FAT32_END_OF_CLUSTER 0x0FFFFFFF
|
||||||
#define FAT_ERROR (-1)
|
#define FAT_ERROR (-1)
|
||||||
|
|
||||||
/* MBR */
|
/* MBR */
|
||||||
|
|
Loading…
Reference in New Issue