diff options
author | Zach Hilman <zachhilman@gmail.com> | 2018-08-19 03:28:17 +0200 |
---|---|---|
committer | Zach Hilman <zachhilman@gmail.com> | 2018-08-19 03:28:23 +0200 |
commit | 27da7bc9daf951bce69970881bdbc8719378ca39 (patch) | |
tree | 67fb66ecb4ab97f2036712eb5b75216f75e730bf /src/core/file_sys | |
parent | Merge pull request #838 from FearlessTobi/port-3616 (diff) | |
download | yuzu-27da7bc9daf951bce69970881bdbc8719378ca39.tar yuzu-27da7bc9daf951bce69970881bdbc8719378ca39.tar.gz yuzu-27da7bc9daf951bce69970881bdbc8719378ca39.tar.bz2 yuzu-27da7bc9daf951bce69970881bdbc8719378ca39.tar.lz yuzu-27da7bc9daf951bce69970881bdbc8719378ca39.tar.xz yuzu-27da7bc9daf951bce69970881bdbc8719378ca39.tar.zst yuzu-27da7bc9daf951bce69970881bdbc8719378ca39.zip |
Diffstat (limited to 'src/core/file_sys')
-rw-r--r-- | src/core/file_sys/registered_cache.cpp | 3 | ||||
-rw-r--r-- | src/core/file_sys/romfs_factory.cpp | 38 | ||||
-rw-r--r-- | src/core/file_sys/romfs_factory.h | 12 |
3 files changed, 49 insertions, 4 deletions
diff --git a/src/core/file_sys/registered_cache.cpp b/src/core/file_sys/registered_cache.cpp index d25eeee34..b239c9e48 100644 --- a/src/core/file_sys/registered_cache.cpp +++ b/src/core/file_sys/registered_cache.cpp @@ -77,12 +77,13 @@ static ContentRecordType GetCRTypeFromNCAType(NCAContentType type) { case NCAContentType::Control: return ContentRecordType::Control; case NCAContentType::Data: + case static_cast<NCAContentType>(0x05): ///< Seems to be used on some system archives return ContentRecordType::Data; case NCAContentType::Manual: // TODO(DarkLordZach): Peek at NCA contents to differentiate Manual and Legal. return ContentRecordType::Manual; default: - UNREACHABLE(); + UNREACHABLE_MSG("Invalid NCAContentType={:02X}", static_cast<u8>(type)); } } diff --git a/src/core/file_sys/romfs_factory.cpp b/src/core/file_sys/romfs_factory.cpp index 54fbd3267..7ba4042ca 100644 --- a/src/core/file_sys/romfs_factory.cpp +++ b/src/core/file_sys/romfs_factory.cpp @@ -6,7 +6,9 @@ #include <memory> #include "common/common_types.h" #include "common/logging/log.h" +#include "core/core.h" #include "core/file_sys/romfs_factory.h" +#include "core/hle/kernel/process.h" namespace FileSys { @@ -17,9 +19,41 @@ RomFSFactory::RomFSFactory(Loader::AppLoader& app_loader) { } } -ResultVal<VirtualFile> RomFSFactory::Open(u64 title_id) { - // TODO(DarkLordZach): Use title id. +ResultVal<VirtualFile> RomFSFactory::OpenCurrentProcess() { return MakeResult<VirtualFile>(file); } +ResultVal<VirtualFile> RomFSFactory::Open(u64 title_id, StorageId storage, ContentRecordType type) { + switch (storage) { + case StorageId::NandSystem: { + const auto res = Service::FileSystem::GetSystemNANDContents()->GetEntry(title_id, type); + if (res == nullptr) { + // TODO(DarkLordZach): Find the right error code to use here + return ResultCode(-1); + } + const auto romfs = res->GetRomFS(); + if (romfs == nullptr) { + // TODO(DarkLordZach): Find the right error code to use here + return ResultCode(-1); + } + return MakeResult<VirtualFile>(romfs); + } + case StorageId::NandUser: { + const auto res = Service::FileSystem::GetUserNANDContents()->GetEntry(title_id, type); + if (res == nullptr) { + // TODO(DarkLordZach): Find the right error code to use here + return ResultCode(-1); + } + const auto romfs = res->GetRomFS(); + if (romfs == nullptr) { + // TODO(DarkLordZach): Find the right error code to use here + return ResultCode(-1); + } + return MakeResult<VirtualFile>(romfs); + } + default: + UNIMPLEMENTED_MSG("Unimplmented storage_id={:02X}", static_cast<u8>(storage)); + } +} + } // namespace FileSys diff --git a/src/core/file_sys/romfs_factory.h b/src/core/file_sys/romfs_factory.h index c19787cd4..455cd4159 100644 --- a/src/core/file_sys/romfs_factory.h +++ b/src/core/file_sys/romfs_factory.h @@ -11,12 +11,22 @@ namespace FileSys { +enum class StorageId : u8 { + None = 0, + Host = 1, + GameCard = 2, + NandSystem = 3, + NandUser = 4, + SdCard = 5, +}; + /// File system interface to the RomFS archive class RomFSFactory { public: explicit RomFSFactory(Loader::AppLoader& app_loader); - ResultVal<VirtualFile> Open(u64 title_id); + ResultVal<VirtualFile> OpenCurrentProcess(); + ResultVal<VirtualFile> Open(u64 title_id, StorageId storage, ContentRecordType type); private: VirtualFile file; |