mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-16 07:20:59 +00:00
Implement lv2_mp_flag::cache
Identify /dev_hdd1 without unsafe path comparison.
This commit is contained in:
parent
f801dc6558
commit
8fcebebae3
@ -81,7 +81,7 @@ struct syscache_info
|
|||||||
{
|
{
|
||||||
idm::select<lv2_fs_object, lv2_file>([](u32 /*id*/, lv2_file& file)
|
idm::select<lv2_fs_object, lv2_file>([](u32 /*id*/, lv2_file& file)
|
||||||
{
|
{
|
||||||
if (file.file && std::memcmp("/dev_hdd1/", file.name.data(), 10) == 0)
|
if (file.file && file.mp->flags & lv2_mp_flag::cache)
|
||||||
{
|
{
|
||||||
file.lock = 2;
|
file.lock = 2;
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ LOG_CHANNEL(sys_fs);
|
|||||||
lv2_fs_mount_point g_mp_sys_dev_root;
|
lv2_fs_mount_point g_mp_sys_dev_root;
|
||||||
lv2_fs_mount_point g_mp_sys_no_device;
|
lv2_fs_mount_point g_mp_sys_no_device;
|
||||||
lv2_fs_mount_point g_mp_sys_dev_hdd0{"/dev_hdd0"};
|
lv2_fs_mount_point g_mp_sys_dev_hdd0{"/dev_hdd0"};
|
||||||
lv2_fs_mount_point g_mp_sys_dev_hdd1{"/dev_hdd1", 512, 32768, lv2_mp_flag::no_uid_gid};
|
lv2_fs_mount_point g_mp_sys_dev_hdd1{"/dev_hdd1", 512, 32768, lv2_mp_flag::no_uid_gid + lv2_mp_flag::cache};
|
||||||
lv2_fs_mount_point g_mp_sys_dev_usb{"", 512, 4096, lv2_mp_flag::no_uid_gid};
|
lv2_fs_mount_point g_mp_sys_dev_usb{"", 512, 4096, lv2_mp_flag::no_uid_gid};
|
||||||
lv2_fs_mount_point g_mp_sys_dev_bdvd{"", 2048, 65536, lv2_mp_flag::read_only + lv2_mp_flag::no_uid_gid};
|
lv2_fs_mount_point g_mp_sys_dev_bdvd{"", 2048, 65536, lv2_mp_flag::read_only + lv2_mp_flag::no_uid_gid};
|
||||||
lv2_fs_mount_point g_mp_sys_host_root{"", 512, 512, lv2_mp_flag::strict_get_block_size + lv2_mp_flag::no_uid_gid};
|
lv2_fs_mount_point g_mp_sys_host_root{"", 512, 512, lv2_mp_flag::strict_get_block_size + lv2_mp_flag::no_uid_gid};
|
||||||
@ -702,8 +702,7 @@ error_code sys_fs_close(ppu_thread& ppu, u32 fd)
|
|||||||
return CELL_EBADF;
|
return CELL_EBADF;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (std::memcmp(file->name.data(), "/dev_hdd1/", 10) != 0
|
if (!(file->mp->flags & (lv2_mp_flag::read_only + lv2_mp_flag::cache)) && file->flags & CELL_FS_O_ACCMODE)
|
||||||
&& !(file->mp->flags & lv2_mp_flag::read_only) && file->flags & CELL_FS_O_ACCMODE)
|
|
||||||
{
|
{
|
||||||
// Special: Ensure temporary directory for gamedata writes will remain on disk before final gamedata commitment
|
// Special: Ensure temporary directory for gamedata writes will remain on disk before final gamedata commitment
|
||||||
file->file.sync(); // For cellGameContentPermit atomicity
|
file->file.sync(); // For cellGameContentPermit atomicity
|
||||||
|
@ -127,6 +127,7 @@ enum class lv2_mp_flag
|
|||||||
read_only,
|
read_only,
|
||||||
no_uid_gid,
|
no_uid_gid,
|
||||||
strict_get_block_size,
|
strict_get_block_size,
|
||||||
|
cache,
|
||||||
|
|
||||||
__bitset_enum_max
|
__bitset_enum_max
|
||||||
};
|
};
|
||||||
|
@ -758,8 +758,7 @@ bool vfs::host::rename(const std::string& from, const std::string& to, const lv2
|
|||||||
|
|
||||||
file.restore_data.seek_pos = file.file.pos();
|
file.restore_data.seek_pos = file.file.pos();
|
||||||
|
|
||||||
if (std::memcmp(file.name.data(), "/dev_hdd1/", 10) != 0
|
if (!(file.mp->flags & (lv2_mp_flag::read_only + lv2_mp_flag::cache)) && file.flags & CELL_FS_O_ACCMODE)
|
||||||
&& !(file.mp->flags & lv2_mp_flag::read_only) && file.flags & CELL_FS_O_ACCMODE)
|
|
||||||
{
|
{
|
||||||
file.file.sync(); // For cellGameContentPermit atomicity
|
file.file.sync(); // For cellGameContentPermit atomicity
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user