1use safa_abi::{
2 errors::ErrorStatus,
3 raw::io::{DirEntry, OpenOptions},
4};
5
6use super::SyscallNum;
7use super::{define_syscall, err_from_u16};
8use crate::syscalls::types::{OptionalPtrMut, RequiredPtr, RequiredPtrMut, Ri, StrPtr};
9
10define_syscall!(SyscallNum::SysGetDirEntry => {
11 sysgetdirentry(path_ptr: StrPtr, path_len: usize, dest_direntry: OptionalPtrMut<DirEntry>)
15});
16
17#[inline]
18pub fn getdirentry(path: &str) -> Result<DirEntry, ErrorStatus> {
19 let mut dest_direntry: DirEntry = unsafe { core::mem::zeroed() };
20 err_from_u16!(
21 sysgetdirentry(path.as_ptr(), path.len(), &raw mut dest_direntry),
22 dest_direntry
23 )
24}
25
26define_syscall! {
27 SyscallNum::SysOpenAll => {
28 sysopen_all(path_ptr: StrPtr, path_len: usize, dest_fd: RequiredPtr<Ri>)
32 },
33 SyscallNum::SysOpen => {
34 sysopen(path_ptr: StrPtr, path_len: usize, options: OpenOptions, dest_fd: RequiredPtrMut<Ri>)
38 },
39 SyscallNum::SysCreate => {
40 syscreate_file(path_ptr: StrPtr, path_len: usize)
43 },
44 SyscallNum::SysCreateDir => {
45 syscreate_dir(path_ptr: StrPtr, path_len: usize)
49 },
50 SyscallNum::SysRemovePath => {
51 sysremove_path(path_ptr: StrPtr, path_len: usize)
55 },
56}
57
58#[inline]
59pub fn open_all(path: &str) -> Result<Ri, ErrorStatus> {
63 let mut dest_fd = 0xAAAAAAAAAAAAAAAAusize;
64 err_from_u16!(
65 sysopen_all(path.as_ptr(), path.len(), &raw mut dest_fd),
66 dest_fd
67 )
68}
69
70#[inline]
74pub fn open(path: &str, options: OpenOptions) -> Result<Ri, ErrorStatus> {
75 let mut dest_fd = 0xAAAAAAAAAAAAAAAAusize;
76 err_from_u16!(
77 sysopen(path.as_ptr(), path.len(), options, &raw mut dest_fd),
78 dest_fd
79 )
80}
81
82#[inline]
83pub fn create(path: &str) -> Result<(), ErrorStatus> {
87 err_from_u16!(syscreate_file(path.as_ptr(), path.len()))
88}
89
90#[inline]
91pub fn createdir(path: &str) -> Result<(), ErrorStatus> {
95 err_from_u16!(syscreate_dir(path.as_ptr(), path.len()))
96}
97
98#[inline]
99pub fn remove_path(path: &str) -> Result<(), ErrorStatus> {
103 err_from_u16!(sysremove_path(path.as_ptr(), path.len()))
104}