From 208ba1dde2b9a4d31446ace2bba8f0d641d2e300 Mon Sep 17 00:00:00 2001 From: Mary <1760003+Thog@users.noreply.github.com> Date: Tue, 13 Jul 2021 16:48:54 +0200 Subject: Revert LibHac update Users are facing save destruction on failing extra data update apparently --- Ryujinx.HLE/FileSystem/SaveHelper.cs | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Ryujinx.HLE/FileSystem/SaveHelper.cs (limited to 'Ryujinx.HLE/FileSystem/SaveHelper.cs') diff --git a/Ryujinx.HLE/FileSystem/SaveHelper.cs b/Ryujinx.HLE/FileSystem/SaveHelper.cs new file mode 100644 index 00000000..51a25515 --- /dev/null +++ b/Ryujinx.HLE/FileSystem/SaveHelper.cs @@ -0,0 +1,45 @@ +using LibHac.Fs.Fsa; +using LibHac.FsSystem; +using Ryujinx.HLE.HOS; +using System.IO; + +namespace Ryujinx.HLE.FileSystem +{ + static class SaveHelper + { + public static IFileSystem OpenSystemSaveData(ServiceCtx context, ulong saveId) + { + SaveInfo saveInfo = new SaveInfo(0, (long)saveId, SaveDataType.SystemSaveData, SaveSpaceId.NandSystem); + string savePath = context.Device.FileSystem.GetSavePath(context, saveInfo, false); + + if (File.Exists(savePath)) + { + string tempDirectoryPath = $"{savePath}_temp"; + + Directory.CreateDirectory(tempDirectoryPath); + + IFileSystem outputFolder = new LocalFileSystem(tempDirectoryPath); + + using (LocalStorage systemSaveData = new LocalStorage(savePath, FileAccess.Read, FileMode.Open)) + { + IFileSystem saveFs = new LibHac.FsSystem.Save.SaveDataFileSystem(context.Device.System.KeySet, systemSaveData, IntegrityCheckLevel.None, false); + + saveFs.CopyDirectory(outputFolder, "/", "/"); + } + + File.Delete(savePath); + + Directory.Move(tempDirectoryPath, savePath); + } + else + { + if (!Directory.Exists(savePath)) + { + Directory.CreateDirectory(savePath); + } + } + + return new LocalFileSystem(savePath); + } + } +} \ No newline at end of file -- cgit v1.2.3