From 7f1a7cfd2d0f1fd86dc9c2c65d5af23df353bc5c Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Sat, 21 Nov 2020 04:00:52 -0800 Subject: [PATCH] fs: fix RomFs GetEntryType (fixes mariko daybreak) --- .../fssystem_dbm_hierarchical_rom_file_table.hpp | 16 ++++++++-------- .../fs/fs_dbm_hierarchical_rom_file_table.cpp | 16 ++++++++-------- .../source/updater/updater_api.cpp | 2 ++ .../sysupdater/sysupdater_apply_manager.cpp | 8 ++------ 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/libraries/libstratosphere/include/stratosphere/fssystem/fssystem_dbm_hierarchical_rom_file_table.hpp b/libraries/libstratosphere/include/stratosphere/fssystem/fssystem_dbm_hierarchical_rom_file_table.hpp index 8ee5f4da6..390aad10e 100644 --- a/libraries/libstratosphere/include/stratosphere/fssystem/fssystem_dbm_hierarchical_rom_file_table.hpp +++ b/libraries/libstratosphere/include/stratosphere/fssystem/fssystem_dbm_hierarchical_rom_file_table.hpp @@ -584,8 +584,8 @@ namespace ams::fssystem { AMS_ASSERT(out_entry != nullptr); const Result dir_res = this->dir_table.Get(out_pos, out_entry, key); - R_UNLESS(R_FAILED(dir_res), dir_res); - R_UNLESS(!fs::ResultDbmKeyNotFound::Includes(dir_res), dir_res); + R_UNLESS(R_FAILED(dir_res), dir_res); + R_UNLESS(fs::ResultDbmKeyNotFound::Includes(dir_res), dir_res); Position pos = 0; RomFileEntry entry = {}; @@ -601,8 +601,8 @@ namespace ams::fssystem { RomEntryKey key = {}; const Result dir_res = this->dir_table.GetByPosition(std::addressof(key), out_entry, nullptr, nullptr, pos); - R_UNLESS(R_FAILED(dir_res), dir_res); - R_UNLESS(!fs::ResultDbmKeyNotFound::Includes(dir_res), dir_res); + R_UNLESS(R_FAILED(dir_res), dir_res); + R_UNLESS(fs::ResultDbmKeyNotFound::Includes(dir_res), dir_res); RomFileEntry entry = {}; const Result file_res = this->file_table.GetByPosition(std::addressof(key), std::addressof(entry), nullptr, nullptr, pos); @@ -616,8 +616,8 @@ namespace ams::fssystem { AMS_ASSERT(out_entry != nullptr); const Result file_res = this->file_table.Get(out_pos, out_entry, key); - R_UNLESS(R_FAILED(file_res), file_res); - R_UNLESS(!fs::ResultDbmKeyNotFound::Includes(file_res), file_res); + R_UNLESS(R_FAILED(file_res), file_res); + R_UNLESS(fs::ResultDbmKeyNotFound::Includes(file_res), file_res); Position pos = 0; RomDirectoryEntry entry = {}; @@ -633,8 +633,8 @@ namespace ams::fssystem { RomEntryKey key = {}; const Result file_res = this->file_table.GetByPosition(std::addressof(key), out_entry, nullptr, nullptr, pos); - R_UNLESS(R_FAILED(file_res), file_res); - R_UNLESS(!fs::ResultDbmKeyNotFound::Includes(file_res), file_res); + R_UNLESS(R_FAILED(file_res), file_res); + R_UNLESS(fs::ResultDbmKeyNotFound::Includes(file_res), file_res); RomDirectoryEntry entry = {}; const Result dir_res = this->dir_table.GetByPosition(std::addressof(key), std::addressof(entry), nullptr, nullptr, pos); diff --git a/libraries/libstratosphere/source/fs/fs_dbm_hierarchical_rom_file_table.cpp b/libraries/libstratosphere/source/fs/fs_dbm_hierarchical_rom_file_table.cpp index b0067efcd..56d279b25 100644 --- a/libraries/libstratosphere/source/fs/fs_dbm_hierarchical_rom_file_table.cpp +++ b/libraries/libstratosphere/source/fs/fs_dbm_hierarchical_rom_file_table.cpp @@ -479,8 +479,8 @@ namespace ams::fs { AMS_ASSERT(out_entry != nullptr); const Result dir_res = this->dir_table.Get(out_pos, out_entry, key); - R_UNLESS(R_FAILED(dir_res), dir_res); - R_UNLESS(!fs::ResultDbmKeyNotFound::Includes(dir_res), dir_res); + R_UNLESS(R_FAILED(dir_res), dir_res); + R_UNLESS(fs::ResultDbmKeyNotFound::Includes(dir_res), dir_res); Position pos = 0; RomFileEntry entry = {}; @@ -496,8 +496,8 @@ namespace ams::fs { RomEntryKey key = {}; const Result dir_res = this->dir_table.GetByPosition(std::addressof(key), out_entry, pos); - R_UNLESS(R_FAILED(dir_res), dir_res); - R_UNLESS(!fs::ResultDbmKeyNotFound::Includes(dir_res), dir_res); + R_UNLESS(R_FAILED(dir_res), dir_res); + R_UNLESS(fs::ResultDbmKeyNotFound::Includes(dir_res), dir_res); RomFileEntry entry = {}; const Result file_res = this->file_table.GetByPosition(std::addressof(key), std::addressof(entry), pos); @@ -511,8 +511,8 @@ namespace ams::fs { AMS_ASSERT(out_entry != nullptr); const Result file_res = this->file_table.Get(out_pos, out_entry, key); - R_UNLESS(R_FAILED(file_res), file_res); - R_UNLESS(!fs::ResultDbmKeyNotFound::Includes(file_res), file_res); + R_UNLESS(R_FAILED(file_res), file_res); + R_UNLESS(fs::ResultDbmKeyNotFound::Includes(file_res), file_res); Position pos = 0; RomDirectoryEntry entry = {}; @@ -528,8 +528,8 @@ namespace ams::fs { RomEntryKey key = {}; const Result file_res = this->file_table.GetByPosition(std::addressof(key), out_entry, pos); - R_UNLESS(R_FAILED(file_res), file_res); - R_UNLESS(!fs::ResultDbmKeyNotFound::Includes(file_res), file_res); + R_UNLESS(R_FAILED(file_res), file_res); + R_UNLESS(fs::ResultDbmKeyNotFound::Includes(file_res), file_res); RomDirectoryEntry entry = {}; const Result dir_res = this->dir_table.GetByPosition(std::addressof(key), std::addressof(entry), pos); diff --git a/libraries/libstratosphere/source/updater/updater_api.cpp b/libraries/libstratosphere/source/updater/updater_api.cpp index 879a0eeec..124cee5d1 100644 --- a/libraries/libstratosphere/source/updater/updater_api.cpp +++ b/libraries/libstratosphere/source/updater/updater_api.cpp @@ -463,6 +463,8 @@ namespace ams::updater { return BootImageUpdateType::Erista; case spl::HardwareType::Hoag: case spl::HardwareType::Iowa: + case spl::HardwareType::Calcio: + case spl::HardwareType::_Five_: return BootImageUpdateType::Mariko; AMS_UNREACHABLE_DEFAULT_CASE(); } diff --git a/stratosphere/ams_mitm/source/sysupdater/sysupdater_apply_manager.cpp b/stratosphere/ams_mitm/source/sysupdater/sysupdater_apply_manager.cpp index 17591503a..6831f2f1a 100644 --- a/stratosphere/ams_mitm/source/sysupdater/sysupdater_apply_manager.cpp +++ b/stratosphere/ams_mitm/source/sysupdater/sysupdater_apply_manager.cpp @@ -23,12 +23,8 @@ namespace ams::mitm::sysupdater { alignas(os::MemoryPageSize) u8 g_boot_image_update_buffer[64_KB]; updater::BootImageUpdateType GetBootImageUpdateType() { - int boot_image_update_type; - auto size = settings::fwdbg::GetSettingsItemValue(std::addressof(boot_image_update_type), sizeof(boot_image_update_type), "systeminitializer", "boot_image_update_type"); - if (size != sizeof(boot_image_update_type)) { - return updater::BootImageUpdateType::Erista; - } - return updater::GetBootImageUpdateType(boot_image_update_type); + /* NOTE: Here Nintendo uses the value of system setting systeminitializer!boot_image_update_type...but we prefer not to take the risk. */ + return updater::GetBootImageUpdateType(spl::GetHardwareType()); } Result MarkPreCommitForBootImages() {