mirror of
https://github.com/fluencelabs/wasmer
synced 2025-06-23 05:31:32 +00:00
Add memory data function
This commit is contained in:
@ -439,6 +439,14 @@ pub extern "C" fn wasmer_instance_context_memory(
|
|||||||
memory as *const Memory as *const wasmer_memory_t
|
memory as *const Memory as *const wasmer_memory_t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn wasmer_memory_data(mem: *mut wasmer_memory_t) -> *mut uint8_t {
|
||||||
|
let memory = mem as *mut Memory;
|
||||||
|
use std::cell::Cell;
|
||||||
|
unsafe { ((*memory).view::<u8>()[..]).as_ptr() as *mut Cell<u8> as *mut u8 }
|
||||||
|
}
|
||||||
|
|
||||||
#[allow(clippy::cast_ptr_alignment)]
|
#[allow(clippy::cast_ptr_alignment)]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn wasmer_memory_data_length(mem: *mut wasmer_memory_t) -> uint32_t {
|
pub extern "C" fn wasmer_memory_data_length(mem: *mut wasmer_memory_t) -> uint32_t {
|
||||||
|
@ -5,13 +5,21 @@
|
|||||||
|
|
||||||
static print_str_called = false;
|
static print_str_called = false;
|
||||||
static memory_len = 0;
|
static memory_len = 0;
|
||||||
|
static ptr_len = 0;
|
||||||
|
static char actual_str[14] = {};
|
||||||
|
|
||||||
void print_str(int32_t ptr, int32_t len, wasmer_instance_context_t *ctx) {
|
void print_str(int32_t ptr, int32_t len, wasmer_instance_context_t *ctx) {
|
||||||
wasmer_memory_t *memory = wasmer_instance_context_memory(ctx, 0);
|
wasmer_memory_t *memory = wasmer_instance_context_memory(ctx, 0);
|
||||||
uint32_t mem_len = wasmer_memory_length(memory);
|
uint32_t mem_len = wasmer_memory_length(memory);
|
||||||
printf("In print_str, memory len: %d\n", mem_len);
|
uint8_t *mem_bytes = wasmer_memory_data(memory);
|
||||||
|
for(int32_t idx = 0; idx < len; idx++){
|
||||||
|
actual_str[idx] = mem_bytes[ptr + idx];
|
||||||
|
}
|
||||||
|
actual_str[13] = '\0';
|
||||||
|
printf("In print_str, memory len: %d, ptr_len: %d\n, str %s", mem_len, len, actual_str);
|
||||||
print_str_called = true;
|
print_str_called = true;
|
||||||
memory_len = mem_len;
|
memory_len = mem_len;
|
||||||
|
ptr_len = len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
@ -43,6 +51,8 @@ int main()
|
|||||||
|
|
||||||
assert(print_str_called);
|
assert(print_str_called);
|
||||||
assert(memory_len == 17);
|
assert(memory_len == 17);
|
||||||
|
assert(ptr_len == 13);
|
||||||
|
assert(0 == strcmp(actual_str, "Hello, World!"));
|
||||||
|
|
||||||
printf("Destroy instance\n");
|
printf("Destroy instance\n");
|
||||||
wasmer_instance_destroy(instance);
|
wasmer_instance_destroy(instance);
|
||||||
|
@ -114,6 +114,8 @@ wasmer_compile_result_t wasmer_instantiate(wasmer_instance_t **instance,
|
|||||||
uint32_t wasm_bytes_len,
|
uint32_t wasm_bytes_len,
|
||||||
wasmer_import_object_t *import_object);
|
wasmer_import_object_t *import_object);
|
||||||
|
|
||||||
|
uint8_t *wasmer_memory_data(wasmer_memory_t *mem);
|
||||||
|
|
||||||
uint32_t wasmer_memory_data_length(wasmer_memory_t *mem);
|
uint32_t wasmer_memory_data_length(wasmer_memory_t *mem);
|
||||||
|
|
||||||
void wasmer_memory_destroy(wasmer_memory_t *memory);
|
void wasmer_memory_destroy(wasmer_memory_t *memory);
|
||||||
|
@ -114,6 +114,8 @@ wasmer_compile_result_t wasmer_instantiate(wasmer_instance_t **instance,
|
|||||||
uint32_t wasm_bytes_len,
|
uint32_t wasm_bytes_len,
|
||||||
wasmer_import_object_t *import_object);
|
wasmer_import_object_t *import_object);
|
||||||
|
|
||||||
|
uint8_t *wasmer_memory_data(wasmer_memory_t *mem);
|
||||||
|
|
||||||
uint32_t wasmer_memory_data_length(wasmer_memory_t *mem);
|
uint32_t wasmer_memory_data_length(wasmer_memory_t *mem);
|
||||||
|
|
||||||
void wasmer_memory_destroy(wasmer_memory_t *memory);
|
void wasmer_memory_destroy(wasmer_memory_t *memory);
|
||||||
|
Reference in New Issue
Block a user