From c9e83356a43d3eaa4c6f9b981f50ee843267645a Mon Sep 17 00:00:00 2001 From: angryproton Date: Tue, 4 Aug 2026 23:12:09 +0800 Subject: [PATCH] =?UTF-8?q?[fix][dfs]=20=E5=A2=9E=E5=8A=A0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=B3=BB=E7=BB=9F=E6=93=8D=E4=BD=9C=E7=9A=84=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=A3=80=E6=9F=A5=EF=BC=8C=E9=98=B2=E6=AD=A2=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=8D=E5=8C=B9=E9=85=8D=E5=AF=BC=E8=87=B4=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=BB=93=E6=9E=84=E4=B8=8D=E4=B8=80=E8=87=B4=E5=BC=95?= =?UTF-8?q?=E5=8F=91=E7=9A=84=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c | 5 +++++ components/dfs/dfs_v1/src/dfs_posix.c | 5 +++++ components/dfs/dfs_v2/filesystems/elmfat/dfs_elm.c | 5 +++++ components/dfs/dfs_v2/src/dfs_file.c | 6 ++++++ components/dfs/dfs_v2/src/dfs_posix.c | 5 +++++ 5 files changed, 26 insertions(+) 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; }