diff options
author | Alex Barney <thealexbarney@gmail.com> | 2019-10-17 01:17:44 -0500 |
---|---|---|
committer | Ac_K <Acoustik666@gmail.com> | 2019-10-17 08:17:44 +0200 |
commit | 8a8ea4c8c00e8ba23349d9cdb0a6b681d09e6b0d (patch) | |
tree | aee0876fbc6e5f9fd2808d942297938ab3ab9495 /Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs | |
parent | c0fe6cdca0ebe6b19f8578893ec503d432683897 (diff) |
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
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs')
-rw-r--r-- | Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs | 34 |
1 files changed, 24 insertions, 10 deletions
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 +} |