aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Guillemard <thog@protonmail.com>2019-06-27 13:11:51 +0200
committerAc_K <Acoustik666@gmail.com>2019-06-27 13:11:51 +0200
commitdb21621bb681ee6d85f81fd04d7ea286b0742ca7 (patch)
tree074d7c89032cc7775d2ec04679a3cdc78a9d2735
parent3db9daa3bda5053fdbda248263f0b8fa46bdba0d (diff)
PrntStub: Add a way to print arrays (#711)
* PrntStub: Add a way to print arrays This commit adds support for printing arrays in stubs (useful for IPC InBuffer/InPointer). This also add an util to parse an array of structure from a BinaryReader * Fix missing space Co-Authored-By: Ac_K <Acoustik666@gmail.com>
-rw-r--r--Ryujinx.Common/Extensions/BinaryReaderExtensions.cs20
-rw-r--r--Ryujinx.Common/Logging/Formatters/DefaultLogFormatter.cs21
2 files changed, 39 insertions, 2 deletions
diff --git a/Ryujinx.Common/Extensions/BinaryReaderExtensions.cs b/Ryujinx.Common/Extensions/BinaryReaderExtensions.cs
index 49af946f..05c77fe9 100644
--- a/Ryujinx.Common/Extensions/BinaryReaderExtensions.cs
+++ b/Ryujinx.Common/Extensions/BinaryReaderExtensions.cs
@@ -19,6 +19,26 @@ namespace Ryujinx.Common
}
}
+ public unsafe static T[] ReadStructArray<T>(this BinaryReader reader, int count)
+ where T : struct
+ {
+ int size = Marshal.SizeOf<T>();
+
+ T[] result = new T[count];
+
+ for (int i = 0; i < count; i++)
+ {
+ byte[] data = reader.ReadBytes(size);
+
+ fixed (byte* ptr = data)
+ {
+ result[i] = Marshal.PtrToStructure<T>((IntPtr)ptr);
+ }
+ }
+
+ return result;
+ }
+
public unsafe static void WriteStruct<T>(this BinaryWriter writer, T value)
where T : struct
{
diff --git a/Ryujinx.Common/Logging/Formatters/DefaultLogFormatter.cs b/Ryujinx.Common/Logging/Formatters/DefaultLogFormatter.cs
index 0c4396e7..c6605e0e 100644
--- a/Ryujinx.Common/Logging/Formatters/DefaultLogFormatter.cs
+++ b/Ryujinx.Common/Logging/Formatters/DefaultLogFormatter.cs
@@ -1,4 +1,5 @@
-using System.Reflection;
+using System;
+using System.Reflection;
using System.Text;
namespace Ryujinx.Common.Logging
@@ -31,7 +32,23 @@ namespace Ryujinx.Common.Logging
{
sb.Append(prop.Name);
sb.Append(": ");
- sb.Append(prop.GetValue(args.Data));
+
+ if (typeof(Array).IsAssignableFrom(prop.PropertyType))
+ {
+ Array enumerable = (Array)prop.GetValue(args.Data);
+ foreach (var item in enumerable)
+ {
+ sb.Append(item.ToString());
+ sb.Append(", ");
+ }
+
+ sb.Remove(sb.Length - 2, 2);
+ }
+ else
+ {
+ sb.Append(prop.GetValue(args.Data));
+ }
+
sb.Append(" - ");
}