diff options
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/SurfaceFlinger/Parcel.cs')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/SurfaceFlinger/Parcel.cs | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Ryujinx.HLE/HOS/Services/SurfaceFlinger/Parcel.cs b/Ryujinx.HLE/HOS/Services/SurfaceFlinger/Parcel.cs new file mode 100644 index 00000000..f5d93423 --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/SurfaceFlinger/Parcel.cs @@ -0,0 +1,58 @@ +using System; +using System.IO; + +namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger +{ + static class Parcel + { + public static byte[] GetParcelData(byte[] parcel) + { + if (parcel == null) + { + throw new ArgumentNullException(nameof(parcel)); + } + + using (MemoryStream ms = new MemoryStream(parcel)) + { + BinaryReader reader = new BinaryReader(ms); + + int dataSize = reader.ReadInt32(); + int dataOffset = reader.ReadInt32(); + int objsSize = reader.ReadInt32(); + int objsOffset = reader.ReadInt32(); + + ms.Seek(dataOffset - 0x10, SeekOrigin.Current); + + return reader.ReadBytes(dataSize); + } + } + + public static byte[] MakeParcel(byte[] data, byte[] objs) + { + if (data == null) + { + throw new ArgumentNullException(nameof(data)); + } + + if (objs == null) + { + throw new ArgumentNullException(nameof(objs)); + } + + using (MemoryStream ms = new MemoryStream()) + { + BinaryWriter writer = new BinaryWriter(ms); + + writer.Write(data.Length); + writer.Write(0x10); + writer.Write(objs.Length); + writer.Write(data.Length + 0x10); + + writer.Write(data); + writer.Write(objs); + + return ms.ToArray(); + } + } + } +}
\ No newline at end of file |
