From b7857d77c69bed758504dbbc235199cd1e3e6537 Mon Sep 17 00:00:00 2001 From: emoose Date: Fri, 2 Nov 2018 01:08:34 +0000 Subject: [PATCH] ContentManager: add more checks for folder-packages Fixes problems with folder packages not being created --- src/xenia/kernel/user_module.cc | 28 +++++++++++++------------ src/xenia/kernel/xam/content_manager.cc | 2 ++ src/xenia/kernel/xam/content_manager.h | 4 ++-- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/xenia/kernel/user_module.cc b/src/xenia/kernel/user_module.cc index 971893fc4..a49230b82 100644 --- a/src/xenia/kernel/user_module.cc +++ b/src/xenia/kernel/user_module.cc @@ -151,22 +151,24 @@ X_STATUS UserModule::LoadFromFile(const std::string_view path) { patch_entry = file_system->ResolvePath(path_ + "p"); } - auto patch_path = patch_entry->absolute_path(); - XELOGI("Loading XEX patch from {}", patch_path); + if (patch_entry) { + auto patch_path = patch_entry->absolute_path(); + XELOGI("Loading XEX patch from {}", patch_path); - auto patch_module = object_ref(new UserModule(kernel_state_)); - result = patch_module->LoadFromFile(patch_path); - if (!result) { - result = patch_module->xex_module()->ApplyPatch(xex_module()); - if (result) { - XELOGE("Failed to apply XEX patch, code: {}", result); + auto patch_module = object_ref(new UserModule(kernel_state_)); + result = patch_module->LoadFromFile(patch_path); + if (!result) { + result = patch_module->xex_module()->ApplyPatch(xex_module()); + if (result) { + XELOGE("Failed to apply XEX patch, code: {}", result); + } + } else { + XELOGE("Failed to load XEX patch, code: {}", result); } - } else { - XELOGE("Failed to load XEX patch, code: {}", result); - } - if (result) { - return X_STATUS_UNSUCCESSFUL; + if (result) { + return X_STATUS_UNSUCCESSFUL; + } } } return LoadXexContinue(); diff --git a/src/xenia/kernel/xam/content_manager.cc b/src/xenia/kernel/xam/content_manager.cc index acac960b0..23c383ecc 100644 --- a/src/xenia/kernel/xam/content_manager.cc +++ b/src/xenia/kernel/xam/content_manager.cc @@ -67,6 +67,8 @@ std::filesystem::path ContentManager::ResolvePackagePath( if (!std::filesystem::exists(package_path) || entry.type == filesystem::FileInfo::Type::kDirectory) { + // Add slash to end of path if this is a folder + // (or package doesn't exist, meaning we're creating a new folder) package_path += xe::kPathSeparator; } return package_path; diff --git a/src/xenia/kernel/xam/content_manager.h b/src/xenia/kernel/xam/content_manager.h index 2b78302c7..cd13cc934 100644 --- a/src/xenia/kernel/xam/content_manager.h +++ b/src/xenia/kernel/xam/content_manager.h @@ -97,8 +97,8 @@ class ContentManager { xe::global_critical_region global_critical_region_; std::vector open_packages_; - uint32_t title_id_override_; // can be used for games/apps that request - // content for other IDs + uint32_t title_id_override_ = + 0; // can be used for games/apps that request content for other IDs }; } // namespace xam