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

Merge branch 'master' of https://gitee.com/openLuat/LuatOS

alienwalker 4 лет назад
Родитель
Сommit
1a555c438d
3 измененных файлов с 33 добавлено и 12 удалено
  1. 6 6
      lua/src/liolib.c
  2. 18 5
      luat/vfs/luat_fs_lfs2.c
  3. 9 1
      luat/vfs/luat_vfs.c

+ 6 - 6
lua/src/liolib.c

@@ -1013,12 +1013,12 @@ LUAMOD_API int luaopen_io (lua_State *L) {
 // dir methods
 
 static int io_mkfs (lua_State *L) {
-  // const char* path = luaL_checkstring(L, 1);
-  // int ret = luat_fs_mkfs(path);
-  // lua_pushboolean(L, ret == 0 ? 1 : 0);
-  // lua_pushinteger(L, ret);
-  // return 2;
-  return 0;
+  luat_fs_conf_t conf = {0};
+  conf.mount_point = (char*)luaL_checkstring(L, 1);
+  int ret = luat_fs_mkfs(&conf);
+  lua_pushboolean(L, ret == 0 ? 1 : 0);
+  lua_pushinteger(L, ret);
+  return 2;
 }
 
 static int io_mkdir (lua_State *L) {

+ 18 - 5
luat/vfs/luat_fs_lfs2.c

@@ -146,7 +146,17 @@ size_t luat_vfs_lfs2_fsize(void* userdata, const char *filename) {
 }
 
 int luat_vfs_lfs2_mkfs(void* userdata, luat_fs_conf_t *conf) {
-    LLOGE("not support yet : mkfs");
+    int ret = 0;
+    lfs_t* fs = (lfs_t*)userdata;
+    if (fs != NULL && fs->cfg != NULL) {
+        ret = lfs_format(fs, fs->cfg);
+        // LLOGD("lfs2 format ret %d", ret);
+        if (ret < 0)
+            return ret;
+        ret = lfs_mount(fs, fs->cfg);
+        // LLOGD("lfs2 mount ret %d", ret);
+        return ret;
+    }
     return -1;
 }
 
@@ -170,7 +180,7 @@ int luat_vfs_lfs2_rmdir(void* userdata, char const* _DirName) {
 
 int luat_vfs_lfs2_lsdir(void* userdata, char const* _DirName, luat_fs_dirent_t* ents, size_t offset, size_t len) {
     lfs_t* fs = (lfs_t*)userdata;
-    int ret = 0;
+    int ret , num = 0;
     lfs_dir_t *dir;
     struct lfs_info info;
     // if (fs->filecount > offset) {
@@ -211,12 +221,15 @@ int luat_vfs_lfs2_lsdir(void* userdata, char const* _DirName, luat_fs_dirent_t*
                 len = i;
                 break;
             }
-            ents[i].d_type = info.type - 1; // lfs file =1, dir=2
-            strcpy(ents[i].d_name, info.name);
+            if (info.type == 2 && (memcmp(info.name, ".", 2) !=0 ||memcmp(info.name, "..", 3)!=0))
+                continue;
+            ents[num].d_type = info.type - 1; // lfs file =1, dir=2
+            strcpy(ents[num].d_name, info.name);
+            num++;
         }
         lfs_dir_close(fs, dir);
         luat_heap_free(dir);
-        return len;
+        return num;
     // }
     return 0;
 }

+ 9 - 1
luat/vfs/luat_vfs.c

@@ -79,7 +79,15 @@ luat_vfs_mount_t * getmount(const char* filename) {
 }
 
 int luat_fs_mkfs(luat_fs_conf_t *conf) {
-    return 0;
+    for (size_t j = 0; j < LUAT_VFS_FILESYSTEM_MOUNT_MAX; j++) {
+        if (vfs.mounted[j].ok == 0)
+            continue;
+        if (strcmp(vfs.mounted[j].prefix, conf->mount_point) == 0 && vfs.mounted[j].fs->opts.mkfs != NULL) {
+            return vfs.mounted[j].fs->opts.mkfs(vfs.mounted[j].userdata, conf);
+        }
+    }
+    LLOGE("no such mount point %s", conf->mount_point);
+    return -1;
 }
 
 int luat_fs_mount(luat_fs_conf_t *conf) {