Просмотр исходного кода

fix:[dfsv1][elm]Fixed a memory leak in dfs_elm_close

wdfk-prog 5 месяцев назад
Родитель
Сommit
bd53bbaa76
2 измененных файлов с 23 добавлено и 5 удалено
  1. 21 1
      components/dfs/Kconfig
  2. 2 4
      components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c

+ 21 - 1
components/dfs/Kconfig

@@ -152,9 +152,29 @@ endif
             depends on RT_DFS_ELM_REENTRANT
 
         config RT_DFS_ELM_USE_EXFAT
-            bool "Enable RT_DFS_ELM_USE_EXFAT"
+            bool "Enable exFAT filesystem support"
             default n
             depends on RT_DFS_ELM_USE_LFN >= 1
+            help
+              exFAT (Extended File Allocation Table) is a file system
+              designed for large-capacity storage devices.
+
+              Key features and recommendations:
+              - Target scenarios: Primarily used for storage media requiring
+                support for very large files (>4GB) or large partitions
+                (>32GB), such as high-capacity SD cards or USB drives.
+
+              - Resource cost: Enabling exFAT support will significantly
+                increase the code size (ROM footprint) of the file system.
+
+              - Recommendation:
+                For small-capacity storage devices (e.g., SPI Flash or
+                eMMC under 32GB), the standard FAT16 or FAT32 file
+                systems are perfectly adequate. It is strongly recommended
+                to keep this option disabled unless you absolutely need to
+                handle large-capacity storage, in order to conserve
+                valuable code space.
+
         endmenu
     endif
 

+ 2 - 4
components/dfs/dfs_v1/filesystems/elmfat/dfs_elm.c

@@ -15,6 +15,7 @@
  * 2017-02-13     Hichard      Update Fatfs version to 0.12b, support exFAT.
  * 2017-04-11     Bernard      fix the st_blksize issue.
  * 2017-05-26     Urey         fix f_mount error when mount more fats
+ * 2025-10-29     wdfk-prog    Fixed a memory leak in dfs_elm_close
  */
 
 #include <rtthread.h>
@@ -468,10 +469,7 @@ int dfs_elm_close(struct dfs_file *file)
     FRESULT result;
 
     RT_ASSERT(file->vnode->ref_count > 0);
-    if (file->vnode->ref_count > 1)
-    {
-        return 0;
-    }
+    RT_ASSERT(file->data != RT_NULL);
     result = FR_OK;
     if (file->vnode->type == FT_DIRECTORY)
     {