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