aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs
diff options
context:
space:
mode:
authorAlex Barney <thealexbarney@gmail.com>2020-01-05 04:49:44 -0700
committerThog <me@thog.eu>2020-01-05 12:49:44 +0100
commit63b24b4af2804f173764c98586a19c39db04ad4d (patch)
tree7994f00e4bc06edc430004a7caa1bdf0231b2668 /Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs
parente0e12b1672e49ab5810bf88bf8274990605ed67a (diff)
Rename "RyuFs" directory to "Ryujinx" and use the same savedata system the Switch uses (#801)
* Use savedata FS commands from LibHac * Add EnsureSaveData. Use ApplicationControlProperty struct * Add a function to migrate to the new directory layout * LibHac update * Change backup structure * Don't create UI files in the save path * Update RyuFs paths * Add GetProgramIndexForAccessLog Ryujinx only runs one program at a time, so always return values reflecting that * Load control NCA when loading from an NSP * Skip over UI stats when exiting * Set TitleName and TitleId in more cases. Fix TitleID naming style * Completely comment out GUI play stats code * rebase * Update LibHac * Update LibHac * Revert UI changes * Do migration automatically at startup * Rename RyuFs directory to Ryujinx * Update RyuFs text * Store savedata paths in the GUI * Make "Open Save Directory" work * Use a dummy NACP in EnsureSaveData if one is not loaded * Remove manual migration button * Respond to feedback * Don't read the installer config to get a version string * Delete nuget.config * Exclude 'sdcard' and 'bis' during migration Co-authored-by: Thog <thog@protonmail.com>
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs')
-rw-r--r--Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs52
1 files changed, 10 insertions, 42 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs b/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs
index 2b0f06dd..1dd5fb86 100644
--- a/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs
+++ b/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/FileSystemProxyHelper.cs
@@ -3,54 +3,12 @@ using LibHac.Fs;
using LibHac.FsSystem;
using LibHac.FsSystem.NcaUtils;
using LibHac.Spl;
-using Ryujinx.Common;
-using Ryujinx.HLE.FileSystem;
-using Ryujinx.HLE.Utilities;
using System.IO;
namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
{
static class FileSystemProxyHelper
{
- public static ResultCode LoadSaveDataFileSystem(ServiceCtx context, bool readOnly, out IFileSystem loadedFileSystem)
- {
- loadedFileSystem = null;
-
- SaveSpaceId saveSpaceId = (SaveSpaceId)context.RequestData.ReadInt64();
- ulong titleId = context.RequestData.ReadUInt64();
- UInt128 userId = context.RequestData.ReadStruct<UInt128>();
- long saveId = context.RequestData.ReadInt64();
- SaveDataType saveDataType = (SaveDataType)context.RequestData.ReadByte();
- SaveInfo saveInfo = new SaveInfo(titleId, saveId, saveDataType, saveSpaceId, userId);
- string savePath = context.Device.FileSystem.GetSavePath(context, saveInfo);
-
- try
- {
- LocalFileSystem fileSystem = new LocalFileSystem(savePath);
-
- Result result = DirectorySaveDataFileSystem.CreateNew(out DirectorySaveDataFileSystem dirFileSystem, fileSystem);
- if (result.IsFailure())
- {
- return (ResultCode)result.Value;
- }
-
- LibHac.Fs.IFileSystem saveFileSystem = dirFileSystem;
-
- if (readOnly)
- {
- saveFileSystem = new ReadOnlyFileSystem(saveFileSystem);
- }
-
- loadedFileSystem = new IFileSystem(saveFileSystem);
- }
- catch (HorizonResultException ex)
- {
- return (ResultCode)ex.ResultValue.Value;
- }
-
- return ResultCode.Success;
- }
-
public static ResultCode OpenNsp(ServiceCtx context, string pfsPath, out IFileSystem openedFileSystem)
{
openedFileSystem = null;
@@ -154,5 +112,15 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy
}
}
}
+
+ public static Result ReadFsPath(out FsPath path, ServiceCtx context, int index = 0)
+ {
+ long position = context.Request.SendBuff[index].Position;
+ long size = context.Request.SendBuff[index].Size;
+
+ byte[] pathBytes = context.Memory.ReadBytes(position, size);
+
+ return FsPath.FromSpan(out path, pathBytes);
+ }
}
}