Browse Source

[components][lwp]fix mount param issue (#9333)

fix mount param issue
zms123456 10 months ago
parent
commit
fd31965c3c
1 changed files with 21 additions and 4 deletions
  1. 21 4
      components/lwp/lwp_syscall.c

+ 21 - 4
components/lwp/lwp_syscall.c

@@ -5784,13 +5784,30 @@ sysret_t sys_mount(char *source, char *target,
     {
     {
         copy_source = NULL;
         copy_source = NULL;
     }
     }
-    ret = dfs_mount(copy_source, copy_target, copy_filesystemtype, 0, tmp);
 
 
-    if (ret < 0)
+    struct stat buf;
+
+    if (copy_source && stat(copy_source, &buf) && S_ISBLK(buf.st_mode))
     {
     {
-        ret = -rt_get_errno();
+        char *dev_fullpath = dfs_normalize_path(RT_NULL, copy_source);
+        rt_free(copy_source);
+        RT_ASSERT(rt_strncmp(dev_fullpath, "/dev/", sizeof("/dev/") - 1) == 0);
+        ret = dfs_mount(dev_fullpath + sizeof("/dev/") - 1, copy_target, copy_filesystemtype, 0, tmp);
+        if (ret < 0)
+        {
+            ret = -rt_get_errno();
+        }
+        rt_free(dev_fullpath);
+    }
+    else
+    {
+        ret = dfs_mount(copy_source, copy_target, copy_filesystemtype, 0, tmp);
+        if (ret < 0)
+        {
+            ret = -rt_get_errno();
+        }
+        rt_free(copy_source);
     }
     }
-    rt_free(copy_source);
 
 
     return ret;
     return ret;
 }
 }