nro.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 <string>
  6. #include <vector>
  7. #include "common/common_types.h"
  8. #include "core/loader/loader.h"
  9. namespace Core {
  10. class System;
  11. }
  12. namespace FileSys {
  13. class NACP;
  14. }
  15. namespace Kernel {
  16. class KProcess;
  17. }
  18. namespace Loader {
  19. /// Loads an NRO file
  20. class AppLoader_NRO final : public AppLoader {
  21. public:
  22. explicit AppLoader_NRO(FileSys::VirtualFile file_);
  23. ~AppLoader_NRO() override;
  24. /**
  25. * Identifies whether or not the given file is an NRO file.
  26. *
  27. * @param nro_file The file to identify.
  28. *
  29. * @return FileType::NRO, or FileType::Error if the file is not an NRO file.
  30. */
  31. static FileType IdentifyType(const FileSys::VirtualFile& nro_file);
  32. FileType GetFileType() const override {
  33. return IdentifyType(file);
  34. }
  35. LoadResult Load(Kernel::KProcess& process, Core::System& system) override;
  36. ResultStatus ReadIcon(std::vector<u8>& buffer) override;
  37. ResultStatus ReadProgramId(u64& out_program_id) override;
  38. ResultStatus ReadRomFS(FileSys::VirtualFile& dir) override;
  39. ResultStatus ReadTitle(std::string& title) override;
  40. ResultStatus ReadControlData(FileSys::NACP& control) override;
  41. bool IsRomFSUpdatable() const override;
  42. private:
  43. bool LoadNro(Kernel::KProcess& process, const FileSys::VfsFile& nro_file);
  44. std::vector<u8> icon_data;
  45. std::unique_ptr<FileSys::NACP> nacp;
  46. FileSys::VirtualFile romfs;
  47. };
  48. } // namespace Loader