aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Horizon.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS/Horizon.cs')
-rw-r--r--Ryujinx.HLE/HOS/Horizon.cs61
1 files changed, 29 insertions, 32 deletions
diff --git a/Ryujinx.HLE/HOS/Horizon.cs b/Ryujinx.HLE/HOS/Horizon.cs
index 5c2ca9b3..94b2e6c6 100644
--- a/Ryujinx.HLE/HOS/Horizon.cs
+++ b/Ryujinx.HLE/HOS/Horizon.cs
@@ -1,4 +1,5 @@
using LibHac;
+using LibHac.IO;
using Ryujinx.Common.Logging;
using Ryujinx.HLE.FileSystem.Content;
using Ryujinx.HLE.HOS.Font;
@@ -242,7 +243,7 @@ namespace Ryujinx.HLE.HOS
{
FileStream file = new FileStream(xciFile, FileMode.Open, FileAccess.Read);
- Xci xci = new Xci(KeySet, file);
+ Xci xci = new Xci(KeySet, file.AsStorage());
(Nca mainNca, Nca controlNca) = GetXciGameData(xci);
@@ -271,7 +272,7 @@ namespace Ryujinx.HLE.HOS
foreach (PfsFileEntry ticketEntry in xci.SecurePartition.Files.Where(x => x.Name.EndsWith(".tik")))
{
- Ticket ticket = new Ticket(xci.SecurePartition.OpenFile(ticketEntry));
+ Ticket ticket = new Ticket(xci.SecurePartition.OpenFile(ticketEntry).AsStream());
if (!KeySet.TitleKeys.ContainsKey(ticket.RightsId))
{
@@ -281,9 +282,9 @@ namespace Ryujinx.HLE.HOS
foreach (PfsFileEntry fileEntry in xci.SecurePartition.Files.Where(x => x.Name.EndsWith(".nca")))
{
- Stream ncaStream = xci.SecurePartition.OpenFile(fileEntry);
+ IStorage ncaStorage = xci.SecurePartition.OpenFile(fileEntry);
- Nca nca = new Nca(KeySet, ncaStream, true);
+ Nca nca = new Nca(KeySet, ncaStorage, true);
if (nca.Header.ContentType == ContentType.Program)
{
@@ -326,20 +327,18 @@ namespace Ryujinx.HLE.HOS
public void ReadControlData(Nca controlNca)
{
- Romfs controlRomfs = new Romfs(controlNca.OpenSection(0, false, FsIntegrityCheckLevel));
+ Romfs controlRomfs = new Romfs(controlNca.OpenSection(0, false, FsIntegrityCheckLevel, true));
- byte[] controlFile = controlRomfs.GetFile("/control.nacp");
+ IStorage controlFile = controlRomfs.OpenFile("/control.nacp");
- BinaryReader reader = new BinaryReader(new MemoryStream(controlFile));
-
- ControlData = new Nacp(reader);
+ ControlData = new Nacp(controlFile.AsStream());
}
public void LoadNca(string ncaFile)
{
FileStream file = new FileStream(ncaFile, FileMode.Open, FileAccess.Read);
- Nca nca = new Nca(KeySet, file, true);
+ Nca nca = new Nca(KeySet, file.AsStorage(false), false);
LoadNca(nca, null);
}
@@ -348,16 +347,16 @@ namespace Ryujinx.HLE.HOS
{
FileStream file = new FileStream(nspFile, FileMode.Open, FileAccess.Read);
- Pfs nsp = new Pfs(file);
-
- PfsFileEntry ticketFile = nsp.Files.FirstOrDefault(x => x.Name.EndsWith(".tik"));
+ Pfs nsp = new Pfs(file.AsStorage(false));
- // Load title key from the NSP's ticket in case the user doesn't have a title key file
- if (ticketFile != null)
+ foreach (PfsFileEntry ticketEntry in nsp.Files.Where(x => x.Name.EndsWith(".tik")))
{
- Ticket ticket = new Ticket(nsp.OpenFile(ticketFile));
+ Ticket ticket = new Ticket(nsp.OpenFile(ticketEntry).AsStream());
- KeySet.TitleKeys[ticket.RightsId] = ticket.GetTitleKey(KeySet);
+ if (!KeySet.TitleKeys.ContainsKey(ticket.RightsId))
+ {
+ KeySet.TitleKeys.Add(ticket.RightsId, ticket.GetTitleKey(KeySet));
+ }
}
Nca mainNca = null;
@@ -396,26 +395,26 @@ namespace Ryujinx.HLE.HOS
return;
}
- Stream romfsStream = mainNca.OpenSection(ProgramPartitionType.Data, false, FsIntegrityCheckLevel);
- Stream exefsStream = mainNca.OpenSection(ProgramPartitionType.Code, false, FsIntegrityCheckLevel);
+ IStorage romfsStorage = mainNca.OpenSection(ProgramPartitionType.Data, false, FsIntegrityCheckLevel, false);
+ IStorage exefsStorage = mainNca.OpenSection(ProgramPartitionType.Code, false, FsIntegrityCheckLevel, true);
- if (exefsStream == null)
+ if (exefsStorage == null)
{
Logger.PrintError(LogClass.Loader, "No ExeFS found in NCA");
return;
}
- if (romfsStream == null)
+ if (romfsStorage == null)
{
Logger.PrintWarning(LogClass.Loader, "No RomFS found in NCA");
}
else
{
- Device.FileSystem.SetRomFs(romfsStream);
+ Device.FileSystem.SetRomFs(romfsStorage.AsStream(false));
}
- Pfs exefs = new Pfs(exefsStream);
+ Pfs exefs = new Pfs(exefsStorage);
Npdm metaData = null;
@@ -423,7 +422,7 @@ namespace Ryujinx.HLE.HOS
{
Logger.PrintInfo(LogClass.Loader, "Loading main.npdm...");
- metaData = new Npdm(exefs.OpenFile("main.npdm"));
+ metaData = new Npdm(exefs.OpenFile("main.npdm").AsStream());
}
else
{
@@ -445,7 +444,7 @@ namespace Ryujinx.HLE.HOS
Logger.PrintInfo(LogClass.Loader, $"Loading {filename}...");
- NxStaticObject staticObject = new NxStaticObject(exefs.OpenFile(file));
+ NxStaticObject staticObject = new NxStaticObject(exefs.OpenFile(file).AsStream());
staticObjects.Add(staticObject);
}
@@ -453,19 +452,17 @@ namespace Ryujinx.HLE.HOS
Nacp ReadControlData()
{
- Romfs controlRomfs = new Romfs(controlNca.OpenSection(0, false, FsIntegrityCheckLevel));
-
- byte[] controlFile = controlRomfs.GetFile("/control.nacp");
+ Romfs controlRomfs = new Romfs(controlNca.OpenSection(0, false, FsIntegrityCheckLevel, true));
- BinaryReader reader = new BinaryReader(new MemoryStream(controlFile));
+ IStorage controlFile = controlRomfs.OpenFile("/control.nacp");
- Nacp controlData = new Nacp(reader);
+ Nacp controlData = new Nacp(controlFile.AsStream());
- CurrentTitle = controlData.Languages[(int)State.DesiredTitleLanguage].Title;
+ CurrentTitle = controlData.Descriptions[(int)State.DesiredTitleLanguage].Title;
if (string.IsNullOrWhiteSpace(CurrentTitle))
{
- CurrentTitle = controlData.Languages.ToList().Find(x => !string.IsNullOrWhiteSpace(x.Title)).Title;
+ CurrentTitle = controlData.Descriptions.ToList().Find(x => !string.IsNullOrWhiteSpace(x.Title)).Title;
}
return controlData;