xref: /relibc/src/platform/pal/mod.rs (revision be35961d82cd98f2a2e61c4f1869271b9f4af571)
1 use super::types::*;
2 use crate::{
3     c_str::CStr,
4     header::{
5         dirent::dirent,
6         sys_resource::rlimit,
7         sys_stat::stat,
8         sys_statvfs::statvfs,
9         sys_time::{timeval, timezone},
10         sys_utsname::utsname,
11         time::timespec,
12     },
13 };
14 
15 pub use self::epoll::PalEpoll;
16 mod epoll;
17 
18 pub use self::ptrace::PalPtrace;
19 mod ptrace;
20 
21 pub use self::signal::PalSignal;
22 mod signal;
23 
24 pub use self::socket::PalSocket;
25 mod socket;
26 
27 pub trait Pal {
28     fn access(path: &CStr, mode: c_int) -> c_int;
29 
30     fn brk(addr: *mut c_void) -> *mut c_void;
31 
32     fn chdir(path: &CStr) -> c_int;
33 
34     fn chmod(path: &CStr, mode: mode_t) -> c_int;
35 
36     fn chown(path: &CStr, owner: uid_t, group: gid_t) -> c_int;
37 
38     fn clock_gettime(clk_id: clockid_t, tp: *mut timespec) -> c_int;
39 
40     fn close(fildes: c_int) -> c_int;
41 
42     fn dup(fildes: c_int) -> c_int;
43 
44     fn dup2(fildes: c_int, fildes2: c_int) -> c_int;
45 
46     unsafe fn execve(path: &CStr, argv: *const *mut c_char, envp: *const *mut c_char) -> c_int;
47 
48     fn exit(status: c_int) -> !;
49 
50     fn fchdir(fildes: c_int) -> c_int;
51 
52     fn fchmod(fildes: c_int, mode: mode_t) -> c_int;
53 
54     fn fchown(fildes: c_int, owner: uid_t, group: gid_t) -> c_int;
55 
56     fn flock(fd: c_int, operation: c_int) -> c_int;
57 
58     fn fstat(fildes: c_int, buf: *mut stat) -> c_int;
59 
60     fn fstatvfs(fildes: c_int, buf: *mut statvfs) -> c_int;
61 
62     fn fcntl(fildes: c_int, cmd: c_int, arg: c_int) -> c_int;
63 
64     fn fork() -> pid_t;
65 
66     fn fpath(fildes: c_int, out: &mut [u8]) -> ssize_t;
67 
68     fn fsync(fildes: c_int) -> c_int;
69 
70     fn ftruncate(fildes: c_int, length: off_t) -> c_int;
71 
72     fn futex(addr: *mut c_int, op: c_int, val: c_int, val2: usize) -> c_int;
73 
74     fn futimens(fd: c_int, times: *const timespec) -> c_int;
75 
76     fn utimens(path: &CStr, times: *const timespec) -> c_int;
77 
78     fn getcwd(buf: *mut c_char, size: size_t) -> *mut c_char;
79 
80     fn getdents(fd: c_int, dirents: *mut dirent, bytes: usize) -> c_int;
81 
82     fn getegid() -> gid_t;
83 
84     fn geteuid() -> uid_t;
85 
86     fn getgid() -> gid_t;
87 
88     /* Note that this is distinct from the legacy POSIX function
89      * getpagesize(), which returns a c_int. On some Linux platforms,
90      * page size may be determined through a syscall ("getpagesize"). */
91     fn getpagesize() -> usize;
92 
93     fn getpgid(pid: pid_t) -> pid_t;
94 
95     fn getpid() -> pid_t;
96 
97     fn getppid() -> pid_t;
98 
99     fn getrandom(buf: &mut [u8], flags: c_uint) -> ssize_t;
100 
101     unsafe fn getrlimit(resource: c_int, rlim: *mut rlimit) -> c_int;
102 
103     fn getsid(pid: pid_t) -> pid_t;
104 
105     fn gettid() -> pid_t;
106 
107     fn gettimeofday(tp: *mut timeval, tzp: *mut timezone) -> c_int;
108 
109     fn getuid() -> uid_t;
110 
111     fn lchown(path: &CStr, owner: uid_t, group: gid_t) -> c_int;
112 
113     fn link(path1: &CStr, path2: &CStr) -> c_int;
114 
115     fn lseek(fildes: c_int, offset: off_t, whence: c_int) -> off_t;
116 
117     fn mkdir(path: &CStr, mode: mode_t) -> c_int;
118 
119     fn mkfifo(path: &CStr, mode: mode_t) -> c_int;
120 
121     unsafe fn mlock(addr: *const c_void, len: usize) -> c_int;
122 
123     fn mlockall(flags: c_int) -> c_int;
124 
125     unsafe fn mmap(
126         addr: *mut c_void,
127         len: usize,
128         prot: c_int,
129         flags: c_int,
130         fildes: c_int,
131         off: off_t,
132     ) -> *mut c_void;
133 
134     unsafe fn mprotect(addr: *mut c_void, len: usize, prot: c_int) -> c_int;
135 
136     unsafe fn msync(addr: *mut c_void, len: usize, flags: c_int) -> c_int;
137 
138     unsafe fn munlock(addr: *const c_void, len: usize) -> c_int;
139 
140     fn munlockall() -> c_int;
141 
142     unsafe fn munmap(addr: *mut c_void, len: usize) -> c_int;
143 
144     fn nanosleep(rqtp: *const timespec, rmtp: *mut timespec) -> c_int;
145 
146     fn open(path: &CStr, oflag: c_int, mode: mode_t) -> c_int;
147 
148     fn pipe2(fildes: &mut [c_int], flags: c_int) -> c_int;
149 
150     unsafe fn pte_clone(stack: *mut usize) -> pid_t;
151 
152     fn read(fildes: c_int, buf: &mut [u8]) -> ssize_t;
153 
154     fn readlink(pathname: &CStr, out: &mut [u8]) -> ssize_t;
155 
156     fn rename(old: &CStr, new: &CStr) -> c_int;
157 
158     fn rmdir(path: &CStr) -> c_int;
159 
160     fn sched_yield() -> c_int;
161 
162     fn setpgid(pid: pid_t, pgid: pid_t) -> c_int;
163 
164     fn setregid(rgid: gid_t, egid: gid_t) -> c_int;
165 
166     fn setreuid(ruid: uid_t, euid: uid_t) -> c_int;
167 
168     fn symlink(path1: &CStr, path2: &CStr) -> c_int;
169 
170     fn umask(mask: mode_t) -> mode_t;
171 
172     fn uname(utsname: *mut utsname) -> c_int;
173 
174     fn unlink(path: &CStr) -> c_int;
175 
176     fn waitpid(pid: pid_t, stat_loc: *mut c_int, options: c_int) -> pid_t;
177 
178     fn write(fildes: c_int, buf: &[u8]) -> ssize_t;
179 
180     fn verify() -> bool;
181 }
182