1use super::{
2 arch::*,
3 data::{Map, Stat, StatVfs, TimeSpec},
4 error::Result,
5 flag::*,
6 number::*,
7};
8
9use core::mem;
10
11pub fn close(fd: usize) -> Result<usize> {
13 unsafe { syscall1(SYS_CLOSE, fd) }
14}
15
16pub fn clock_gettime(clock: usize, tp: &mut TimeSpec) -> Result<usize> {
18 unsafe { syscall2(SYS_CLOCK_GETTIME, clock, tp as *mut TimeSpec as usize) }
19}
20
21pub fn dup(fd: usize, buf: &[u8]) -> Result<usize> {
23 unsafe { syscall3(SYS_DUP, fd, buf.as_ptr() as usize, buf.len()) }
24}
25
26pub fn dup2(fd: usize, newfd: usize, buf: &[u8]) -> Result<usize> {
28 unsafe { syscall4(SYS_DUP2, fd, newfd, buf.as_ptr() as usize, buf.len()) }
29}
30
31pub fn exit(status: usize) -> Result<usize> {
33 unsafe { syscall1(SYS_EXIT, status) }
34}
35
36pub fn fchmod(fd: usize, mode: u16) -> Result<usize> {
38 unsafe { syscall2(SYS_FCHMOD, fd, mode as usize) }
39}
40
41pub fn fchown(fd: usize, uid: u32, gid: u32) -> Result<usize> {
43 unsafe { syscall3(SYS_FCHOWN, fd, uid as usize, gid as usize) }
44}
45
46pub fn fcntl(fd: usize, cmd: usize, arg: usize) -> Result<usize> {
48 unsafe { syscall3(SYS_FCNTL, fd, cmd, arg) }
49}
50
51pub unsafe fn fmap(fd: usize, map: &Map) -> Result<usize> {
62 syscall3(
63 SYS_FMAP,
64 fd,
65 map as *const Map as usize,
66 mem::size_of::<Map>(),
67 )
68}
69
70pub unsafe fn funmap(addr: usize, len: usize) -> Result<usize> {
72 syscall2(SYS_FUNMAP, addr, len)
73}
74
75pub fn fpath(fd: usize, buf: &mut [u8]) -> Result<usize> {
77 unsafe { syscall3(SYS_FPATH, fd, buf.as_mut_ptr() as usize, buf.len()) }
78}
79
80pub fn frename<T: AsRef<str>>(fd: usize, path: T) -> Result<usize> {
82 unsafe {
83 syscall3(
84 SYS_FRENAME,
85 fd,
86 path.as_ref().as_ptr() as usize,
87 path.as_ref().len(),
88 )
89 }
90}
91
92pub fn fstat(fd: usize, stat: &mut Stat) -> Result<usize> {
94 unsafe {
95 syscall3(
96 SYS_FSTAT,
97 fd,
98 stat as *mut Stat as usize,
99 mem::size_of::<Stat>(),
100 )
101 }
102}
103
104pub fn fstatvfs(fd: usize, stat: &mut StatVfs) -> Result<usize> {
106 unsafe {
107 syscall3(
108 SYS_FSTATVFS,
109 fd,
110 stat as *mut StatVfs as usize,
111 mem::size_of::<StatVfs>(),
112 )
113 }
114}
115
116pub fn fsync(fd: usize) -> Result<usize> {
118 unsafe { syscall1(SYS_FSYNC, fd) }
119}
120
121pub fn ftruncate(fd: usize, len: usize) -> Result<usize> {
123 unsafe { syscall2(SYS_FTRUNCATE, fd, len) }
124}
125
126pub fn futimens(fd: usize, times: &[TimeSpec]) -> Result<usize> {
128 unsafe {
129 syscall3(
130 SYS_FUTIMENS,
131 fd,
132 times.as_ptr() as usize,
133 times.len() * mem::size_of::<TimeSpec>(),
134 )
135 }
136}
137
138pub unsafe fn futex(
140 addr: *mut i32,
141 op: usize,
142 val: i32,
143 val2: usize,
144 addr2: *mut i32,
145) -> Result<usize> {
146 syscall5(
147 SYS_FUTEX,
148 addr as usize,
149 op,
150 (val as isize) as usize,
151 val2,
152 addr2 as usize,
153 )
154}
155
156pub fn getegid() -> Result<usize> {
158 unsafe { syscall0(SYS_GETEGID) }
159}
160
161pub fn getens() -> Result<usize> {
163 unsafe { syscall0(SYS_GETENS) }
164}
165
166pub fn geteuid() -> Result<usize> {
168 unsafe { syscall0(SYS_GETEUID) }
169}
170
171pub fn getgid() -> Result<usize> {
173 unsafe { syscall0(SYS_GETGID) }
174}
175
176pub fn getns() -> Result<usize> {
178 unsafe { syscall0(SYS_GETNS) }
179}
180
181pub fn getpid() -> Result<usize> {
183 unsafe { syscall0(SYS_GETPID) }
184}
185
186pub fn getpgid(pid: usize) -> Result<usize> {
188 unsafe { syscall1(SYS_GETPGID, pid) }
189}
190
191pub fn getppid() -> Result<usize> {
193 unsafe { syscall0(SYS_GETPPID) }
194}
195
196pub fn getuid() -> Result<usize> {
198 unsafe { syscall0(SYS_GETUID) }
199}
200
201pub unsafe fn iopl(level: usize) -> Result<usize> {
208 syscall1(SYS_IOPL, level)
209}
210
211pub fn kill(pid: usize, sig: usize) -> Result<usize> {
213 unsafe { syscall2(SYS_KILL, pid, sig) }
214}
215
216pub unsafe fn link(old: *const u8, new: *const u8) -> Result<usize> {
218 syscall2(SYS_LINK, old as usize, new as usize)
219}
220
221pub fn lseek(fd: usize, offset: isize, whence: usize) -> Result<usize> {
223 unsafe { syscall3(SYS_LSEEK, fd, offset as usize, whence) }
224}
225
226pub fn mkns(schemes: &[[usize; 2]]) -> Result<usize> {
228 unsafe { syscall2(SYS_MKNS, schemes.as_ptr() as usize, schemes.len()) }
229}
230
231pub unsafe fn mprotect(addr: usize, size: usize, flags: MapFlags) -> Result<usize> {
233 syscall3(SYS_MPROTECT, addr, size, flags.bits())
234}
235
236pub fn nanosleep(req: &TimeSpec, rem: &mut TimeSpec) -> Result<usize> {
238 unsafe {
239 syscall2(
240 SYS_NANOSLEEP,
241 req as *const TimeSpec as usize,
242 rem as *mut TimeSpec as usize,
243 )
244 }
245}
246
247pub fn open<T: AsRef<str>>(path: T, flags: usize) -> Result<usize> {
249 unsafe {
250 syscall3(
251 SYS_OPEN,
252 path.as_ref().as_ptr() as usize,
253 path.as_ref().len(),
254 flags,
255 )
256 }
257}
258
259pub fn read(fd: usize, buf: &mut [u8]) -> Result<usize> {
261 unsafe { syscall3(SYS_READ, fd, buf.as_mut_ptr() as usize, buf.len()) }
262}
263
264pub fn rmdir<T: AsRef<str>>(path: T) -> Result<usize> {
266 unsafe {
267 syscall2(
268 SYS_RMDIR,
269 path.as_ref().as_ptr() as usize,
270 path.as_ref().len(),
271 )
272 }
273}
274
275pub fn setpgid(pid: usize, pgid: usize) -> Result<usize> {
277 unsafe { syscall2(SYS_SETPGID, pid, pgid) }
278}
279
280pub fn setregid(rgid: usize, egid: usize) -> Result<usize> {
282 unsafe { syscall2(SYS_SETREGID, rgid, egid) }
283}
284
285pub fn setrens(rns: usize, ens: usize) -> Result<usize> {
287 unsafe { syscall2(SYS_SETRENS, rns, ens) }
288}
289
290pub fn setreuid(ruid: usize, euid: usize) -> Result<usize> {
292 unsafe { syscall2(SYS_SETREUID, ruid, euid) }
293}
294
295pub fn unlink<T: AsRef<str>>(path: T) -> Result<usize> {
297 unsafe {
298 syscall2(
299 SYS_UNLINK,
300 path.as_ref().as_ptr() as usize,
301 path.as_ref().len(),
302 )
303 }
304}
305
306pub unsafe fn virttophys(virtual_address: usize) -> Result<usize> {
312 syscall1(SYS_VIRTTOPHYS, virtual_address)
313}
314
315pub fn waitpid(pid: usize, status: &mut usize, options: WaitFlags) -> Result<usize> {
317 unsafe {
318 syscall3(
319 SYS_WAITPID,
320 pid,
321 status as *mut usize as usize,
322 options.bits(),
323 )
324 }
325}
326
327pub fn write(fd: usize, buf: &[u8]) -> Result<usize> {
342 unsafe { syscall3(SYS_WRITE, fd, buf.as_ptr() as usize, buf.len()) }
343}
344
345pub fn sched_yield() -> Result<usize> {
349 unsafe { syscall0(SYS_YIELD) }
350}
351
352pub fn sendfd(receiver_socket: usize, fd: usize, flags: usize, arg: u64) -> Result<usize> {
357 #[cfg(target_pointer_width = "32")]
358 unsafe {
359 syscall5(
360 SYS_SENDFD,
361 receiver_socket,
362 fd,
363 flags,
364 arg as u32 as usize,
365 (arg >> 32) as u32 as usize,
366 )
367 }
368
369 #[cfg(target_pointer_width = "64")]
370 unsafe {
371 syscall4(SYS_SENDFD, receiver_socket, fd, flags, arg as usize)
372 }
373}