42 lines
1.1 KiB
C#
42 lines
1.1 KiB
C#
using System;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.Runtime.InteropServices;
|
|
using JetBrains.Annotations;
|
|
|
|
namespace Foodsoft.Alpm.Marshalling
|
|
{
|
|
internal readonly struct UTF8In : ICustomMarshaler
|
|
{
|
|
private static readonly UTF8In _instance = default;
|
|
|
|
public void CleanUpManagedData(object managedObj) { }
|
|
|
|
public void CleanUpNativeData(IntPtr pNativeData)
|
|
{
|
|
if (pNativeData == IntPtr.Zero)
|
|
return;
|
|
Marshal.FreeCoTaskMem(pNativeData);
|
|
}
|
|
|
|
public int GetNativeDataSize()
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
public IntPtr MarshalManagedToNative(object? managedObj)
|
|
{
|
|
return Marshal.StringToCoTaskMemUTF8((string?) managedObj);
|
|
}
|
|
|
|
public object MarshalNativeToManaged(IntPtr pNativeData)
|
|
{
|
|
return Marshal.PtrToStringUTF8(pNativeData)!;
|
|
}
|
|
|
|
[UsedImplicitly]
|
|
private static ICustomMarshaler GetInstance(string cookie)
|
|
{
|
|
return _instance;
|
|
}
|
|
}
|
|
} |