aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/FileSystem
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/FileSystem
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/FileSystem')
-rw-r--r--Ryujinx.HLE/FileSystem/FileSystemProvider.cs30
-rw-r--r--Ryujinx.HLE/FileSystem/IFileSystemProvider.cs3
-rw-r--r--Ryujinx.HLE/FileSystem/PFsProvider.cs5
-rw-r--r--Ryujinx.HLE/FileSystem/RomFsProvider.cs5
4 files changed, 43 insertions, 0 deletions
diff --git a/Ryujinx.HLE/FileSystem/FileSystemProvider.cs b/Ryujinx.HLE/FileSystem/FileSystemProvider.cs
index a806c9ee..f5459eec 100644
--- a/Ryujinx.HLE/FileSystem/FileSystemProvider.cs
+++ b/Ryujinx.HLE/FileSystem/FileSystemProvider.cs
@@ -1,5 +1,6 @@
using Ryujinx.HLE.HOS;
using Ryujinx.HLE.HOS.Services.FspSrv;
+using Ryujinx.HLE.Utilities;
using System;
using System.Collections.Generic;
using System.IO;
@@ -279,5 +280,34 @@ namespace Ryujinx.HLE.FileSystem
throw new InvalidOperationException($"Path {path} is not a child directory of {_rootPath}");
}
+
+ public FileTimestamp GetFileTimeStampRaw(string name)
+ {
+ CheckIfDescendentOfRootPath(name);
+
+ DateTime creationDateTime = DateTime.UnixEpoch;
+ DateTime modifiedDateTime = DateTime.UnixEpoch;
+ DateTime lastAccessDateTime = DateTime.UnixEpoch;
+
+ if (File.Exists(name))
+ {
+ creationDateTime = File.GetCreationTime(name);
+ modifiedDateTime = File.GetLastWriteTime(name);
+ lastAccessDateTime = File.GetLastAccessTime(name);
+ }
+ else if (Directory.Exists(name))
+ {
+ creationDateTime = Directory.GetCreationTime(name);
+ modifiedDateTime = Directory.GetLastWriteTime(name);
+ lastAccessDateTime = Directory.GetLastAccessTime(name);
+ }
+
+ return new FileTimestamp
+ {
+ CreationDateTime = creationDateTime,
+ ModifiedDateTime = modifiedDateTime,
+ LastAccessDateTime = lastAccessDateTime
+ };
+ }
}
}
diff --git a/Ryujinx.HLE/FileSystem/IFileSystemProvider.cs b/Ryujinx.HLE/FileSystem/IFileSystemProvider.cs
index 8e2cae64..82cdebd9 100644
--- a/Ryujinx.HLE/FileSystem/IFileSystemProvider.cs
+++ b/Ryujinx.HLE/FileSystem/IFileSystemProvider.cs
@@ -1,5 +1,6 @@
using Ryujinx.HLE.HOS;
using Ryujinx.HLE.HOS.Services.FspSrv;
+using System;
namespace Ryujinx.HLE.FileSystem
{
@@ -36,5 +37,7 @@ namespace Ryujinx.HLE.FileSystem
long GetFreeSpace(ServiceCtx context);
long GetTotalSpace(ServiceCtx context);
+
+ FileTimestamp GetFileTimeStampRaw(string name);
}
}
diff --git a/Ryujinx.HLE/FileSystem/PFsProvider.cs b/Ryujinx.HLE/FileSystem/PFsProvider.cs
index fdddc9b0..69e7a9b8 100644
--- a/Ryujinx.HLE/FileSystem/PFsProvider.cs
+++ b/Ryujinx.HLE/FileSystem/PFsProvider.cs
@@ -143,5 +143,10 @@ namespace Ryujinx.HLE.FileSystem
{
throw new NotSupportedException();
}
+
+ public FileTimestamp GetFileTimeStampRaw(string name)
+ {
+ throw new NotImplementedException();
+ }
}
}
diff --git a/Ryujinx.HLE/FileSystem/RomFsProvider.cs b/Ryujinx.HLE/FileSystem/RomFsProvider.cs
index 86bf2348..f64d99c7 100644
--- a/Ryujinx.HLE/FileSystem/RomFsProvider.cs
+++ b/Ryujinx.HLE/FileSystem/RomFsProvider.cs
@@ -160,5 +160,10 @@ namespace Ryujinx.HLE.FileSystem
{
throw new NotSupportedException();
}
+
+ public FileTimestamp GetFileTimeStampRaw(string name)
+ {
+ throw new NotImplementedException();
+ }
}
}