abi/file_system/
socket.rs1use super::{XilaFileSystemResult, XilaUniqueFileIdentifier, into_u32};
2use futures::block_on;
3use task::get_instance as get_task_manager_instance;
4use virtual_file_system::{Error, get_instance as get_file_system_instance};
5
6#[unsafe(no_mangle)]
12pub unsafe extern "C" fn xila_file_system_send(
13 socket: XilaUniqueFileIdentifier,
14 buffer: *const u8,
15 size: usize,
16) -> XilaFileSystemResult {
17 unsafe {
18 into_u32(|| {
19 let task = block_on(get_task_manager_instance().get_current_task_identifier());
20
21 let socket = file_system::UniqueFileIdentifier::from_raw(socket);
22
23 if buffer.is_null() {
24 Err(Error::InvalidParameter)?;
25 }
26
27 let buffer = core::slice::from_raw_parts(buffer, size);
28
29 block_on(get_file_system_instance().send(task, socket, buffer))?;
30
31 Ok(())
32 })
33 }
34}
35
36#[unsafe(no_mangle)]
46pub unsafe extern "C" fn xila_file_system_receive(
47 socket: XilaUniqueFileIdentifier,
48 buffer: *mut u8,
49 size: usize,
50) -> XilaFileSystemResult {
51 unsafe {
52 into_u32(|| {
53 let task = block_on(get_task_manager_instance().get_current_task_identifier());
54
55 let socket = file_system::UniqueFileIdentifier::from_raw(socket);
56
57 if buffer.is_null() {
58 Err(Error::InvalidParameter)?;
59 }
60
61 let buffer = core::slice::from_raw_parts_mut(buffer, size);
62
63 block_on(get_file_system_instance().receive(task, socket, buffer))?;
64
65 Ok(())
66 })
67 }
68}