diff options
Diffstat (limited to '')
-rw-r--r-- | src/core/file_sys/patch_manager.cpp | 4 | ||||
-rw-r--r-- | src/core/file_sys/romfs.cpp | 19 | ||||
-rw-r--r-- | src/core/file_sys/romfs_factory.cpp | 2 | ||||
-rw-r--r-- | src/core/hle/service/nfc/common/device.cpp | 10 | ||||
-rw-r--r-- | src/core/loader/nca.cpp | 6 |
5 files changed, 21 insertions, 20 deletions
diff --git a/src/core/file_sys/patch_manager.cpp b/src/core/file_sys/patch_manager.cpp index 0bca05587..cc7af2ea3 100644 --- a/src/core/file_sys/patch_manager.cpp +++ b/src/core/file_sys/patch_manager.cpp @@ -429,10 +429,6 @@ VirtualFile PatchManager::PatchRomFS(const NCA* base_nca, VirtualFile base_romfs LOG_DEBUG(Loader, "{}", log_string); } - if (base_romfs == nullptr) { - return base_romfs; - } - auto romfs = base_romfs; // Game Updates diff --git a/src/core/file_sys/romfs.cpp b/src/core/file_sys/romfs.cpp index 1eb1f439a..6de2103a0 100644 --- a/src/core/file_sys/romfs.cpp +++ b/src/core/file_sys/romfs.cpp @@ -3,6 +3,7 @@ #include <memory> +#include "common/assert.h" #include "common/common_types.h" #include "common/string_util.h" #include "common/swap.h" @@ -101,24 +102,30 @@ void ProcessDirectory(const VirtualFile& file, std::size_t dir_offset, std::size } // Anonymous namespace VirtualDir ExtractRomFS(VirtualFile file) { + auto root_container = std::make_shared<VectorVfsDirectory>(); + if (!file) { + return root_container; + } + RomFSHeader header{}; - if (file->ReadObject(&header) != sizeof(RomFSHeader)) - return nullptr; + if (file->ReadObject(&header) != sizeof(RomFSHeader)) { + return root_container; + } - if (header.header_size != sizeof(RomFSHeader)) - return nullptr; + if (header.header_size != sizeof(RomFSHeader)) { + return root_container; + } const u64 file_offset = header.file_meta.offset; const u64 dir_offset = header.directory_meta.offset; - auto root_container = std::make_shared<VectorVfsDirectory>(); - ProcessDirectory(file, dir_offset, file_offset, header.data_offset, 0, root_container); if (auto root = root_container->GetSubdirectory(""); root) { return std::make_shared<CachedVfsDirectory>(std::move(root)); } + ASSERT(false); return nullptr; } diff --git a/src/core/file_sys/romfs_factory.cpp b/src/core/file_sys/romfs_factory.cpp index 1bc07dae5..35e149905 100644 --- a/src/core/file_sys/romfs_factory.cpp +++ b/src/core/file_sys/romfs_factory.cpp @@ -22,7 +22,7 @@ RomFSFactory::RomFSFactory(Loader::AppLoader& app_loader, ContentProvider& provi : content_provider{provider}, filesystem_controller{controller} { // Load the RomFS from the app if (app_loader.ReadRomFS(file) != Loader::ResultStatus::Success) { - LOG_ERROR(Service_FS, "Unable to read RomFS!"); + LOG_WARNING(Service_FS, "Unable to read base RomFS"); } updatable = app_loader.IsRomFSUpdatable(); diff --git a/src/core/hle/service/nfc/common/device.cpp b/src/core/hle/service/nfc/common/device.cpp index 47516f883..f97e5b44c 100644 --- a/src/core/hle/service/nfc/common/device.cpp +++ b/src/core/hle/service/nfc/common/device.cpp @@ -438,16 +438,16 @@ Result NfcDevice::Mount(NFP::ModelType model_type, NFP::MountTarget mount_target is_corrupted = true; } - if (!is_corrupted) { + device_state = DeviceState::TagMounted; + mount_target = mount_target_; + + if (!is_corrupted && mount_target != NFP::MountTarget::Rom) { std::vector<u8> data(sizeof(NFP::EncryptedNTAG215File)); memcpy(data.data(), &encrypted_tag_data, sizeof(encrypted_tag_data)); WriteBackupData(encrypted_tag_data.uuid, data); } - device_state = DeviceState::TagMounted; - mount_target = mount_target_; - - if (is_corrupted) { + if (is_corrupted && mount_target != NFP::MountTarget::Rom) { bool has_backup = HasBackup(encrypted_tag_data.uuid).IsSuccess(); return has_backup ? ResultCorruptedDataWithBackup : ResultCorruptedData; } diff --git a/src/core/loader/nca.cpp b/src/core/loader/nca.cpp index 4feb6968a..814407535 100644 --- a/src/core/loader/nca.cpp +++ b/src/core/loader/nca.cpp @@ -74,10 +74,8 @@ AppLoader_NCA::LoadResult AppLoader_NCA::Load(Kernel::KProcess& process, Core::S return load_result; } - if (nca->GetRomFS() != nullptr && nca->GetRomFS()->GetSize() > 0) { - system.GetFileSystemController().RegisterRomFS(std::make_unique<FileSys::RomFSFactory>( - *this, system.GetContentProvider(), system.GetFileSystemController())); - } + system.GetFileSystemController().RegisterRomFS(std::make_unique<FileSys::RomFSFactory>( + *this, system.GetContentProvider(), system.GetFileSystemController())); is_loaded = true; return load_result; |