Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
UTF8Marshaler.cs
Go to the documentation of this file.
2using System.Text;
3
4namespace System.StubHelpers;
5
6internal static class UTF8Marshaler
7{
8 internal unsafe static IntPtr ConvertToNative(int flags, string strManaged, IntPtr pNativeBuffer)
9 {
10 if (strManaged == null)
11 {
12 return IntPtr.Zero;
13 }
14 byte* ptr = (byte*)(void*)pNativeBuffer;
15 int cbNativeBuffer;
16 if (ptr != null)
17 {
18 cbNativeBuffer = (strManaged.Length + 1) * 3;
19 cbNativeBuffer = strManaged.GetBytesFromEncoding(ptr, cbNativeBuffer, Encoding.UTF8);
20 }
21 else
22 {
23 cbNativeBuffer = Encoding.UTF8.GetByteCount(strManaged);
24 ptr = (byte*)(void*)Marshal.AllocCoTaskMem(cbNativeBuffer + 1);
25 strManaged.GetBytesFromEncoding(ptr, cbNativeBuffer, Encoding.UTF8);
26 }
27 ptr[cbNativeBuffer] = 0;
28 return (IntPtr)ptr;
29 }
30
31 internal unsafe static string ConvertToManaged(IntPtr cstr)
32 {
33 if (IntPtr.Zero == cstr)
34 {
35 return null;
36 }
37 byte* ptr = (byte*)(void*)cstr;
38 int byteLength = string.strlen(ptr);
39 return string.CreateStringFromEncoding(ptr, byteLength, Encoding.UTF8);
40 }
41
42 internal static void ClearNative(IntPtr pNative)
43 {
44 Marshal.FreeCoTaskMem(pNative);
45 }
46}
static void FreeCoTaskMem(IntPtr ptr)
Definition Marshal.cs:1712
static IntPtr AllocCoTaskMem(int cb)
Definition Marshal.cs:1702
static unsafe IntPtr ConvertToNative(int flags, string strManaged, IntPtr pNativeBuffer)
static unsafe string ConvertToManaged(IntPtr cstr)
static void ClearNative(IntPtr pNative)
static Encoding UTF8
Definition Encoding.cs:526
static readonly IntPtr Zero
Definition IntPtr.cs:18