aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Time/Clock
diff options
context:
space:
mode:
authorMary-nyan <mary@mary.zone>2022-11-24 15:26:29 +0100
committerGitHub <noreply@github.com>2022-11-24 15:26:29 +0100
commitf4e879a1e6ad810aa38c1c020467a2589441871b (patch)
tree274c6ee1f55129f01bbd28a6dcd92ce3f84237fb /Ryujinx.HLE/HOS/Services/Time/Clock
parenta1ddaa2736b188de928564af56aa787a25831ff7 (diff)
Reduce usage of Marshal.PtrToStructure and Marshal.StructureToPtr (#3805)
* common: Make BinaryReaderExtensions Read & Write take unamanged types This allows us to not rely on Marshal.PtrToStructure and Marshal.StructureToPtr for those. * common: Make MemoryHelper Read & Write takes unamanged types * Update Marshal.SizeOf => Unsafe.SizeOf when appropriate and start moving software applet to unmanaged types
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Time/Clock')
-rw-r--r--Ryujinx.HLE/HOS/Services/Time/Clock/Types/ClockSnapshot.cs13
1 files changed, 11 insertions, 2 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Time/Clock/Types/ClockSnapshot.cs b/Ryujinx.HLE/HOS/Services/Time/Clock/Types/ClockSnapshot.cs
index df1f151f..07c1b405 100644
--- a/Ryujinx.HLE/HOS/Services/Time/Clock/Types/ClockSnapshot.cs
+++ b/Ryujinx.HLE/HOS/Services/Time/Clock/Types/ClockSnapshot.cs
@@ -1,4 +1,5 @@
using Ryujinx.HLE.HOS.Services.Time.TimeZone;
+using System;
using System.Runtime.InteropServices;
namespace Ryujinx.HLE.HOS.Services.Time.Clock
@@ -16,14 +17,22 @@ namespace Ryujinx.HLE.HOS.Services.Time.Clock
public CalendarAdditionalInfo NetworkCalendarAdditionalTime;
public SteadyClockTimePoint SteadyClockTimePoint;
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x24)]
- public char[] LocationName;
+ private LocationNameStorageHolder _locationName;
+
+ public Span<byte> LocationName => MemoryMarshal.Cast<LocationNameStorageHolder, byte>(MemoryMarshal.CreateSpan(ref _locationName, LocationNameStorageHolder.Size));
[MarshalAs(UnmanagedType.I1)]
public bool IsAutomaticCorrectionEnabled;
public byte Type;
public ushort Unknown;
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1, Size = Size)]
+ private struct LocationNameStorageHolder
+ {
+ public const int Size = 0x24;
+ }
+
public static ResultCode GetCurrentTime(out long currentTime, SteadyClockTimePoint steadyClockTimePoint, SystemClockContext context)
{
currentTime = 0;