blockless_sdk/
memory.rs

1#[cfg(not(feature = "mock-ffi"))]
2#[link(wasm_import_module = "blockless_memory")]
3extern "C" {
4    #[link_name = "memory_read"]
5    pub(crate) fn memory_read(buf: *mut u8, len: u32, num: *mut u32) -> u32;
6    #[link_name = "env_var_read"]
7    pub(crate) fn env_var_read(buf: *mut u8, len: u32, num: *mut u32) -> u32;
8}
9
10#[cfg(feature = "mock-ffi")]
11#[allow(unused_variables)]
12mod mock_ffi {
13    pub unsafe fn memory_read(buf: *mut u8, len: u32, num: *mut u32) -> u32 {
14        unimplemented!()
15    }
16
17    pub unsafe fn env_var_read(buf: *mut u8, len: u32, num: *mut u32) -> u32 {
18        unimplemented!()
19    }
20}
21
22#[cfg(feature = "mock-ffi")]
23use mock_ffi::*;
24
25pub fn read_stdin(buf: &mut [u8]) -> std::io::Result<u32> {
26    let mut len = 0;
27    let errno = unsafe { memory_read(buf.as_mut_ptr(), buf.len() as _, &mut len) };
28    if errno == 0 {
29        return Ok(len);
30    }
31    let err = std::io::Error::from_raw_os_error(errno as i32);
32    Err(err)
33}
34
35pub fn read_env_vars(buf: &mut [u8]) -> std::io::Result<u32> {
36    let mut len = 0;
37    let errno = unsafe { env_var_read(buf.as_mut_ptr(), buf.len() as _, &mut len) };
38    if errno == 0 {
39        return Ok(len);
40    }
41    let err = std::io::Error::from_raw_os_error(errno as i32);
42    Err(err)
43}