|
@@ -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;
|
|
|
}
|