Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion rpcs3/Emu/Cell/lv2/sys_overlay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ std::function<void(void*)> lv2_overlay::load(utils::serial& ar)
{
u128 klic = g_fxo->get<loaded_npdrm_keys>().last_key();
file = make_file_view(std::move(file), offset, umax);
ovlm = ppu_load_overlay(ppu_exec_object{ decrypt_self(std::move(file), reinterpret_cast<u8*>(&klic)) }, false, path, 0, &ar).first;
ovlm = ppu_load_overlay(ppu_exec_object{ decrypt_self(std::move(file), reinterpret_cast<u8*>(&klic)) }, false, path, offset, &ar).first;

if (!ovlm)
{
Expand Down
16 changes: 13 additions & 3 deletions rpcs3/Emu/Cell/lv2/sys_prx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ std::function<void(void*)> lv2_prx::load(utils::serial& ar)
{
u128 klic = g_fxo->get<loaded_npdrm_keys>().last_key();
file = make_file_view(std::move(file), offset, umax);
prx = ppu_load_prx(ppu_prx_object{decrypt_self(std::move(file), reinterpret_cast<u8*>(&klic))}, false, path, 0, &ar);
prx = ppu_load_prx(ppu_prx_object{decrypt_self(std::move(file), reinterpret_cast<u8*>(&klic))}, false, path, offset, &ar);
prx->m_loaded_flags = std::move(loaded_flags);
prx->m_external_loaded_flags = std::move(external_flags);

Expand Down Expand Up @@ -390,7 +390,9 @@ void lv2_prx::save(utils::serial& ar)
{
USING_SERIALIZATION_VERSION(lv2_prx_overlay);

ar(vfs::retrieve(path), offset, state);
const std::string vpath = vfs::retrieve(path);

ar(vpath, offset, state);

// Save segments count
ar.serialize_vle(segs.size());
Expand All @@ -401,10 +403,18 @@ void lv2_prx::save(utils::serial& ar)
ar(m_external_loaded_flags);
}

std::string segments;

for (const ppu_segment& seg : segs)
{
if (seg.type == 0x1u && seg.size) ar(seg.addr);
if (seg.type == 0x1u && seg.size)
{
fmt::append(segments, " 0x%x", seg.addr);
ar(seg.addr);
}
}

(vpath.empty() ? sys_prx.error : sys_prx.success)("lv2_prx::save(): vpath='%s', offset=0x%x, state=%x, segments:%s", vpath, offset, +state, segments);
}

error_code sys_prx_get_ppu_guid(ppu_thread& ppu)
Expand Down
2 changes: 1 addition & 1 deletion rpcs3/Emu/VFS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@ std::string vfs::retrieve(std::string_view path, const vfs_directory* node, std:

std::vector<std::string_view> mount_path_empty;

const std::string rpath = Emu.GetCallbacks().resolve_path(path);
const std::string rpath = Emu.GetCallbacks().resolve_path_may_not_exist(path);

if (!rpath.empty())
{
Expand Down
15 changes: 15 additions & 0 deletions rpcs3/main_application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,22 @@ EmuCallbacks main_application::CreateCallbacks()

const QString result = QDir(fi.canonicalFilePath()).filePath(tail);

#ifdef _WIN32
std::string result_with_drive = QDir::cleanPath(result).toStdString();

if (!tail.isEmpty() && sv.starts_with("/") && !sv.starts_with("//"))
{
// Erase absolute path for non-existant path
if (result_with_drive.size() > 1 && result_with_drive[1] == ':')
{
result_with_drive.erase(result_with_drive.begin(), result_with_drive.begin() + 2);
}
}

return result_with_drive;
#else
return QDir::cleanPath(result).toStdString();
#endif
};

callbacks.get_font_dirs = []()
Expand Down
Loading