aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Applets/Controller
diff options
context:
space:
mode:
authorMary <me@thog.eu>2021-11-01 23:38:13 +0100
committerGitHub <noreply@github.com>2021-11-01 19:38:13 -0300
commitf41687f4c1948e9e111afd70e979e98ea5de52fa (patch)
treee7e34e4f8a986c7165cb3eb2fb3e216329d1c04d /Ryujinx.HLE/HOS/Applets/Controller
parente48530e9d9f0bbaeb8fa5978d1a66c99e6fecbac (diff)
hle: Make Ryujinx.HLE project entirely safe (#2789)
* Remove a bit of unsafety around * Regenerate StructArrayHelpers with a max element value of 256 * hle: remove unsafe marker from all struct that had it * hle: make SoftwareKeyboardRenderer.TryCopyTo safe * hle: remove unsafety in NpadDevice and remove AllowUnsafeBlocks from csproj * Revert "Regenerate StructArrayHelpers with a max element value of 256" This reverts commit f32a6e5be094f50571970eb1116b65c080781d05. * Introduce ByteArray of various size and use that instead of ArrayXXX to avoid stackoverflow in .NET runtime type resolution * Use ByteArray more * Add some missing spaces on Pack = 1 for various structs * Fix broken logic for TryCopyTo * Address gdkchan's comment * Address gdkchan's comment
Diffstat (limited to 'Ryujinx.HLE/HOS/Applets/Controller')
-rw-r--r--Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs3
-rw-r--r--Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgHeader.cs2
-rw-r--r--Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgV7.cs18
-rw-r--r--Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgVPre7.cs18
-rw-r--r--Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportResultInfo.cs7
5 files changed, 34 insertions, 14 deletions
diff --git a/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs b/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs
index 0597cf9b..1e8e26df 100644
--- a/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs
+++ b/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs
@@ -24,8 +24,7 @@ namespace Ryujinx.HLE.HOS.Applets
_system = system;
}
- unsafe public ResultCode Start(AppletSession normalSession,
- AppletSession interactiveSession)
+ public ResultCode Start(AppletSession normalSession, AppletSession interactiveSession)
{
_normalSession = normalSession;
diff --git a/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgHeader.cs b/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgHeader.cs
index 8eaf1d44..141994a8 100644
--- a/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgHeader.cs
+++ b/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgHeader.cs
@@ -3,7 +3,7 @@ using System.Runtime.InteropServices;
namespace Ryujinx.HLE.HOS.Applets
{
#pragma warning disable CS0649
- [StructLayout(LayoutKind.Sequential, Pack=1)]
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
struct ControllerSupportArgHeader
{
public sbyte PlayerCountMin;
diff --git a/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgV7.cs b/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgV7.cs
index a01e7c04..efb95ea5 100644
--- a/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgV7.cs
+++ b/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgV7.cs
@@ -1,16 +1,26 @@
+using Ryujinx.Common.Memory;
+using System;
using System.Runtime.InteropServices;
namespace Ryujinx.HLE.HOS.Applets
{
#pragma warning disable CS0649
// (8.0.0+ version)
- [StructLayout(LayoutKind.Sequential, Pack=1)]
- unsafe struct ControllerSupportArgV7
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ControllerSupportArgV7
{
public ControllerSupportArgHeader Header;
- public fixed uint IdentificationColor[8];
+ public Array8<uint> IdentificationColor;
public byte EnableExplainText;
- public fixed byte ExplainText[8 * 0x81];
+ public ExplainTextStruct ExplainText;
+
+ [StructLayout(LayoutKind.Sequential, Size = 8 * 0x81)]
+ public struct ExplainTextStruct
+ {
+ private byte element;
+
+ public Span<byte> ToSpan() => MemoryMarshal.CreateSpan(ref element, 8 * 0x81);
+ }
}
#pragma warning restore CS0649
} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgVPre7.cs b/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgVPre7.cs
index 6d46aea5..ec977009 100644
--- a/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgVPre7.cs
+++ b/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportArgVPre7.cs
@@ -1,16 +1,26 @@
+using Ryujinx.Common.Memory;
+using System;
using System.Runtime.InteropServices;
namespace Ryujinx.HLE.HOS.Applets
{
#pragma warning disable CS0649
// (1.0.0+ version)
- [StructLayout(LayoutKind.Sequential, Pack=1)]
- unsafe struct ControllerSupportArgVPre7
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ControllerSupportArgVPre7
{
public ControllerSupportArgHeader Header;
- public fixed uint IdentificationColor[4];
+ public Array4<uint> IdentificationColor;
public byte EnableExplainText;
- public fixed byte ExplainText[4 * 0x81];
+ public ExplainTextStruct ExplainText;
+
+ [StructLayout(LayoutKind.Sequential, Size = 4 * 0x81)]
+ public struct ExplainTextStruct
+ {
+ private byte element;
+
+ public Span<byte> ToSpan() => MemoryMarshal.CreateSpan(ref element, 4 * 0x81);
+ }
}
#pragma warning restore CS0649
} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportResultInfo.cs b/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportResultInfo.cs
index c213e592..689a54de 100644
--- a/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportResultInfo.cs
+++ b/Ryujinx.HLE/HOS/Applets/Controller/ControllerSupportResultInfo.cs
@@ -1,13 +1,14 @@
+using Ryujinx.Common.Memory;
using System.Runtime.InteropServices;
namespace Ryujinx.HLE.HOS.Applets
{
#pragma warning disable CS0649
- [StructLayout(LayoutKind.Sequential, Pack=1)]
- unsafe struct ControllerSupportResultInfo
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ struct ControllerSupportResultInfo
{
public sbyte PlayerCount;
- fixed byte _padding[3];
+ private Array3<byte> _padding;
public uint SelectedId;
public uint Result;
}