nca.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include "common/common_types.h"
  5. #include "core/loader/loader.h"
  6. namespace Core {
  7. class System;
  8. }
  9. namespace FileSys {
  10. class NCA;
  11. }
  12. namespace Loader {
  13. class AppLoader_DeconstructedRomDirectory;
  14. /// Loads an NCA file
  15. class AppLoader_NCA final : public AppLoader {
  16. public:
  17. explicit AppLoader_NCA(FileSys::VirtualFile file_);
  18. ~AppLoader_NCA() override;
  19. /**
  20. * Identifies whether or not the given file is an NCA file.
  21. *
  22. * @param nca_file The file to identify.
  23. *
  24. * @return FileType::NCA, or FileType::Error if the file is not an NCA file.
  25. */
  26. static FileType IdentifyType(const FileSys::VirtualFile& nca_file);
  27. FileType GetFileType() const override {
  28. return IdentifyType(file);
  29. }
  30. LoadResult Load(Kernel::KProcess& process, Core::System& system) override;
  31. ResultStatus ReadRomFS(FileSys::VirtualFile& dir) override;
  32. u64 ReadRomFSIVFCOffset() const override;
  33. ResultStatus ReadProgramId(u64& out_program_id) override;
  34. ResultStatus ReadBanner(std::vector<u8>& buffer) override;
  35. ResultStatus ReadLogo(std::vector<u8>& buffer) override;
  36. ResultStatus ReadNSOModules(Modules& modules) override;
  37. private:
  38. std::unique_ptr<FileSys::NCA> nca;
  39. std::unique_ptr<AppLoader_DeconstructedRomDirectory> directory_loader;
  40. };
  41. } // namespace Loader