abi_definitions/file_system/
socket.rs

1use super::{XilaFileIdentifier, XilaFileSystemResult, into_u32};
2use task::block_on;
3use task::get_instance as get_task_manager_instance;
4use virtual_file_system::Error;
5
6/// This function is used to send data through a socket.
7///
8/// # Safety
9///
10/// This function is unsafe because it dereferences raw pointers.
11#[unsafe(no_mangle)]
12pub unsafe extern "C" fn xila_file_system_send(
13    _socket: XilaFileIdentifier,
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            if buffer.is_null() {
22                Err(Error::InvalidParameter)?;
23            }
24
25            let _buffer = core::slice::from_raw_parts(buffer, size);
26
27            Ok(())
28        })
29    }
30}
31
32/// This function is used to receive data through a socket.
33///
34/// # Safety
35///
36/// This function is unsafe because it dereferences raw pointers.
37///
38/// # Errors
39///
40/// This function may return an error if the file system fails to receive the data.
41#[unsafe(no_mangle)]
42pub unsafe extern "C" fn xila_file_system_receive(
43    _socket: XilaFileIdentifier,
44    buffer: *mut u8,
45    size: usize,
46) -> XilaFileSystemResult {
47    unsafe {
48        into_u32(|| {
49            let _task = block_on(get_task_manager_instance().get_current_task_identifier());
50
51            if buffer.is_null() {
52                Err(Error::InvalidParameter)?;
53            }
54
55            let _buffer = core::slice::from_raw_parts_mut(buffer, size);
56
57            Ok(())
58        })
59    }
60}