Implement WASI C API.
This commit implements an initial WASI C API that can be used to instantiate and configure a WASI instance from C. This also implements a `WasiBuilder` for the C# API enabling .NET hosts to bind to Wasmtime's WASI implementation.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
namespace Wasmtime
|
||||
{
|
||||
@@ -10,6 +11,8 @@ namespace Wasmtime
|
||||
/// <remarks>See https://github.com/WebAssembly/wasm-c-api/blob/master/include/wasm.h for the C API reference.</remarks>
|
||||
internal static class Interop
|
||||
{
|
||||
const string LibraryName = "wasmtime";
|
||||
|
||||
internal class EngineHandle : SafeHandle
|
||||
{
|
||||
public EngineHandle() : base(IntPtr.Zero, true)
|
||||
@@ -61,6 +64,8 @@ namespace Wasmtime
|
||||
{
|
||||
}
|
||||
|
||||
public WasmFuncCallback Callback { get; set; } = null;
|
||||
|
||||
public override bool IsInvalid => handle == IntPtr.Zero;
|
||||
|
||||
protected override bool ReleaseHandle()
|
||||
@@ -175,6 +180,51 @@ namespace Wasmtime
|
||||
}
|
||||
}
|
||||
|
||||
internal class WasiConfigHandle : SafeHandle
|
||||
{
|
||||
public WasiConfigHandle() : base(IntPtr.Zero, true)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvalid => handle == IntPtr.Zero;
|
||||
|
||||
protected override bool ReleaseHandle()
|
||||
{
|
||||
Interop.wasi_config_delete(handle);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
internal class WasiInstanceHandle : SafeHandle
|
||||
{
|
||||
public WasiInstanceHandle() : base(IntPtr.Zero, true)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvalid => handle == IntPtr.Zero;
|
||||
|
||||
protected override bool ReleaseHandle()
|
||||
{
|
||||
Interop.wasi_instance_delete(handle);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
internal class WasiExportHandle : SafeHandle
|
||||
{
|
||||
public WasiExportHandle(IntPtr handle) : base(IntPtr.Zero, false /* not owned */)
|
||||
{
|
||||
SetHandle(handle);
|
||||
}
|
||||
|
||||
public override bool IsInvalid => handle == IntPtr.Zero;
|
||||
|
||||
protected override bool ReleaseHandle()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal unsafe struct wasm_byte_vec_t
|
||||
{
|
||||
@@ -440,323 +490,419 @@ namespace Wasmtime
|
||||
return vec;
|
||||
}
|
||||
|
||||
internal static unsafe (byte*[], GCHandle[]) ToUTF8PtrArray(IList<string> strings)
|
||||
{
|
||||
// Unfortunately .NET cannot currently marshal string[] as UTF-8
|
||||
// See: https://github.com/dotnet/runtime/issues/7315
|
||||
// Therefore, we need to marshal the strings manually
|
||||
var handles = new GCHandle[strings.Count];
|
||||
for (int i = 0; i < strings.Count; ++i)
|
||||
{
|
||||
handles[i] = GCHandle.Alloc(
|
||||
Encoding.UTF8.GetBytes(strings[i]),
|
||||
GCHandleType.Pinned
|
||||
);
|
||||
}
|
||||
|
||||
var ptrs = new byte*[strings.Count];
|
||||
for (int i = 0; i < strings.Count; ++i)
|
||||
{
|
||||
ptrs[i] = (byte*)handles[i].AddrOfPinnedObject();
|
||||
}
|
||||
|
||||
return (ptrs, handles);
|
||||
}
|
||||
|
||||
// Engine imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern EngineHandle wasm_engine_new();
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_engine_delete(IntPtr engine);
|
||||
|
||||
// Store imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern StoreHandle wasm_store_new(EngineHandle engine);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_store_delete(IntPtr engine);
|
||||
|
||||
// Byte vec imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_byte_vec_new_empty(out wasm_byte_vec_t vec);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_byte_vec_new_uninitialized(out wasm_byte_vec_t vec, UIntPtr length);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_byte_vec_new(out wasm_byte_vec_t vec, UIntPtr length, byte[] data);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_byte_vec_copy(out wasm_byte_vec_t vec, ref wasm_byte_vec_t src);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_byte_vec_delete(ref wasm_byte_vec_t vec);
|
||||
|
||||
// Value type vec imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_valtype_vec_new_empty(out wasm_valtype_vec_t vec);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_valtype_vec_new_uninitialized(out wasm_valtype_vec_t vec, UIntPtr length);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_valtype_vec_new(out wasm_valtype_vec_t vec, UIntPtr length, IntPtr[] data);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_valtype_vec_copy(out wasm_valtype_vec_t vec, ref wasm_valtype_vec_t src);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_valtype_vec_delete(ref wasm_valtype_vec_t vec);
|
||||
|
||||
// Extern vec imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_extern_vec_new_empty(out wasm_extern_vec_t vec);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_extern_vec_new_uninitialized(out wasm_extern_vec_t vec, UIntPtr length);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_extern_vec_new(out wasm_extern_vec_t vec, UIntPtr length, IntPtr[] data);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_extern_vec_copy(out wasm_extern_vec_t vec, ref wasm_extern_vec_t src);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_extern_vec_delete(ref wasm_extern_vec_t vec);
|
||||
|
||||
// Import type vec imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_importtype_vec_new_empty(out wasm_importtype_vec_t vec);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_importtype_vec_new_uninitialized(out wasm_importtype_vec_t vec, UIntPtr length);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_importtype_vec_new(out wasm_importtype_vec_t vec, UIntPtr length, IntPtr[] data);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_importtype_vec_copy(out wasm_importtype_vec_t vec, ref wasm_importtype_vec_t src);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_importtype_vec_delete(ref wasm_importtype_vec_t vec);
|
||||
|
||||
// Export type vec imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_exporttype_vec_new_empty(out wasm_exporttype_vec_t vec);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_exporttype_vec_new_uninitialized(out wasm_exporttype_vec_t vec, UIntPtr length);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_exporttype_vec_new(out wasm_exporttype_vec_t vec, UIntPtr length, IntPtr[] data);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_exporttype_vec_copy(out wasm_exporttype_vec_t vec, ref wasm_exporttype_vec_t src);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_exporttype_vec_delete(ref wasm_exporttype_vec_t vec);
|
||||
|
||||
// Import type imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern unsafe wasm_byte_vec_t* wasm_importtype_module(IntPtr importType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern unsafe wasm_byte_vec_t* wasm_importtype_name(IntPtr importType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern unsafe IntPtr wasm_importtype_type(IntPtr importType);
|
||||
|
||||
// Export type imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern unsafe wasm_byte_vec_t* wasm_exporttype_name(IntPtr exportType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern unsafe IntPtr wasm_exporttype_type(IntPtr exportType);
|
||||
|
||||
// Module imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern ModuleHandle wasm_module_new(StoreHandle store, ref wasm_byte_vec_t bytes);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_module_imports(ModuleHandle module, out wasm_importtype_vec_t imports);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_module_exports(ModuleHandle module, out wasm_exporttype_vec_t exports);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_module_delete(IntPtr module);
|
||||
|
||||
// Value type imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern ValueTypeHandle wasm_valtype_new(wasm_valkind_t kind);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_valtype_delete(IntPtr valueType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern ValueKind wasm_valtype_kind(IntPtr valueType);
|
||||
|
||||
// Extern imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern wasm_externkind_t wasm_extern_kind(IntPtr ext);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_extern_type(IntPtr ext);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_extern_as_func(IntPtr ext);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_extern_as_global(IntPtr ext);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_extern_as_table(IntPtr ext);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_extern_as_memory(IntPtr ext);
|
||||
|
||||
// Extern type imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern wasm_externkind_t wasm_externtype_kind(IntPtr externType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_externtype_as_functype_const(IntPtr externType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_externtype_as_globaltype_const(IntPtr externType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_externtype_as_tabletype_const(IntPtr externType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_externtype_as_memorytype_const(IntPtr externType);
|
||||
|
||||
// Function imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern FunctionHandle wasm_func_new(StoreHandle store, FuncTypeHandle type, WasmFuncCallback callback);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_func_delete(IntPtr function);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static unsafe extern IntPtr wasm_func_call(IntPtr function, wasm_val_t* args, wasm_val_t* results);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_func_as_extern(FunctionHandle function);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_global_as_extern(GlobalHandle global);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_memory_as_extern(MemoryHandle memory);
|
||||
|
||||
// Function type imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern unsafe wasm_valtype_vec_t* wasm_functype_params(IntPtr funcType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern unsafe wasm_valtype_vec_t* wasm_functype_results(IntPtr funcType);
|
||||
|
||||
// Instance imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern unsafe InstanceHandle wasm_instance_new(StoreHandle store, ModuleHandle module, IntPtr[] imports, out IntPtr trap);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_instance_delete(IntPtr ext);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_instance_exports(InstanceHandle instance, out wasm_extern_vec_t exports);
|
||||
|
||||
// Function type imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern FuncTypeHandle wasm_functype_new(ref wasm_valtype_vec_t parameters, ref wasm_valtype_vec_t results);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_functype_delete(IntPtr functype);
|
||||
|
||||
// Global type imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern GlobalTypeHandle wasm_globaltype_new(IntPtr valueType, wasm_mutability_t mutability);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_globaltype_delete(IntPtr globalType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_globaltype_content(IntPtr globalType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern wasm_mutability_t wasm_globaltype_mutability(IntPtr globalType);
|
||||
|
||||
// Memory type imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern unsafe MemoryTypeHandle wasm_memorytype_new(wasm_limits_t* limits);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_memorytype_delete(IntPtr memoryType);
|
||||
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern unsafe wasm_limits_t* wasm_memorytype_limits(MemoryTypeHandle memoryType);
|
||||
|
||||
// Trap imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_trap_new(StoreHandle store, ref wasm_byte_vec_t message);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_trap_delete(IntPtr trap);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_trap_message(IntPtr trap, out wasm_byte_vec_t message);
|
||||
|
||||
// Table type imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_tabletype_element(IntPtr tableType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static unsafe extern wasm_limits_t* wasm_tabletype_limits(IntPtr tableType);
|
||||
|
||||
// Memory type imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static unsafe extern wasm_limits_t* wasm_memorytype_limits(IntPtr memoryType);
|
||||
|
||||
// Global imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static unsafe extern GlobalHandle wasm_global_new(StoreHandle handle, GlobalTypeHandle globalType, wasm_val_t* initialValue);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_global_delete(IntPtr global);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_global_type(IntPtr global);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static unsafe extern void wasm_global_get(IntPtr global, wasm_val_t* value);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static unsafe extern void wasm_global_set(IntPtr global, wasm_val_t* value);
|
||||
|
||||
// Memory imports
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern MemoryHandle wasm_memory_new(StoreHandle handle, MemoryTypeHandle memoryType);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasm_memory_delete(IntPtr memory);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasm_memory_type(MemoryHandle memory);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static unsafe extern byte* wasm_memory_data(IntPtr memory);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern UIntPtr wasm_memory_data_size(IntPtr memory);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern uint wasm_memory_size(MemoryHandle memory);
|
||||
|
||||
[DllImport("wasmtime")]
|
||||
[DllImport(LibraryName)]
|
||||
public static extern bool wasm_memory_grow(MemoryHandle memory, uint delta);
|
||||
|
||||
// WASI config
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern WasiConfigHandle wasi_config_new();
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasi_config_delete(IntPtr config);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public unsafe static extern void wasi_config_set_argv(WasiConfigHandle config, int argc, byte*[] argv);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasi_config_inherit_argv(WasiConfigHandle config);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern unsafe void wasi_config_set_env(
|
||||
WasiConfigHandle config,
|
||||
int envc,
|
||||
byte*[] names,
|
||||
byte*[] values
|
||||
);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasi_config_inherit_env(WasiConfigHandle config);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern bool wasi_config_set_stdin(
|
||||
WasiConfigHandle config,
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)] string path
|
||||
);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasi_config_inherit_stdin(WasiConfigHandle config);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern bool wasi_config_set_stdout(
|
||||
WasiConfigHandle config,
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)] string path
|
||||
);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasi_config_inherit_stdout(WasiConfigHandle config);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern bool wasi_config_set_stderr(
|
||||
WasiConfigHandle config,
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)] string path
|
||||
);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasi_config_inherit_stderr(WasiConfigHandle config);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern bool wasi_config_preopen_dir(
|
||||
WasiConfigHandle config,
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)] string path,
|
||||
[MarshalAs(UnmanagedType.LPUTF8Str)] string guestPath
|
||||
);
|
||||
|
||||
// WASI instance
|
||||
[DllImport(LibraryName)]
|
||||
public static extern WasiInstanceHandle wasi_instance_new(
|
||||
StoreHandle store,
|
||||
WasiConfigHandle config,
|
||||
out IntPtr trap
|
||||
);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern void wasi_instance_delete(IntPtr instance);
|
||||
|
||||
[DllImport(LibraryName)]
|
||||
public static extern IntPtr wasi_instance_bind_import(WasiInstanceHandle instance, IntPtr importType);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user