Browse Source

add:文件夹打开关闭函数添加fatfs和lfs适配

Dozingfiretruck 5 months ago
parent
commit
438366aa94
2 changed files with 49 additions and 2 deletions
  1. 25 1
      luat/vfs/luat_fs_fatfs.c
  2. 24 1
      luat/vfs/luat_fs_lfs2.c

+ 25 - 1
luat/vfs/luat_fs_fatfs.c

@@ -245,6 +245,28 @@ int luat_vfs_fatfs_info(void* userdata, const char* path, luat_fs_info_t *conf)
     return 0;
 }
 
+void* luat_vfs_fatfs_opendir(void* userdata, const char *_DirName) {
+    DIR *dp = (DIR*)luat_heap_malloc(sizeof(DIR));
+    if (dp == NULL) {
+        LLOGD("out of memory when open file %s", dp);
+        return NULL;
+    }
+    memset(dp, 0, sizeof(DIR));
+    FRESULT ret = f_opendir(dp, _DirName);
+    if (ret != FR_OK) {
+        luat_heap_free(dp);
+        return NULL;
+    }
+    return (void*)dp;
+}
+
+int luat_vfs_fatfs_closedir(void* userdata, void* dir) {
+    DIR* dp = (DIR*)dir;
+    f_closedir(dp);
+    if (dp)luat_heap_free(dp);
+    return 0;
+}
+
 #define T(name) .name = luat_vfs_fatfs_##name
 const struct luat_vfs_filesystem vfs_fs_fatfs = {
     .name = "fatfs",
@@ -259,7 +281,9 @@ const struct luat_vfs_filesystem vfs_fs_fatfs = {
         T(rename),
         T(fsize),
         T(fexist),
-        T(info)
+        T(info),
+        T(opendir),
+        T(closedir)
     },
     .fopts = {
         T(fopen),

+ 24 - 1
luat/vfs/luat_fs_lfs2.c

@@ -309,6 +309,27 @@ int luat_vfs_lfs2_truncate(void* userdata, const char *filename, size_t len) {
     return ret;
 }
 
+void* luat_vfs_lfs2_opendir(void* userdata, const char *_DirName) {
+    lfs_dir_t *dir = (lfs_dir_t*)luat_heap_malloc(sizeof(lfs_dir_t));
+    if (dir == NULL) {
+        LLOGD("out of memory when open file %s", dir);
+        return NULL;
+    }
+    memset(dir, 0, sizeof(lfs_dir_t));
+    int ret = lfs_dir_open((lfs_t*)userdata, dir, _DirName);
+    if (ret < 0) {
+        luat_heap_free(dir);
+        return NULL;
+    }
+    return (void*)dir;
+}
+
+int luat_vfs_lfs2_closedir(void* userdata, void* dir) {
+    lfs_dir_close((lfs_t*)userdata, (lfs_dir_t *)dir);
+    if (dir)luat_heap_free(dir);
+    return 0;
+}
+
 #define T(name) .name = luat_vfs_lfs2_##name
 
 const struct luat_vfs_filesystem vfs_fs_lfs2 = {
@@ -325,7 +346,9 @@ const struct luat_vfs_filesystem vfs_fs_lfs2 = {
         T(fsize),
         T(fexist),
         T(info),
-        T(truncate)
+        T(truncate),
+        T(opendir),
+        T(closedir)
     },
     .fopts = {
         T(fopen),