aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/FspSrv/IFileSystem.cs
diff options
context:
space:
mode:
authorThomas Guillemard <thog@protonmail.com>2019-02-14 01:44:39 +0100
committerjduncanator <1518948+jduncanator@users.noreply.github.com>2019-02-14 11:44:39 +1100
commitb126ea48c63a3de8da8f3b817860c0323f2621ef (patch)
treeeb58d7b31719050da390e2b79824d6e931b85da8 /Ryujinx.HLE/HOS/Services/FspSrv/IFileSystem.cs
parent7e9f5555747315d142e1ae20266cb581647db0cd (diff)
Support HomeBrew Loader (#577)
* Make it possibles to load hb-loader and hb-menu One issue remains with hb-menu homebrew icons because of SIMD issues (libjpeg-turbo related) and netloader doesn't work. * Implement GetApplicationControlData * Fix shared fonts for NSO/NRO * Add homebrew NRO romfs support This readd the NRO support by parsing the ASET header * Address comments about HomebrewRomFs * override Dispose in homebrew romfs stream * Use a struct for file timestamp * Simplify positional increments in GetApplicationControlData * Address comments * improve readability of the memory permission check in SetProcessMemoryPermission * Fix previous broken check * Add address space checks in SetProcessMemoryPermission
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/FspSrv/IFileSystem.cs')
-rw-r--r--Ryujinx.HLE/HOS/Services/FspSrv/IFileSystem.cs32
1 files changed, 30 insertions, 2 deletions
diff --git a/Ryujinx.HLE/HOS/Services/FspSrv/IFileSystem.cs b/Ryujinx.HLE/HOS/Services/FspSrv/IFileSystem.cs
index 9e294460..bcb9dbaf 100644
--- a/Ryujinx.HLE/HOS/Services/FspSrv/IFileSystem.cs
+++ b/Ryujinx.HLE/HOS/Services/FspSrv/IFileSystem.cs
@@ -38,8 +38,8 @@ namespace Ryujinx.HLE.HOS.Services.FspSrv
{ 10, Commit },
{ 11, GetFreeSpaceSize },
{ 12, GetTotalSpaceSize },
- { 13, CleanDirectoryRecursively }
- //{ 14, GetFileTimeStampRaw }
+ { 13, CleanDirectoryRecursively },
+ { 14, GetFileTimeStampRaw }
};
_openPaths = new HashSet<string>();
@@ -368,6 +368,34 @@ namespace Ryujinx.HLE.HOS.Services.FspSrv
return 0;
}
+ // GetFileTimeStampRaw(buffer<bytes<0x301>, 0x19, 0x301> path) -> bytes<0x20> timestamp
+ public long GetFileTimeStampRaw(ServiceCtx context)
+ {
+ string name = ReadUtf8String(context);
+
+ string path = _provider.GetFullPath(name);
+
+ if (_provider.FileExists(path) || _provider.DirectoryExists(path))
+ {
+ FileTimestamp timestamp = _provider.GetFileTimeStampRaw(path);
+
+ context.ResponseData.Write(new DateTimeOffset(timestamp.CreationDateTime).ToUnixTimeSeconds());
+ context.ResponseData.Write(new DateTimeOffset(timestamp.ModifiedDateTime).ToUnixTimeSeconds());
+ context.ResponseData.Write(new DateTimeOffset(timestamp.LastAccessDateTime).ToUnixTimeSeconds());
+
+ byte[] data = new byte[8];
+
+ // is valid?
+ data[0] = 1;
+
+ context.ResponseData.Write(data);
+
+ return 0;
+ }
+
+ return MakeError(ErrorModule.Fs, FsErr.PathDoesNotExist);
+ }
+
private bool IsPathAlreadyInUse(string path)
{
lock (_openPaths)