diff --git a/lib/runtime-c-api/src/lib.rs b/lib/runtime-c-api/src/lib.rs index 7dddd7ef7..74b6fa6c7 100644 --- a/lib/runtime-c-api/src/lib.rs +++ b/lib/runtime-c-api/src/lib.rs @@ -428,8 +428,16 @@ pub unsafe extern "C" fn wasmer_imports_set_import_func( // }; } +#[allow(clippy::cast_ptr_alignment)] #[no_mangle] -pub extern "C" fn wasmer_instance_context_memory(instance: *mut wasmer_instance_context_t) {} +pub extern "C" fn wasmer_instance_context_memory( + ctx: *mut wasmer_instance_context_t, + memory_idx: uint32_t, +) -> *const wasmer_memory_t { + let mut ctx = unsafe { Box::from_raw(ctx as *mut Ctx) }; + let memory = ctx.memory(0); + memory as *const Memory as *const wasmer_memory_t +} #[allow(clippy::cast_ptr_alignment)] #[no_mangle] diff --git a/lib/runtime-c-api/tests/test-import-function.c b/lib/runtime-c-api/tests/test-import-function.c index c6d723664..8f4deeb13 100644 --- a/lib/runtime-c-api/tests/test-import-function.c +++ b/lib/runtime-c-api/tests/test-import-function.c @@ -4,10 +4,14 @@ #include static print_str_called = false; +static memory_len = 0; void print_str(int32_t ptr, int32_t len, wasmer_instance_context_t *ctx) { - printf("In print_str\n"); + wasmer_memory_t *memory = wasmer_instance_context_memory(ctx, 0); + uint32_t mem_len = wasmer_memory_length(memory); + printf("In print_str, memory len: %d\n", mem_len); print_str_called = true; + memory_len = mem_len; } int main() @@ -38,7 +42,7 @@ int main() assert(call_result == WASMER_CALL_OK); assert(print_str_called); - + assert(memory_len == 17); printf("Destroy instance\n"); wasmer_instance_destroy(instance); diff --git a/lib/runtime-c-api/wasmer.h b/lib/runtime-c-api/wasmer.h index 99fd96def..39ff3f0c6 100644 --- a/lib/runtime-c-api/wasmer.h +++ b/lib/runtime-c-api/wasmer.h @@ -104,7 +104,8 @@ wasmer_call_result_t wasmer_instance_call(wasmer_instance_t *instance, wasmer_value_t *results, int results_len); -void wasmer_instance_context_memory(wasmer_instance_context_t *instance); +const wasmer_memory_t *wasmer_instance_context_memory(wasmer_instance_context_t *ctx, + uint32_t memory_idx); void wasmer_instance_destroy(wasmer_instance_t *instance); diff --git a/lib/runtime-c-api/wasmer.hh b/lib/runtime-c-api/wasmer.hh index 4c1134a5c..12b0ecebb 100644 --- a/lib/runtime-c-api/wasmer.hh +++ b/lib/runtime-c-api/wasmer.hh @@ -104,7 +104,8 @@ wasmer_call_result_t wasmer_instance_call(wasmer_instance_t *instance, wasmer_value_t *results, int results_len); -void wasmer_instance_context_memory(wasmer_instance_context_t *instance); +const wasmer_memory_t *wasmer_instance_context_memory(wasmer_instance_context_t *ctx, + uint32_t memory_idx); void wasmer_instance_destroy(wasmer_instance_t *instance);