diff --git a/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c b/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c index afb2a0d46d97..6c8de2b01877 100644 --- a/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c +++ b/components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c @@ -584,6 +584,11 @@ int dfs_elm_flush(struct dfs_file *file) FIL *fd; FRESULT result; + if (file->vnode->type == FT_DIRECTORY) + { + return -EISDIR; + } + fd = (FIL *)(file->data); RT_ASSERT(fd != RT_NULL); diff --git a/components/dfs/dfs_v1/src/dfs_posix.c b/components/dfs/dfs_v1/src/dfs_posix.c index f3d7b70c318e..9e113077098e 100644 --- a/components/dfs/dfs_v1/src/dfs_posix.c +++ b/components/dfs/dfs_v1/src/dfs_posix.c @@ -460,6 +460,11 @@ int fsync(int fildes) } ret = dfs_file_flush(d); + if (ret < 0) + { + rt_set_errno(ret); + return -1; + } return ret; } diff --git a/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c b/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c index cb1479f6ca9e..51014b09522f 100644 --- a/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c +++ b/components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c @@ -619,6 +619,11 @@ int dfs_elm_flush(struct dfs_file *file) FIL *fd; FRESULT result; + if (file->vnode->type == FT_DIRECTORY) + { + return -EISDIR; + } + fd = (FIL *)(file->vnode->data); RT_ASSERT(fd != RT_NULL); diff --git a/components/dfs/dfs_v2/src/dfs_file.c b/components/dfs/dfs_v2/src/dfs_file.c index 9c6e383e1b41..32a18dab3d8d 100644 --- a/components/dfs/dfs_v2/src/dfs_file.c +++ b/components/dfs/dfs_v2/src/dfs_file.c @@ -2202,6 +2202,7 @@ int dfs_file_rename(const char *old_file, const char *new_file) * @return int Operation result: * - 0 on success * -EBADF if invalid file descriptor + * -EISDIR if the file is a directory (directories cannot be truncated) * -ENOSYS if truncate operation not supported * -EINVAL if invalid parameters or not mounted * @@ -2214,6 +2215,11 @@ int dfs_file_ftruncate(struct dfs_file *file, off_t length) if (file) { + if (file->vnode->type == FT_DIRECTORY) + { + return -EISDIR; + } + if (file->fops->truncate) { if (dfs_is_mounted(file->vnode->mnt) == 0) diff --git a/components/dfs/dfs_v2/src/dfs_posix.c b/components/dfs/dfs_v2/src/dfs_posix.c index d0eff53a4673..f774aee341d9 100644 --- a/components/dfs/dfs_v2/src/dfs_posix.c +++ b/components/dfs/dfs_v2/src/dfs_posix.c @@ -605,6 +605,11 @@ int fsync(int fildes) } ret = dfs_file_fsync(file); + if (ret < 0) + { + rt_set_errno(ret); + return -1; + } return ret; }