aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/FileSystem/EncryptedFileSystemCreator.cs
diff options
context:
space:
mode:
authorAlex Barney <thealexbarney@gmail.com>2021-08-20 13:36:14 -0700
committerGitHub <noreply@github.com>2021-08-20 13:36:14 -0700
commite0af248e6f96efe7009915935407fc809eb774a9 (patch)
treec2423a9b16ee246d18a0e2b75b03e802fa6e7776 /Ryujinx.HLE/FileSystem/EncryptedFileSystemCreator.cs
parent97aedc030d24bc5e32fa95a297155f2df2ecfcc2 (diff)
Clean the SD card save directory when opening the emulator (#2564)
Cleans "sdcard:/Nintendo/save" and deletes "sdcard:/save" when opening the emulator. Works around invalid encryption when keys or the SD card encryption seed are changed.
Diffstat (limited to 'Ryujinx.HLE/FileSystem/EncryptedFileSystemCreator.cs')
-rw-r--r--Ryujinx.HLE/FileSystem/EncryptedFileSystemCreator.cs35
1 files changed, 1 insertions, 34 deletions
diff --git a/Ryujinx.HLE/FileSystem/EncryptedFileSystemCreator.cs b/Ryujinx.HLE/FileSystem/EncryptedFileSystemCreator.cs
index aaa80044..f8e59fb5 100644
--- a/Ryujinx.HLE/FileSystem/EncryptedFileSystemCreator.cs
+++ b/Ryujinx.HLE/FileSystem/EncryptedFileSystemCreator.cs
@@ -9,8 +9,6 @@ namespace Ryujinx.HLE.FileSystem
{
public class EncryptedFileSystemCreator : IEncryptedFileSystemCreator
{
- public EncryptedFileSystemCreator() { }
-
public Result Create(out ReferenceCountedDisposable<IFileSystem> encryptedFileSystem, ReferenceCountedDisposable<IFileSystem> baseFileSystem,
EncryptedFsKeyId keyId, in EncryptionSeed encryptionSeed)
{
@@ -23,40 +21,9 @@ namespace Ryujinx.HLE.FileSystem
// Force all-zero keys for now since people can open the emulator with different keys or sd seeds sometimes
var fs = new AesXtsFileSystem(baseFileSystem, new byte[0x32], 0x4000);
- var aesFileSystem = new ReferenceCountedDisposable<IFileSystem>(fs);
-
- // This wrapper will handle deleting files that were created with different keys
- var wrappedFs = new ChangedEncryptionHandlingFileSystem(aesFileSystem);
- encryptedFileSystem = new ReferenceCountedDisposable<IFileSystem>(wrappedFs);
+ encryptedFileSystem = new ReferenceCountedDisposable<IFileSystem>(fs);
return Result.Success;
}
}
-
- public class ChangedEncryptionHandlingFileSystem : ForwardingFileSystem
- {
- public ChangedEncryptionHandlingFileSystem(ReferenceCountedDisposable<IFileSystem> baseFileSystem) : base(baseFileSystem) { }
-
- protected override Result DoOpenFile(out IFile file, U8Span path, OpenMode mode)
- {
- UnsafeHelpers.SkipParamInit(out file);
-
- try
- {
- return base.DoOpenFile(out file, path, mode);
- }
- catch (HorizonResultException ex)
- {
- if (ResultFs.AesXtsFileHeaderInvalidKeys.Includes(ex.ResultValue))
- {
- Result rc = DeleteFile(path);
- if (rc.IsFailure()) return rc;
-
- return base.DoOpenFile(out file, path, mode);
- }
-
- throw;
- }
- }
- }
}