romfs_factory.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <memory>
  5. #include "common/common_types.h"
  6. #include "core/file_sys/vfs_types.h"
  7. #include "core/hle/result.h"
  8. namespace Loader {
  9. class AppLoader;
  10. } // namespace Loader
  11. namespace Service::FileSystem {
  12. class FileSystemController;
  13. }
  14. namespace FileSys {
  15. class ContentProvider;
  16. class NCA;
  17. enum class ContentRecordType : u8;
  18. enum class StorageId : u8 {
  19. None = 0,
  20. Host = 1,
  21. GameCard = 2,
  22. NandSystem = 3,
  23. NandUser = 4,
  24. SdCard = 5,
  25. };
  26. /// File system interface to the RomFS archive
  27. class RomFSFactory {
  28. public:
  29. explicit RomFSFactory(Loader::AppLoader& app_loader, ContentProvider& provider,
  30. Service::FileSystem::FileSystemController& controller);
  31. ~RomFSFactory();
  32. void SetPackedUpdate(VirtualFile update_raw_file);
  33. [[nodiscard]] ResultVal<VirtualFile> OpenCurrentProcess(u64 current_process_title_id) const;
  34. [[nodiscard]] ResultVal<VirtualFile> OpenPatchedRomFS(u64 title_id,
  35. ContentRecordType type) const;
  36. [[nodiscard]] ResultVal<VirtualFile> OpenPatchedRomFSWithProgramIndex(
  37. u64 title_id, u8 program_index, ContentRecordType type) const;
  38. [[nodiscard]] ResultVal<VirtualFile> Open(u64 title_id, StorageId storage,
  39. ContentRecordType type) const;
  40. private:
  41. [[nodiscard]] std::shared_ptr<NCA> GetEntry(u64 title_id, StorageId storage,
  42. ContentRecordType type) const;
  43. VirtualFile file;
  44. VirtualFile update_raw;
  45. bool updatable;
  46. u64 ivfc_offset;
  47. ContentProvider& content_provider;
  48. Service::FileSystem::FileSystemController& filesystem_controller;
  49. };
  50. } // namespace FileSys