From 0b4b87f069f167fede4554269688290cf597c9ea Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Fri, 10 Jan 2020 03:17:35 +0300 Subject: [PATCH] sys_fs: fix sys_fs_get_block_size Don't check file existence on /dev_hdd0. Relax check on some mountpoints. Fix CELL_EISDIR error condition. --- rpcs3/Emu/Cell/lv2/sys_fs.cpp | 8 +++++--- rpcs3/Emu/Cell/lv2/sys_fs.h | 1 + 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/rpcs3/Emu/Cell/lv2/sys_fs.cpp b/rpcs3/Emu/Cell/lv2/sys_fs.cpp index f966e94923..1cc280f2a1 100644 --- a/rpcs3/Emu/Cell/lv2/sys_fs.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_fs.cpp @@ -23,8 +23,8 @@ lv2_fs_mount_point g_mp_sys_dev_hdd0; lv2_fs_mount_point g_mp_sys_dev_hdd1{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, 2048, lv2_mp_flag::read_only + lv2_mp_flag::no_uid_gid}; -lv2_fs_mount_point g_mp_sys_app_home{512, 512, lv2_mp_flag::no_uid_gid}; -lv2_fs_mount_point g_mp_sys_host_root{512, 512, lv2_mp_flag::no_uid_gid}; +lv2_fs_mount_point g_mp_sys_app_home{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}; bool verify_mself(u32 fd, fs::file const& mself_file) { @@ -1558,10 +1558,12 @@ error_code sys_fs_get_block_size(ppu_thread& ppu, vm::cptr path, vm::ptrflags & lv2_mp_flag::strict_get_block_size ? !fs::is_file(local_path) : !fs::exists(local_path))) { switch (auto error = fs::g_tls_error) { + case fs::error::exist: return {CELL_EISDIR, path}; case fs::error::noent: return {CELL_ENOENT, path}; default: sys_fs.error("sys_fs_get_block_size(): unknown error %s", error); } diff --git a/rpcs3/Emu/Cell/lv2/sys_fs.h b/rpcs3/Emu/Cell/lv2/sys_fs.h index 1a7434cedd..9380b9957f 100644 --- a/rpcs3/Emu/Cell/lv2/sys_fs.h +++ b/rpcs3/Emu/Cell/lv2/sys_fs.h @@ -125,6 +125,7 @@ enum class lv2_mp_flag { read_only, no_uid_gid, + strict_get_block_size, __bitset_enum_max };