mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-22 18:53:28 +01:00
Stub sys_fs mount functions for vsh (#10561)
Co-authored-by: Eladash <elad3356p@gmail.com>
This commit is contained in:
parent
9c5c4457b6
commit
7fe15f5f8d
@ -1330,6 +1330,18 @@ error_code sys_fs_fcntl(ppu_thread& ppu, u32 fd, u32 op, vm::ptr<void> _arg, u32
|
|||||||
|
|
||||||
switch (op)
|
switch (op)
|
||||||
{
|
{
|
||||||
|
case 0x80000004: // Unknown
|
||||||
|
{
|
||||||
|
if (_size > 4)
|
||||||
|
{
|
||||||
|
return CELL_EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto arg = vm::static_ptr_cast<u32>(_arg);
|
||||||
|
*arg = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 0x80000006: // cellFsAllocateFileAreaByFdWithInitialData
|
case 0x80000006: // cellFsAllocateFileAreaByFdWithInitialData
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
@ -2326,6 +2338,13 @@ error_code sys_fs_get_mount_info_size(ppu_thread&, vm::ptr<u64> len)
|
|||||||
{
|
{
|
||||||
sys_fs.todo("sys_fs_get_mount_info_size(len=*0x%x)", len);
|
sys_fs.todo("sys_fs_get_mount_info_size(len=*0x%x)", len);
|
||||||
|
|
||||||
|
if (!len)
|
||||||
|
{
|
||||||
|
return CELL_EFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
*len = 0x8;
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2333,6 +2352,46 @@ error_code sys_fs_get_mount_info(ppu_thread&, vm::ptr<CellFsMountInfo> info, u32
|
|||||||
{
|
{
|
||||||
sys_fs.todo("sys_fs_get_mount_info(info=*0x%x, len=0x%x, out_len=*0x%x)", info, len, out_len);
|
sys_fs.todo("sys_fs_get_mount_info(info=*0x%x, len=0x%x, out_len=*0x%x)", info, len, out_len);
|
||||||
|
|
||||||
|
if (!out_len)
|
||||||
|
{
|
||||||
|
return CELL_EFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO there is a case where 'something' happens if !info or len == 0
|
||||||
|
if (!info || len == 0)
|
||||||
|
{
|
||||||
|
sys_fs.todo("sys_fs_get_mount_info special case TODO");
|
||||||
|
}
|
||||||
|
|
||||||
|
const u32 max_len = std::min<u32>(len, 8);
|
||||||
|
*out_len = max_len;
|
||||||
|
|
||||||
|
struct mount_info
|
||||||
|
{
|
||||||
|
std::string_view path, filesystem, dev_name;
|
||||||
|
be_t<u32> unk1 = 0, unk2 = 0, unk3 = 0, unk4 = 0, unk5 = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
static constexpr std::array<mount_info, 8> data
|
||||||
|
{
|
||||||
|
mount_info{.path = "/", .filesystem = "CELL_FS_ADMINFS", .dev_name = "CELL_FS_ADMINFS:", .unk5 = 0x10000000},
|
||||||
|
mount_info{.path = "/app_home", .filesystem = "CELL_FS_DUMMY", .dev_name = "CELL_FS_DUMMY:"},
|
||||||
|
mount_info{.path = "/host_root", .filesystem = "CELL_FS_DUMMY", .dev_name = "CELL_FS_DUMMY:"},
|
||||||
|
mount_info{.path = "/dev_flash", .filesystem = "CELL_FS_FAT", .dev_name = "CELL_FS_IOS:BUILTIN_FLSH1:", .unk5 = 0x10000000},
|
||||||
|
mount_info{.path = "/dev_flash2", .filesystem = "CELL_FS_FAT", .dev_name = "CELL_FS_IOS:BUILTIN_FLSH2:"},
|
||||||
|
mount_info{.path = "/dev_flash3", .filesystem = "CELL_FS_FAT", .dev_name = "CELL_FS_IOS:BUILTIN_FLSH3:"},
|
||||||
|
mount_info{.path = "/dev_hdd0", .filesystem = "CELL_FS_UFS", .dev_name = "CELL_FS_UTILITY:HDD0:"},
|
||||||
|
mount_info{.path = "/dev_bdvd", .filesystem = "CELL_FS_ISO9660", .dev_name = "CELL_FS_IOS:PATA0_BDVD_DRIVE"},
|
||||||
|
};
|
||||||
|
|
||||||
|
for (u32 i = 0; i < max_len; info++, i++)
|
||||||
|
{
|
||||||
|
strcpy_trunc(info->mount_path, data[i].path);
|
||||||
|
strcpy_trunc(info->filesystem, data[i].filesystem);
|
||||||
|
strcpy_trunc(info->dev_name, data[i].dev_name);
|
||||||
|
std::memcpy(&info->unk1, &data[i].unk1, sizeof(be_t<u32>) * 5);
|
||||||
|
}
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user