diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c index 21a34bd28e..e50e195c46 100644 --- a/components/lwp/lwp_syscall.c +++ b/components/lwp/lwp_syscall.c @@ -5784,13 +5784,30 @@ sysret_t sys_mount(char *source, char *target, { 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; }