LocalFileSystemExtensions.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using LibHac.Common;
  2. using LibHac.FsSystem;
  3. using LibHac.Loader;
  4. using LibHac.Ns;
  5. using Ryujinx.HLE.Loaders.Processes.Extensions;
  6. using ApplicationId = LibHac.Ncm.ApplicationId;
  7. namespace Ryujinx.HLE.Loaders.Processes
  8. {
  9. static class LocalFileSystemExtensions
  10. {
  11. public static ProcessResult Load(this LocalFileSystem exeFs, Switch device, string romFsPath = "")
  12. {
  13. MetaLoader metaLoader = exeFs.GetNpdm();
  14. var nacpData = new BlitStruct<ApplicationControlProperty>(1);
  15. ulong programId = metaLoader.GetProgramId();
  16. device.Configuration.VirtualFileSystem.ModLoader.CollectMods(
  17. new[] { programId },
  18. device.Configuration.VirtualFileSystem.ModLoader.GetModsBasePath(),
  19. device.Configuration.VirtualFileSystem.ModLoader.GetSdModsBasePath());
  20. if (programId != 0)
  21. {
  22. ProcessLoaderHelper.EnsureSaveData(device, new ApplicationId(programId), nacpData);
  23. }
  24. ProcessResult processResult = exeFs.Load(device, nacpData, metaLoader);
  25. // Load RomFS.
  26. if (!string.IsNullOrEmpty(romFsPath))
  27. {
  28. device.Configuration.VirtualFileSystem.LoadRomFs(processResult.ProcessId, romFsPath);
  29. }
  30. return processResult;
  31. }
  32. }
  33. }