From 8a8ea4c8c00e8ba23349d9cdb0a6b681d09e6b0d Mon Sep 17 00:00:00 2001 From: Alex Barney Date: Thu, 17 Oct 2019 01:17:44 -0500 Subject: Update to LibHac 0.6.0 (#792) * Update to LibHac 0.6.0 * Create an IFileSystemProxy object from LibHac * Rename rc -> result * Alignment and spacing * Result formatting * Spacing * Sort usings --- .../Fs/FileSystemProxy/FileSystemProxyHelper.cs | 34 +++++++++++++++------- 1 file changed, 24 insertions(+), 10 deletions(-) (limited to 'Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs') diff --git a/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs b/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs index 04b87b57..2b0f06dd 100644 --- a/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs +++ b/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs @@ -1,6 +1,8 @@ using LibHac; using LibHac.Fs; -using LibHac.Fs.NcaUtils; +using LibHac.FsSystem; +using LibHac.FsSystem.NcaUtils; +using LibHac.Spl; using Ryujinx.Common; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.Utilities; @@ -25,7 +27,14 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy try { LocalFileSystem fileSystem = new LocalFileSystem(savePath); - LibHac.Fs.IFileSystem saveFileSystem = new DirectorySaveDataFileSystem(fileSystem); + + Result result = DirectorySaveDataFileSystem.CreateNew(out DirectorySaveDataFileSystem dirFileSystem, fileSystem); + if (result.IsFailure()) + { + return (ResultCode)result.Value; + } + + LibHac.Fs.IFileSystem saveFileSystem = dirFileSystem; if (readOnly) { @@ -111,13 +120,16 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy PartitionFileSystem nsp = new PartitionFileSystem(pfsFile.AsStorage()); ImportTitleKeysFromNsp(nsp, context.Device.System.KeySet); - + string filename = fullPath.Replace(archivePath.FullName, string.Empty).TrimStart('\\'); - if (nsp.FileExists(filename)) + Result result = nsp.OpenFile(out LibHac.Fs.IFile ncaFile, filename, OpenMode.Read); + if (result.IsFailure()) { - return OpenNcaFs(context, fullPath, nsp.OpenFile(filename, OpenMode.Read).AsStorage(), out openedFileSystem); + return (ResultCode)result.Value; } + + return OpenNcaFs(context, fullPath, ncaFile.AsStorage(), out openedFileSystem); } catch (HorizonResultException ex) { @@ -130,15 +142,17 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy public static void ImportTitleKeysFromNsp(LibHac.Fs.IFileSystem nsp, Keyset keySet) { - foreach (DirectoryEntry ticketEntry in nsp.EnumerateEntries("*.tik")) + foreach (DirectoryEntryEx ticketEntry in nsp.EnumerateEntries("/", "*.tik")) { - Ticket ticket = new Ticket(nsp.OpenFile(ticketEntry.FullPath, OpenMode.Read).AsStream()); + Result result = nsp.OpenFile(out LibHac.Fs.IFile ticketFile, ticketEntry.FullPath, OpenMode.Read); - if (!keySet.TitleKeys.ContainsKey(ticket.RightsId)) + if (result.IsSuccess()) { - keySet.TitleKeys.Add(ticket.RightsId, ticket.GetTitleKey(keySet)); + Ticket ticket = new Ticket(ticketFile.AsStream()); + + keySet.ExternalKeySet.Add(new RightsId(ticket.RightsId), new AccessKey(ticket.GetTitleKey(keySet))); } } } } -} \ No newline at end of file +} -- cgit v1.2.3