diff --git a/Makefile b/Makefile index cf37919e0a..25aef80ebe 100644 --- a/Makefile +++ b/Makefile @@ -28,6 +28,9 @@ clean: cargo clean make -C tests clean +check: + cargo check + fmt: ./fmt.sh diff --git a/src/crt0/src/lib.rs b/src/crt0/src/lib.rs index e790ec60d0..02db0186d4 100644 --- a/src/crt0/src/lib.rs +++ b/src/crt0/src/lib.rs @@ -14,6 +14,7 @@ extern crate stdio; use alloc::Vec; use core::ptr; +use platform::{Pal, Sys}; use platform::types::*; #[no_mangle] @@ -95,7 +96,7 @@ pub unsafe extern "C" fn _start_rust(sp: &'static Stack) -> ! { stdio::stdout = stdio::default_stdout.get(); stdio::stderr = stdio::default_stderr.get(); - platform::exit(main( + Sys::exit(main( argc, argv, // not envp, because programs like bash try to modify this *const* @@ -113,7 +114,7 @@ pub extern "C" fn rust_begin_unwind(pi: &::core::panic::PanicInfo) -> ! { let mut w = platform::FileWriter(2); let _ = w.write_fmt(format_args!("RELIBC CRT0 PANIC: {}\n", pi)); - platform::exit(1); + Sys::exit(1); } #[lang = "oom"] @@ -129,5 +130,5 @@ pub extern "C" fn rust_oom(layout: ::core::alloc::Layout) -> ! { layout.align() )); - platform::exit(1); + Sys::exit(1); } diff --git a/src/dirent/src/lib.rs b/src/dirent/src/lib.rs index 62edcf9a39..029081c005 100644 --- a/src/dirent/src/lib.rs +++ b/src/dirent/src/lib.rs @@ -12,6 +12,7 @@ extern crate unistd; use alloc::boxed::Box; use core::{mem, ptr}; +use platform::{Pal, Sys}; use platform::types::*; const DIR_BUF_SIZE: usize = mem::size_of::() * 3; @@ -41,7 +42,7 @@ pub struct dirent { #[no_mangle] pub extern "C" fn opendir(path: *const c_char) -> *mut DIR { - let fd = platform::open( + let fd = Sys::open( path, fcntl::O_RDONLY | fcntl::O_DIRECTORY | fcntl::O_CLOEXEC, 0, @@ -62,7 +63,7 @@ pub extern "C" fn opendir(path: *const c_char) -> *mut DIR { #[no_mangle] pub unsafe extern "C" fn closedir(dir: *mut DIR) -> c_int { - let ret = platform::close((*dir).fd); + let ret = Sys::close((*dir).fd); Box::from_raw(dir); ret } @@ -70,7 +71,7 @@ pub unsafe extern "C" fn closedir(dir: *mut DIR) -> c_int { #[no_mangle] pub unsafe extern "C" fn readdir(dir: *mut DIR) -> *mut dirent { if (*dir).index >= (*dir).len { - let read = platform::getdents( + let read = Sys::getdents( (*dir).fd, (*dir).buf.as_mut_ptr() as *mut platform::types::dirent, (*dir).buf.len(), diff --git a/src/fcntl/src/lib.rs b/src/fcntl/src/lib.rs index 0c0fa43ce2..f9c78930e9 100644 --- a/src/fcntl/src/lib.rs +++ b/src/fcntl/src/lib.rs @@ -4,6 +4,7 @@ extern crate platform; +use platform::{Pal, Sys}; use platform::types::*; pub use sys::*; @@ -38,17 +39,10 @@ pub extern "C" fn creat(path: *const c_char, mode: mode_t) -> c_int { #[no_mangle] pub extern "C" fn sys_fcntl(fildes: c_int, cmd: c_int, arg: c_int) -> c_int { - platform::fcntl(fildes, cmd, arg) + Sys::fcntl(fildes, cmd, arg) } #[no_mangle] pub extern "C" fn sys_open(path: *const c_char, oflag: c_int, mode: mode_t) -> c_int { - platform::open(path, oflag, mode) + Sys::open(path, oflag, mode) } - -/* -#[no_mangle] -pub extern "C" fn func(args) -> c_int { - unimplemented!(); -} -*/ diff --git a/src/lib.rs b/src/lib.rs index 0cffd0abeb..37cc9ea0c8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -43,6 +43,8 @@ pub extern crate utime; pub extern crate wchar; pub extern crate wctype; +use platform::{Pal, Sys}; + #[cfg(not(test))] #[panic_implementation] #[linkage = "weak"] @@ -53,7 +55,7 @@ pub extern "C" fn rust_begin_unwind(pi: &::core::panic::PanicInfo) -> ! { let mut w = platform::FileWriter(2); let _ = w.write_fmt(format_args!("RELIBC PANIC: {}\n", pi)); - platform::exit(1); + Sys::exit(1); } #[cfg(not(test))] @@ -76,7 +78,7 @@ pub extern "C" fn rust_oom(layout: ::core::alloc::Layout) -> ! { layout.align() )); - platform::exit(1); + Sys::exit(1); } #[cfg(not(test))] @@ -89,5 +91,5 @@ pub extern "C" fn _Unwind_Resume() -> ! { let mut w = platform::FileWriter(2); let _ = w.write_str("_Unwind_Resume\n"); - platform::exit(1); + Sys::exit(1); } diff --git a/src/platform/src/lib.rs b/src/platform/src/lib.rs index 60331812ec..bed373141c 100644 --- a/src/platform/src/lib.rs +++ b/src/platform/src/lib.rs @@ -26,11 +26,11 @@ mod allocator; #[path = "allocator/ralloc.rs"] mod allocator; -pub use pal::Pal; +pub use pal::{Pal, PalSignal, PalSocket}; mod pal; -pub use sys::*; +pub use sys::Sys; #[cfg(all(not(feature = "no_std"), target_os = "linux"))] #[path = "linux/mod.rs"] @@ -149,7 +149,7 @@ pub struct FileWriter(pub c_int); impl FileWriter { pub fn write(&mut self, buf: &[u8]) -> isize { - write(self.0, buf) + Sys::write(self.0, buf) } } @@ -171,7 +171,7 @@ pub struct FileReader(pub c_int); impl FileReader { pub fn read(&mut self, buf: &mut [u8]) -> isize { - read(self.0, buf) + Sys::read(self.0, buf) } } diff --git a/src/platform/src/linux/mod.rs b/src/platform/src/linux/mod.rs index f1c941af36..276a18bcb8 100644 --- a/src/platform/src/linux/mod.rs +++ b/src/platform/src/linux/mod.rs @@ -1,10 +1,16 @@ use core::{mem, ptr}; +use core::fmt::Write; +use FileWriter; use Pal; use errno; use types::*; +mod signal; +mod socket; + const EINVAL: c_int = 22; +const ENOSYS: c_int = 38; const SIGCHLD: usize = 17; @@ -31,18 +37,18 @@ fn e(sys: usize) -> usize { pub struct Sys; impl Pal for Sys { - unsafe fn accept(socket: c_int, address: *mut sockaddr, address_len: *mut socklen_t) -> c_int { - e(syscall!(ACCEPT, socket, address, address_len)) as c_int + fn no_pal(name: &str) -> c_int { + let _ = writeln!(FileWriter(2), "relibc: no_pal: {}", name); + unsafe { + errno = ENOSYS; + } + -1 } fn access(path: *const c_char, mode: c_int) -> c_int { e(unsafe { syscall!(ACCESS, path, mode) }) as c_int } - unsafe fn bind(socket: c_int, address: *const sockaddr, address_len: socklen_t) -> c_int { - e(syscall!(BIND, socket, address, address_len)) as c_int - } - fn brk(addr: *mut c_void) -> *mut c_void { unsafe { syscall!(BRK, addr) as *mut c_void } } @@ -67,10 +73,6 @@ impl Pal for Sys { e(unsafe { syscall!(CLOSE, fildes) }) as c_int } - unsafe fn connect(socket: c_int, address: *const sockaddr, address_len: socklen_t) -> c_int { - e(syscall!(CONNECT, socket, address, address_len)) as c_int - } - fn dup(fildes: c_int) -> c_int { e(unsafe { syscall!(DUP, fildes) }) as c_int } @@ -168,7 +170,7 @@ impl Pal for Sys { let mut len = len; let mut uts = mem::uninitialized(); - let err = uname(&mut uts); + let err = Sys::uname(&mut uts); if err < 0 { mem::forget(uts); return err; @@ -195,14 +197,6 @@ impl Pal for Sys { e(unsafe { syscall!(GETITIMER, which, out) }) as c_int } - unsafe fn getpeername( - socket: c_int, - address: *mut sockaddr, - address_len: *mut socklen_t, - ) -> c_int { - e(syscall!(GETPEERNAME, socket, address, address_len)) as c_int - } - fn getpgid(pid: pid_t) -> pid_t { e(unsafe { syscall!(GETPGID, pid) }) as pid_t } @@ -215,33 +209,6 @@ impl Pal for Sys { e(unsafe { syscall!(GETPPID) }) as pid_t } - unsafe fn getsockname( - socket: c_int, - address: *mut sockaddr, - address_len: *mut socklen_t, - ) -> c_int { - e(syscall!(GETSOCKNAME, socket, address, address_len)) as c_int - } - - fn getsockopt( - socket: c_int, - level: c_int, - option_name: c_int, - option_value: *mut c_void, - option_len: *mut socklen_t, - ) -> c_int { - e(unsafe { - syscall!( - GETSOCKOPT, - socket, - level, - option_name, - option_value, - option_len - ) - }) as c_int - } - fn gettimeofday(tp: *mut timeval, tzp: *mut timezone) -> c_int { e(unsafe { syscall!(GETTIMEOFDAY, tp, tzp) }) as c_int } @@ -260,22 +227,10 @@ impl Pal for Sys { (Self::ioctl(fd, TIOCGWINSZ, &mut winsize as *mut _ as *mut c_void) == 0) as c_int } - fn kill(pid: pid_t, sig: c_int) -> c_int { - e(unsafe { syscall!(KILL, pid, sig) }) as c_int - } - - fn killpg(pgrp: pid_t, sig: c_int) -> c_int { - e(unsafe { syscall!(KILL, -(pgrp as isize) as pid_t, sig) }) as c_int - } - fn link(path1: *const c_char, path2: *const c_char) -> c_int { e(unsafe { syscall!(LINKAT, AT_FDCWD, path1, AT_FDCWD, path2, 0) }) as c_int } - fn listen(socket: c_int, backlog: c_int) -> c_int { - e(unsafe { syscall!(LISTEN, socket, backlog) }) as c_int - } - fn lseek(fildes: c_int, offset: off_t, whence: c_int) -> off_t { e(unsafe { syscall!(LSEEK, fildes, offset, whence) }) as off_t } @@ -319,40 +274,10 @@ impl Pal for Sys { e(unsafe { syscall!(PIPE2, fildes.as_mut_ptr(), 0) }) as c_int } - fn raise(sig: c_int) -> c_int { - let tid = e(unsafe { syscall!(GETTID) }) as pid_t; - let ret = if tid == !0 { - -1 - } else { - e(unsafe { syscall!(TKILL, tid, sig) }) as c_int - }; - - ret - } - fn read(fildes: c_int, buf: &mut [u8]) -> ssize_t { e(unsafe { syscall!(READ, fildes, buf.as_mut_ptr(), buf.len()) }) as ssize_t } - unsafe fn recvfrom( - socket: c_int, - buf: *mut c_void, - len: size_t, - flags: c_int, - address: *mut sockaddr, - address_len: *mut socklen_t, - ) -> ssize_t { - e(syscall!( - RECVFROM, - socket, - buf, - len, - flags, - address, - address_len - )) as ssize_t - } - fn rename(old: *const c_char, new: *const c_char) -> c_int { e(unsafe { syscall!(RENAMEAT, AT_FDCWD, old, AT_FDCWD, new) }) as c_int } @@ -371,19 +296,6 @@ impl Pal for Sys { e(unsafe { syscall!(SELECT, nfds, readfds, writefds, exceptfds, timeout) }) as c_int } - unsafe fn sendto( - socket: c_int, - buf: *const c_void, - len: size_t, - flags: c_int, - dest_addr: *const sockaddr, - dest_len: socklen_t, - ) -> ssize_t { - e(syscall!( - SENDTO, socket, buf, len, flags, dest_addr, dest_len - )) as ssize_t - } - fn setitimer(which: c_int, new: *const itimerval, old: *mut itimerval) -> c_int { e(unsafe { syscall!(SETITIMER, which, new, old) }) as c_int } @@ -400,55 +312,10 @@ impl Pal for Sys { e(unsafe { syscall!(SETREUID, ruid, euid) }) as c_int } - fn setsockopt( - socket: c_int, - level: c_int, - option_name: c_int, - option_value: *const c_void, - option_len: socklen_t, - ) -> c_int { - e(unsafe { - syscall!( - SETSOCKOPT, - socket, - level, - option_name, - option_value, - option_len - ) - }) as c_int - } - - fn shutdown(socket: c_int, how: c_int) -> c_int { - e(unsafe { syscall!(SHUTDOWN, socket, how) }) as c_int - } - - unsafe fn sigaction(sig: c_int, act: *const sigaction, oact: *mut sigaction) -> c_int { - e(syscall!( - RT_SIGACTION, - sig, - act, - oact, - mem::size_of::() - )) as c_int - } - - fn sigprocmask(how: c_int, set: *const sigset_t, oset: *mut sigset_t) -> c_int { - e(unsafe { syscall!(RT_SIGPROCMASK, how, set, oset, mem::size_of::()) }) as c_int - } - fn stat(file: *const c_char, buf: *mut stat) -> c_int { e(unsafe { syscall!(NEWFSTATAT, AT_FDCWD, file, buf, 0) }) as c_int } - fn socket(domain: c_int, kind: c_int, protocol: c_int) -> c_int { - e(unsafe { syscall!(SOCKET, domain, kind, protocol) }) as c_int - } - - fn socketpair(domain: c_int, kind: c_int, protocol: c_int, socket_vector: *mut c_int) -> c_int { - e(unsafe { syscall!(SOCKETPAIR, domain, kind, protocol, socket_vector) }) as c_int - } - fn tcgetattr(fd: c_int, out: *mut termios) -> c_int { Self::ioctl(fd, TCGETS, out as *mut c_void) } diff --git a/src/platform/src/linux/signal.rs b/src/platform/src/linux/signal.rs new file mode 100644 index 0000000000..1d29bc3d41 --- /dev/null +++ b/src/platform/src/linux/signal.rs @@ -0,0 +1,40 @@ +use core::mem; + +use super::{e, Sys}; +use PalSignal; +use types::*; + +impl PalSignal for Sys { + fn kill(pid: pid_t, sig: c_int) -> c_int { + e(unsafe { syscall!(KILL, pid, sig) }) as c_int + } + + fn killpg(pgrp: pid_t, sig: c_int) -> c_int { + e(unsafe { syscall!(KILL, -(pgrp as isize) as pid_t, sig) }) as c_int + } + + fn raise(sig: c_int) -> c_int { + let tid = e(unsafe { syscall!(GETTID) }) as pid_t; + let ret = if tid == !0 { + -1 + } else { + e(unsafe { syscall!(TKILL, tid, sig) }) as c_int + }; + + ret + } + + unsafe fn sigaction(sig: c_int, act: *const sigaction, oact: *mut sigaction) -> c_int { + e(syscall!( + RT_SIGACTION, + sig, + act, + oact, + mem::size_of::() + )) as c_int + } + + fn sigprocmask(how: c_int, set: *const sigset_t, oset: *mut sigset_t) -> c_int { + e(unsafe { syscall!(RT_SIGPROCMASK, how, set, oset, mem::size_of::()) }) as c_int + } +} diff --git a/src/platform/src/linux/socket.rs b/src/platform/src/linux/socket.rs new file mode 100644 index 0000000000..c29f2b51ca --- /dev/null +++ b/src/platform/src/linux/socket.rs @@ -0,0 +1,119 @@ +use super::{e, Sys}; +use PalSocket; +use types::*; + +impl PalSocket for Sys { + unsafe fn accept(socket: c_int, address: *mut sockaddr, address_len: *mut socklen_t) -> c_int { + e(syscall!(ACCEPT, socket, address, address_len)) as c_int + } + + unsafe fn bind(socket: c_int, address: *const sockaddr, address_len: socklen_t) -> c_int { + e(syscall!(BIND, socket, address, address_len)) as c_int + } + + unsafe fn connect(socket: c_int, address: *const sockaddr, address_len: socklen_t) -> c_int { + e(syscall!(CONNECT, socket, address, address_len)) as c_int + } + + unsafe fn getpeername( + socket: c_int, + address: *mut sockaddr, + address_len: *mut socklen_t, + ) -> c_int { + e(syscall!(GETPEERNAME, socket, address, address_len)) as c_int + } + + unsafe fn getsockname( + socket: c_int, + address: *mut sockaddr, + address_len: *mut socklen_t, + ) -> c_int { + e(syscall!(GETSOCKNAME, socket, address, address_len)) as c_int + } + + fn getsockopt( + socket: c_int, + level: c_int, + option_name: c_int, + option_value: *mut c_void, + option_len: *mut socklen_t, + ) -> c_int { + e(unsafe { + syscall!( + GETSOCKOPT, + socket, + level, + option_name, + option_value, + option_len + ) + }) as c_int + } + + fn listen(socket: c_int, backlog: c_int) -> c_int { + e(unsafe { syscall!(LISTEN, socket, backlog) }) as c_int + } + + unsafe fn recvfrom( + socket: c_int, + buf: *mut c_void, + len: size_t, + flags: c_int, + address: *mut sockaddr, + address_len: *mut socklen_t, + ) -> ssize_t { + e(syscall!( + RECVFROM, + socket, + buf, + len, + flags, + address, + address_len + )) as ssize_t + } + + unsafe fn sendto( + socket: c_int, + buf: *const c_void, + len: size_t, + flags: c_int, + dest_addr: *const sockaddr, + dest_len: socklen_t, + ) -> ssize_t { + e(syscall!( + SENDTO, socket, buf, len, flags, dest_addr, dest_len + )) as ssize_t + } + + fn setsockopt( + socket: c_int, + level: c_int, + option_name: c_int, + option_value: *const c_void, + option_len: socklen_t, + ) -> c_int { + e(unsafe { + syscall!( + SETSOCKOPT, + socket, + level, + option_name, + option_value, + option_len + ) + }) as c_int + } + + fn shutdown(socket: c_int, how: c_int) -> c_int { + e(unsafe { syscall!(SHUTDOWN, socket, how) }) as c_int + } + + fn socket(domain: c_int, kind: c_int, protocol: c_int) -> c_int { + e(unsafe { syscall!(SOCKET, domain, kind, protocol) }) as c_int + } + + fn socketpair(domain: c_int, kind: c_int, protocol: c_int, socket_vector: *mut c_int) -> c_int { + e(unsafe { syscall!(SOCKETPAIR, domain, kind, protocol, socket_vector) }) as c_int + } +} diff --git a/src/platform/src/pal.rs b/src/platform/src/pal/mod.rs similarity index 67% rename from src/platform/src/pal.rs rename to src/platform/src/pal/mod.rs index 67081b439e..752ba78052 100644 --- a/src/platform/src/pal.rs +++ b/src/platform/src/pal/mod.rs @@ -1,23 +1,21 @@ +use core::ptr; + use types::*; -pub trait Pal { - fn no_pal(name: &str) -> T; +pub use self::signal::PalSignal; +mod signal; - unsafe fn accept(socket: c_int, address: *mut sockaddr, address_len: *mut socklen_t) -> c_int { - Self::no_pal("accept") - } +pub use self::socket::PalSocket; +mod socket; + +pub trait Pal { + fn no_pal(name: &str) -> c_int; fn access(path: *const c_char, mode: c_int) -> c_int { Self::no_pal("access") } - unsafe fn bind(socket: c_int, address: *const sockaddr, address_len: socklen_t) -> c_int { - Self::no_pal("bind") - } - - fn brk(addr: *mut c_void) -> *mut c_void { - Self::no_pal("brk") - } + fn brk(addr: *mut c_void) -> *mut c_void; fn chdir(path: *const c_char) -> c_int { Self::no_pal("chdir") @@ -39,10 +37,6 @@ pub trait Pal { Self::no_pal("close") } - unsafe fn connect(socket: c_int, address: *const sockaddr, address_len: socklen_t) -> c_int { - Self::no_pal("connect") - } - fn dup(fildes: c_int) -> c_int { Self::no_pal("dup") } @@ -102,7 +96,8 @@ pub trait Pal { } fn getcwd(buf: *mut c_char, size: size_t) -> *mut c_char { - Self::no_pal("getcwd") + Self::no_pal("getcwd"); + ptr::null_mut() } fn getdents(fd: c_int, dirents: *mut dirent, bytes: usize) -> c_int { @@ -133,10 +128,6 @@ pub trait Pal { Self::no_pal("getitimer") } - unsafe fn getpeername(socket: c_int, address: *mut sockaddr, address_len: *mut socklen_t) -> c_int { - Self::no_pal("getpeername") - } - fn getpgid(pid: pid_t) -> pid_t { Self::no_pal("getpgid") } @@ -149,20 +140,6 @@ pub trait Pal { Self::no_pal("getppid") } - unsafe fn getsockname(socket: c_int, address: *mut sockaddr, address_len: *mut socklen_t) -> c_int { - Self::no_pal("getsockname") - } - - fn getsockopt( - socket: c_int, - level: c_int, - option_name: c_int, - option_value: *mut c_void, - option_len: *mut socklen_t, - ) -> c_int { - Self::no_pal("getsockopt") - } - fn gettimeofday(tp: *mut timeval, tzp: *mut timezone) -> c_int { Self::no_pal("gettimeofday") } @@ -179,24 +156,12 @@ pub trait Pal { Self::no_pal("isatty") } - fn kill(pid: pid_t, sig: c_int) -> c_int { - Self::no_pal("kill") - } - - fn killpg(pgrp: pid_t, sig: c_int) -> c_int { - Self::no_pal("killpg") - } - fn link(path1: *const c_char, path2: *const c_char) -> c_int { Self::no_pal("link") } - fn listen(socket: c_int, backlog: c_int) -> c_int { - Self::no_pal("listen") - } - fn lseek(fildes: c_int, offset: off_t, whence: c_int) -> off_t { - Self::no_pal("lseek") + Self::no_pal("lseek") as off_t } fn lstat(file: *const c_char, buf: *mut stat) -> c_int { @@ -219,7 +184,7 @@ pub trait Pal { fildes: c_int, off: off_t, ) -> *mut c_void { - Self::no_pal("mmap") + Self::no_pal("mmap") as *mut c_void } unsafe fn munmap(addr: *mut c_void, len: usize) -> c_int { @@ -238,23 +203,8 @@ pub trait Pal { Self::no_pal("pipe") } - fn raise(sig: c_int) -> c_int { - Self::no_pal("raise") - } - fn read(fildes: c_int, buf: &mut [u8]) -> ssize_t { - Self::no_pal("read") - } - - unsafe fn recvfrom( - socket: c_int, - buf: *mut c_void, - len: size_t, - flags: c_int, - address: *mut sockaddr, - address_len: *mut socklen_t, - ) -> ssize_t { - Self::no_pal("recvfrom") + Self::no_pal("read") as ssize_t } fn rename(old: *const c_char, new: *const c_char) -> c_int { @@ -275,17 +225,6 @@ pub trait Pal { Self::no_pal("select") } - unsafe fn sendto( - socket: c_int, - buf: *const c_void, - len: size_t, - flags: c_int, - dest_addr: *const sockaddr, - dest_len: socklen_t, - ) -> ssize_t { - Self::no_pal("sendto") - } - fn setitimer(which: c_int, new: *const itimerval, old: *mut itimerval) -> c_int { Self::no_pal("setitimer") } @@ -302,40 +241,10 @@ pub trait Pal { Self::no_pal("setreuid") } - fn setsockopt( - socket: c_int, - level: c_int, - option_name: c_int, - option_value: *const c_void, - option_len: socklen_t, - ) -> c_int { - Self::no_pal("setsockopt") - } - - fn shutdown(socket: c_int, how: c_int) -> c_int { - Self::no_pal("shutdown") - } - - unsafe fn sigaction(sig: c_int, act: *const sigaction, oact: *mut sigaction) -> c_int { - Self::no_pal("sigaction") - } - - fn sigprocmask(how: c_int, set: *const sigset_t, oset: *mut sigset_t) -> c_int { - Self::no_pal("sigprocmask") - } - fn stat(file: *const c_char, buf: *mut stat) -> c_int { Self::no_pal("stat") } - fn socket(domain: c_int, kind: c_int, protocol: c_int) -> c_int { - Self::no_pal("socket") - } - - fn socketpair(domain: c_int, kind: c_int, protocol: c_int, socket_vector: *mut c_int) -> c_int { - Self::no_pal("socketpair") - } - fn tcgetattr(fd: c_int, out: *mut termios) -> c_int { Self::no_pal("tcgetattr") } @@ -345,11 +254,12 @@ pub trait Pal { } fn times(out: *mut tms) -> clock_t { - Self::no_pal("times") + Self::no_pal("times") as clock_t } fn umask(mask: mode_t) -> mode_t { - Self::no_pal("umask") + Self::no_pal("umask"); + 0 } fn uname(utsname: *mut utsname) -> c_int { @@ -365,6 +275,6 @@ pub trait Pal { } fn write(fildes: c_int, buf: &[u8]) -> ssize_t { - Self::no_pal("write") + Self::no_pal("write") as ssize_t } } diff --git a/src/platform/src/pal/signal.rs b/src/platform/src/pal/signal.rs new file mode 100644 index 0000000000..50176b913c --- /dev/null +++ b/src/platform/src/pal/signal.rs @@ -0,0 +1,24 @@ +use Pal; +use types::*; + +pub trait PalSignal: Pal { + fn kill(pid: pid_t, sig: c_int) -> c_int { + Self::no_pal("kill") + } + + fn killpg(pgrp: pid_t, sig: c_int) -> c_int { + Self::no_pal("killpg") + } + + fn raise(sig: c_int) -> c_int { + Self::no_pal("raise") + } + + unsafe fn sigaction(sig: c_int, act: *const sigaction, oact: *mut sigaction) -> c_int { + Self::no_pal("sigaction") + } + + fn sigprocmask(how: c_int, set: *const sigset_t, oset: *mut sigset_t) -> c_int { + Self::no_pal("sigprocmask") + } +} diff --git a/src/platform/src/pal/socket.rs b/src/platform/src/pal/socket.rs new file mode 100644 index 0000000000..8a4c72ad53 --- /dev/null +++ b/src/platform/src/pal/socket.rs @@ -0,0 +1,82 @@ +use Pal; +use types::*; + +pub trait PalSocket: Pal { + unsafe fn accept(socket: c_int, address: *mut sockaddr, address_len: *mut socklen_t) -> c_int { + Self::no_pal("accept") + } + + unsafe fn bind(socket: c_int, address: *const sockaddr, address_len: socklen_t) -> c_int { + Self::no_pal("bind") + } + + unsafe fn connect(socket: c_int, address: *const sockaddr, address_len: socklen_t) -> c_int { + Self::no_pal("connect") + } + + unsafe fn getpeername(socket: c_int, address: *mut sockaddr, address_len: *mut socklen_t) -> c_int { + Self::no_pal("getpeername") + } + + unsafe fn getsockname(socket: c_int, address: *mut sockaddr, address_len: *mut socklen_t) -> c_int { + Self::no_pal("getsockname") + } + + fn getsockopt( + socket: c_int, + level: c_int, + option_name: c_int, + option_value: *mut c_void, + option_len: *mut socklen_t, + ) -> c_int { + Self::no_pal("getsockopt") + } + + fn listen(socket: c_int, backlog: c_int) -> c_int { + Self::no_pal("listen") + } + + unsafe fn recvfrom( + socket: c_int, + buf: *mut c_void, + len: size_t, + flags: c_int, + address: *mut sockaddr, + address_len: *mut socklen_t, + ) -> ssize_t { + Self::no_pal("recvfrom") as ssize_t + } + + unsafe fn sendto( + socket: c_int, + buf: *const c_void, + len: size_t, + flags: c_int, + dest_addr: *const sockaddr, + dest_len: socklen_t, + ) -> ssize_t { + Self::no_pal("sendto") as ssize_t + } + + fn setsockopt( + socket: c_int, + level: c_int, + option_name: c_int, + option_value: *const c_void, + option_len: socklen_t, + ) -> c_int { + Self::no_pal("setsockopt") + } + + fn shutdown(socket: c_int, how: c_int) -> c_int { + Self::no_pal("shutdown") + } + + fn socket(domain: c_int, kind: c_int, protocol: c_int) -> c_int { + Self::no_pal("socket") + } + + fn socketpair(domain: c_int, kind: c_int, protocol: c_int, socket_vector: *mut c_int) -> c_int { + Self::no_pal("socketpair") + } +} diff --git a/src/platform/src/rawfile.rs b/src/platform/src/rawfile.rs index 2efc20d484..58d870123c 100644 --- a/src/platform/src/rawfile.rs +++ b/src/platform/src/rawfile.rs @@ -1,18 +1,19 @@ -use super::{close, dup, open, types::*}; use core::ops::Deref; +use {Pal, Sys, types::*}; + pub struct RawFile(c_int); impl RawFile { pub fn open(path: *const c_char, oflag: c_int, mode: mode_t) -> Result { - match open(path, oflag, mode) { + match Sys::open(path, oflag, mode) { -1 => Err(()), n => Ok(RawFile(n)), } } pub fn dup(&self) -> Result { - match dup(self.0) { + match Sys::dup(self.0) { -1 => Err(()), n => Ok(RawFile(n)), } @@ -33,7 +34,7 @@ impl RawFile { impl Drop for RawFile { fn drop(&mut self) { - let _ = close(self.0); + let _ = Sys::close(self.0); } } diff --git a/src/pwd/src/lib.rs b/src/pwd/src/lib.rs index 6d82a1f9dd..db1225092f 100644 --- a/src/pwd/src/lib.rs +++ b/src/pwd/src/lib.rs @@ -10,6 +10,7 @@ extern crate platform; use alloc::vec::Vec; use core::ptr; +use platform::{Pal, Sys}; use platform::types::*; use platform::RawFile; @@ -90,7 +91,7 @@ where buf.set_len(capacity); } - let read = platform::read(*file, &mut buf[len..]); + let read = Sys::read(*file, &mut buf[len..]); unsafe { buf.set_len(len + read as usize); diff --git a/src/signal/src/lib.rs b/src/signal/src/lib.rs index 1a463beeff..eeff480dfc 100644 --- a/src/signal/src/lib.rs +++ b/src/signal/src/lib.rs @@ -17,6 +17,7 @@ pub mod sys; pub use sys::*; use core::{mem, ptr}; +use platform::{PalSignal, Sys}; use platform::types::*; const SIG_ERR: usize = !0; @@ -45,17 +46,17 @@ pub type sigset_t = c_ulong; #[no_mangle] pub extern "C" fn kill(pid: pid_t, sig: c_int) -> c_int { - platform::kill(pid, sig) + Sys::kill(pid, sig) } #[no_mangle] pub extern "C" fn killpg(pgrp: pid_t, sig: c_int) -> c_int { - platform::killpg(pgrp, sig) + Sys::killpg(pgrp, sig) } #[no_mangle] pub extern "C" fn raise(sig: c_int) -> c_int { - platform::raise(sig) + Sys::raise(sig) } #[no_mangle] @@ -72,7 +73,7 @@ pub unsafe extern "C" fn sigaction( } else { ptr::null_mut() }; - platform::sigaction(sig, ptr, oact as *mut platform::types::sigaction) + Sys::sigaction(sig, ptr, oact as *mut platform::types::sigaction) } #[no_mangle] @@ -176,7 +177,7 @@ pub extern "C" fn sigpending(set: *mut sigset_t) -> c_int { #[no_mangle] pub extern "C" fn sigprocmask(how: c_int, set: *const sigset_t, oset: *mut sigset_t) -> c_int { - platform::sigprocmask(how, set, oset) + Sys::sigprocmask(how, set, oset) } // #[no_mangle] diff --git a/src/stdio/src/lib.rs b/src/stdio/src/lib.rs index 0b7700fc0e..8790159170 100644 --- a/src/stdio/src/lib.rs +++ b/src/stdio/src/lib.rs @@ -22,6 +22,7 @@ use core::{ptr, str}; use alloc::vec::Vec; use errno::STR_ERROR; +use platform::{Pal, Sys}; use platform::types::*; use platform::{c_str, errno, Read, Write}; use vl::VaList as va_list; @@ -110,6 +111,7 @@ impl FILE { }; return true; } + pub fn write(&mut self, to_write: &[u8]) -> usize { if let Some((wbase, wpos, _)) = self.write { let len = wpos - wbase; @@ -119,9 +121,9 @@ impl FILE { let mut rem = f_buf.len() + to_write.len(); loop { let mut count = if f_filled { - platform::write(self.fd, &f_buf[advance..]) + Sys::write(self.fd, &f_buf[advance..]) } else { - platform::write(self.fd, &f_buf[advance..]) + platform::write(self.fd, to_write) + Sys::write(self.fd, &f_buf[advance..]) + Sys::write(self.fd, to_write) }; if count == rem as isize { self.write = if self.buf.len() == 0 { @@ -152,13 +154,14 @@ impl FILE { // -- Tommoa (20/6/2018) unreachable!() } + pub fn read(&mut self, buf: &mut [u8]) -> usize { let adj = if self.buf.len() > 0 { 0 } else { 1 }; let mut file_buf = &mut self.buf[self.unget..]; let count = if buf.len() <= 1 - adj { - platform::read(self.fd, &mut file_buf) + Sys::read(self.fd, &mut file_buf) } else { - platform::read(self.fd, buf) + platform::read(self.fd, &mut file_buf) + Sys::read(self.fd, buf) + Sys::read(self.fd, &mut file_buf) }; if count <= 0 { self.flags |= if count == 0 { @@ -182,8 +185,9 @@ impl FILE { } buf.len() } + pub fn seek(&self, off: off_t, whence: c_int) -> off_t { - platform::lseek(self.fd, off, whence) + Sys::lseek(self.fd, off, whence) } pub fn lock(&mut self) -> LockGuard { @@ -266,7 +270,7 @@ pub extern "C" fn cuserid(_s: *mut c_char) -> *mut c_char { #[no_mangle] pub extern "C" fn fclose(stream: &mut FILE) -> c_int { flockfile(stream); - let r = helpers::fflush_unlocked(stream) | platform::close(stream.fd); + let r = helpers::fflush_unlocked(stream) | Sys::close(stream.fd); if stream.flags & constants::F_PERM == 0 { // Not one of stdin, stdout or stderr unsafe { @@ -444,7 +448,7 @@ pub extern "C" fn fopen(filename: *const c_char, mode: *const c_char) -> *mut FI if let Some(f) = unsafe { helpers::_fdopen(fd, mode) } { f } else { - platform::close(fd); + Sys::close(fd); ptr::null_mut() } } @@ -555,7 +559,7 @@ pub extern "C" fn freopen( let new = unsafe { &mut *new }; // Should be safe, new is not null if new.fd == stream.fd { new.fd = -1; - } else if platform::dup2(new.fd, stream.fd) < 0 + } else if Sys::dup2(new.fd, stream.fd) < 0 || fcntl::sys_fcntl(stream.fd, fcntl::F_SETFL, flags & fcntl::O_CLOEXEC) < 0 { fclose(new); @@ -824,9 +828,9 @@ pub extern "C" fn putw(w: c_int, stream: &mut FILE) -> c_int { /// Delete file or directory `path` #[no_mangle] pub extern "C" fn remove(path: *const c_char) -> c_int { - let r = platform::unlink(path); + let r = Sys::unlink(path); if r == -errno::EISDIR { - platform::rmdir(path) + Sys::rmdir(path) } else { r } @@ -834,7 +838,7 @@ pub extern "C" fn remove(path: *const c_char) -> c_int { #[no_mangle] pub extern "C" fn rename(oldpath: *const c_char, newpath: *const c_char) -> c_int { - platform::rename(oldpath, newpath) + Sys::rename(oldpath, newpath) } /// Rewind `stream` back to the beginning of it @@ -908,10 +912,10 @@ pub extern "C" fn tmpfile() -> *mut FILE { } let fp = fdopen(fd, b"w+".as_ptr() as *const i8); - platform::unlink(file_name); + Sys::unlink(file_name); if fp == ptr::null_mut() { - platform::close(fd); + Sys::close(fd); } fp diff --git a/src/stdlib/src/lib.rs b/src/stdlib/src/lib.rs index b171747806..485e991244 100644 --- a/src/stdlib/src/lib.rs +++ b/src/stdlib/src/lib.rs @@ -23,6 +23,7 @@ use wchar::*; use errno::*; use fcntl::*; +use platform::{Pal, Sys}; use platform::types::*; mod sort; @@ -235,7 +236,7 @@ pub unsafe extern "C" fn exit(status: c_int) { } } - platform::exit(status); + Sys::exit(status); } // #[no_mangle] @@ -446,7 +447,7 @@ where pub extern "C" fn mktemp(name: *mut c_char) -> *mut c_char { if inner_mktemp(name, 0, || unsafe { let mut st: stat = mem::uninitialized(); - let ret = if platform::stat(name, &mut st) != 0 && platform::errno == ENOENT { + let ret = if Sys::stat(name, &mut st) != 0 && platform::errno == ENOENT { Some(()) } else { None @@ -466,7 +467,7 @@ fn get_nstime() -> u64 { use core::mem; use time::constants::CLOCK_MONOTONIC; let mut ts: timespec = unsafe { mem::uninitialized() }; - platform::clock_gettime(CLOCK_MONOTONIC, &mut ts); + Sys::clock_gettime(CLOCK_MONOTONIC, &mut ts); ts.tv_nsec as u64 } @@ -476,7 +477,7 @@ pub extern "C" fn mkostemps(name: *mut c_char, suffix_len: c_int, mut flags: c_i flags |= O_RDWR | O_CREAT | O_EXCL; inner_mktemp(name, suffix_len, || { - let fd = platform::open(name, flags, 0600); + let fd = Sys::open(name, flags, 0600); if fd >= 0 { Some(fd) @@ -1004,7 +1005,7 @@ pub unsafe extern "C" fn system(command: *const c_char) -> c_int { unreachable!(); } else { let mut wstatus = 0; - if platform::waitpid(child_pid, &mut wstatus, 0) == !0 { + if Sys::waitpid(child_pid, &mut wstatus, 0) == !0 { return -1; } diff --git a/src/sys_ioctl/src/lib.rs b/src/sys_ioctl/src/lib.rs index 40b0427bfd..6c155363b4 100644 --- a/src/sys_ioctl/src/lib.rs +++ b/src/sys_ioctl/src/lib.rs @@ -4,6 +4,7 @@ extern crate platform; +use platform::{Pal, Sys}; use platform::types::*; // This is used from sgtty @@ -31,7 +32,7 @@ pub mod inner { #[no_mangle] pub extern "C" fn ioctl(fd: c_int, request: c_ulong, out: *mut c_void) -> c_int { // TODO: Somehow support varargs to syscall?? - platform::ioctl(fd, request, out) + Sys::ioctl(fd, request, out) } pub const TCGETS: c_ulong = 0x5401; diff --git a/src/sys_mman/src/lib.rs b/src/sys_mman/src/lib.rs index c2151e4036..cbe789d043 100644 --- a/src/sys_mman/src/lib.rs +++ b/src/sys_mman/src/lib.rs @@ -2,6 +2,7 @@ extern crate platform; +use platform::{Pal, Sys}; use platform::types::*; pub use sys::*; @@ -33,7 +34,7 @@ pub unsafe extern "C" fn mmap( fildes: c_int, off: off_t, ) -> *mut c_void { - platform::mmap(addr, len, prot, flags, fildes, off) + Sys::mmap(addr, len, prot, flags, fildes, off) } // #[no_mangle] @@ -58,7 +59,7 @@ pub extern "C" fn munlockall() -> c_int { #[no_mangle] pub unsafe extern "C" fn munmap(addr: *mut c_void, len: usize) -> c_int { - platform::munmap(addr, len) + Sys::munmap(addr, len) } // #[no_mangle] diff --git a/src/sys_resource/src/lib.rs b/src/sys_resource/src/lib.rs index f919012588..29612c7298 100644 --- a/src/sys_resource/src/lib.rs +++ b/src/sys_resource/src/lib.rs @@ -6,6 +6,7 @@ extern crate platform; extern crate sys_time; +use platform::{Pal, Sys}; use platform::types::*; use sys_time::timeval; @@ -55,7 +56,7 @@ pub unsafe extern "C" fn getrlimit(resource: c_int, rlp: *mut rlimit) -> c_int { //#[no_mangle] pub unsafe extern "C" fn getrusage(who: c_int, r_usage: *mut rusage) -> c_int { - platform::getrusage(who, r_usage as *mut platform::types::rusage) + Sys::getrusage(who, r_usage as *mut platform::types::rusage) } // #[no_mangle] diff --git a/src/sys_select/src/lib.rs b/src/sys_select/src/lib.rs index 8b63fe29f1..0c67e3406b 100644 --- a/src/sys_select/src/lib.rs +++ b/src/sys_select/src/lib.rs @@ -4,6 +4,7 @@ extern crate platform; use core::mem; +use platform::{Pal, Sys}; use platform::types::*; // fd_set is defined in C because cbindgen is incompatible with mem::size_of booo @@ -16,5 +17,5 @@ pub extern "C" fn select( exceptfds: *mut fd_set, timeout: *mut timeval, ) -> c_int { - platform::select(nfds, readfds, writefds, exceptfds, timeout) + Sys::select(nfds, readfds, writefds, exceptfds, timeout) } diff --git a/src/sys_socket/src/lib.rs b/src/sys_socket/src/lib.rs index 7354e1b6e5..4990133c4e 100644 --- a/src/sys_socket/src/lib.rs +++ b/src/sys_socket/src/lib.rs @@ -6,6 +6,7 @@ extern crate platform; use core::ptr; +use platform::{PalSocket, Sys}; use platform::types::*; mod constants; @@ -28,7 +29,7 @@ pub unsafe extern "C" fn accept( address: *mut sockaddr, address_len: *mut socklen_t, ) -> c_int { - platform::accept( + Sys::accept( socket, address as *mut platform::types::sockaddr, address_len, @@ -41,7 +42,7 @@ pub unsafe extern "C" fn bind( address: *const sockaddr, address_len: socklen_t, ) -> c_int { - platform::bind( + Sys::bind( socket, address as *const platform::types::sockaddr, address_len, @@ -54,7 +55,7 @@ pub unsafe extern "C" fn connect( address: *const sockaddr, address_len: socklen_t, ) -> c_int { - platform::connect( + Sys::connect( socket, address as *const platform::types::sockaddr, address_len, @@ -67,7 +68,7 @@ pub unsafe extern "C" fn getpeername( address: *mut sockaddr, address_len: *mut socklen_t, ) -> c_int { - platform::getpeername( + Sys::getpeername( socket, address as *mut platform::types::sockaddr, address_len, @@ -80,7 +81,7 @@ pub unsafe extern "C" fn getsockname( address: *mut sockaddr, address_len: *mut socklen_t, ) -> c_int { - platform::getsockname( + Sys::getsockname( socket, address as *mut platform::types::sockaddr, address_len, @@ -95,12 +96,12 @@ pub unsafe extern "C" fn getsockopt( option_value: *mut c_void, option_len: *mut socklen_t, ) -> c_int { - platform::getsockopt(socket, level, option_name, option_value, option_len) + Sys::getsockopt(socket, level, option_name, option_value, option_len) } #[no_mangle] pub unsafe extern "C" fn listen(socket: c_int, backlog: c_int) -> c_int { - platform::listen(socket, backlog) + Sys::listen(socket, backlog) } #[no_mangle] @@ -129,7 +130,7 @@ pub unsafe extern "C" fn recvfrom( address: *mut sockaddr, address_len: *mut socklen_t, ) -> ssize_t { - platform::recvfrom( + Sys::recvfrom( socket, buffer, length, @@ -158,7 +159,7 @@ pub unsafe extern "C" fn sendto( dest_addr: *const sockaddr, dest_len: socklen_t, ) -> ssize_t { - platform::sendto( + Sys::sendto( socket, message, length, @@ -176,17 +177,17 @@ pub unsafe extern "C" fn setsockopt( option_value: *const c_void, option_len: socklen_t, ) -> c_int { - platform::setsockopt(socket, level, option_name, option_value, option_len) + Sys::setsockopt(socket, level, option_name, option_value, option_len) } #[no_mangle] pub unsafe extern "C" fn shutdown(socket: c_int, how: c_int) -> c_int { - platform::shutdown(socket, how) + Sys::shutdown(socket, how) } #[no_mangle] pub unsafe extern "C" fn socket(domain: c_int, kind: c_int, protocol: c_int) -> c_int { - platform::socket(domain, kind, protocol) + Sys::socket(domain, kind, protocol) } #[no_mangle] @@ -196,5 +197,5 @@ pub unsafe extern "C" fn socketpair( protocol: c_int, socket_vector: *mut c_int, ) -> c_int { - platform::socketpair(domain, kind, protocol, socket_vector) + Sys::socketpair(domain, kind, protocol, socket_vector) } diff --git a/src/sys_stat/src/lib.rs b/src/sys_stat/src/lib.rs index 17c793e5e6..459ea5406b 100644 --- a/src/sys_stat/src/lib.rs +++ b/src/sys_stat/src/lib.rs @@ -4,6 +4,7 @@ extern crate platform; +use platform::{Pal, Sys}; use platform::types::*; pub const S_IFMT: c_int = 0o0170000; @@ -59,17 +60,17 @@ pub struct stat { #[no_mangle] pub extern "C" fn chmod(path: *const c_char, mode: mode_t) -> c_int { - platform::chmod(path, mode) + Sys::chmod(path, mode) } #[no_mangle] pub extern "C" fn fchmod(fildes: c_int, mode: mode_t) -> c_int { - platform::fchmod(fildes, mode) + Sys::fchmod(fildes, mode) } #[no_mangle] pub extern "C" fn fstat(fildes: c_int, buf: *mut platform::types::stat) -> c_int { - platform::fstat(fildes, buf) + Sys::fstat(fildes, buf) } #[no_mangle] @@ -79,22 +80,22 @@ pub extern "C" fn __fxstat(_ver: c_int, fildes: c_int, buf: *mut platform::types #[no_mangle] pub extern "C" fn futimens(fd: c_int, times: *const timespec) -> c_int { - platform::futimens(fd, times) + Sys::futimens(fd, times) } #[no_mangle] pub extern "C" fn lstat(path: *const c_char, buf: *mut platform::types::stat) -> c_int { - platform::lstat(path, buf) + Sys::lstat(path, buf) } #[no_mangle] pub extern "C" fn mkdir(path: *const c_char, mode: mode_t) -> c_int { - platform::mkdir(path, mode) + Sys::mkdir(path, mode) } #[no_mangle] pub extern "C" fn mkfifo(path: *const c_char, mode: mode_t) -> c_int { - platform::mkfifo(path, mode) + Sys::mkfifo(path, mode) } // #[no_mangle] @@ -104,12 +105,12 @@ pub extern "C" fn mknod(path: *const c_char, mode: mode_t, dev: dev_t) -> c_int #[no_mangle] pub extern "C" fn stat(file: *const c_char, buf: *mut platform::types::stat) -> c_int { - platform::stat(file, buf) + Sys::stat(file, buf) } #[no_mangle] pub extern "C" fn umask(mask: mode_t) -> mode_t { - platform::umask(mask) + Sys::umask(mask) } /* diff --git a/src/sys_time/src/lib.rs b/src/sys_time/src/lib.rs index fae8bfddc9..dc1dfddb79 100644 --- a/src/sys_time/src/lib.rs +++ b/src/sys_time/src/lib.rs @@ -4,6 +4,7 @@ extern crate platform; +use platform::{Pal, Sys}; use platform::types::*; pub const ITIMER_REAL: c_int = 0; @@ -36,7 +37,7 @@ pub struct fd_set { #[no_mangle] pub extern "C" fn getitimer(which: c_int, value: *mut itimerval) -> c_int { - platform::getitimer(which, value as *mut platform::types::itimerval) + Sys::getitimer(which, value as *mut platform::types::itimerval) } #[no_mangle] @@ -45,7 +46,7 @@ pub extern "C" fn setitimer( value: *const itimerval, ovalue: *mut itimerval, ) -> c_int { - platform::setitimer( + Sys::setitimer( which, value as *const platform::types::itimerval, ovalue as *mut platform::types::itimerval, @@ -54,7 +55,7 @@ pub extern "C" fn setitimer( #[no_mangle] pub extern "C" fn gettimeofday(tp: *mut timeval, tzp: *mut timezone) -> c_int { - platform::gettimeofday( + Sys::gettimeofday( tp as *mut platform::types::timeval, tzp as *mut platform::types::timezone, ) @@ -83,7 +84,7 @@ pub unsafe extern "C" fn utimes(path: *const c_char, times: *const timeval) -> c tv_nsec: ((*times.offset(1)).tv_usec as i64) * 1000, }, ]; - platform::utimens(path, times_spec.as_ptr()) + Sys::utimens(path, times_spec.as_ptr()) } /* diff --git a/src/sys_times/src/lib.rs b/src/sys_times/src/lib.rs index 965e75a33b..ebceafbd12 100644 --- a/src/sys_times/src/lib.rs +++ b/src/sys_times/src/lib.rs @@ -4,6 +4,7 @@ extern crate platform; +use platform::{Pal, Sys}; use platform::types::*; #[repr(C)] @@ -16,5 +17,5 @@ pub struct tms { //#[no_mangle] pub extern "C" fn times(out: *mut tms) -> clock_t { - platform::times(out as *mut platform::types::tms) + Sys::times(out as *mut platform::types::tms) } diff --git a/src/sys_utsname/src/lib.rs b/src/sys_utsname/src/lib.rs index 916ed56e0f..0bb394d52f 100644 --- a/src/sys_utsname/src/lib.rs +++ b/src/sys_utsname/src/lib.rs @@ -6,6 +6,7 @@ mod inner { extern crate platform; + use self::platform::{Pal, Sys}; use self::platform::types::*; const UTSLENGTH: usize = 65; @@ -22,7 +23,7 @@ mod inner { #[no_mangle] pub unsafe extern "C" fn uname(uts: *mut utsname) -> c_int { - platform::uname(uts as *mut platform::types::utsname) + Sys::uname(uts as *mut platform::types::utsname) } } #[cfg(target_os = "linux")] diff --git a/src/sys_wait/src/lib.rs b/src/sys_wait/src/lib.rs index 311678c138..f0f4655dd4 100644 --- a/src/sys_wait/src/lib.rs +++ b/src/sys_wait/src/lib.rs @@ -6,6 +6,7 @@ extern crate platform; extern crate sys_resource; +use platform::{Pal, Sys}; use platform::types::*; use sys_resource::rusage; @@ -51,5 +52,5 @@ pub unsafe extern "C" fn wait3( #[no_mangle] pub unsafe extern "C" fn waitpid(pid: pid_t, stat_loc: *mut c_int, options: c_int) -> pid_t { - platform::waitpid(pid, stat_loc, options) + Sys::waitpid(pid, stat_loc, options) } diff --git a/src/termios/src/lib.rs b/src/termios/src/lib.rs index e7306f76fc..b0001158d8 100644 --- a/src/termios/src/lib.rs +++ b/src/termios/src/lib.rs @@ -3,6 +3,7 @@ extern crate platform; +use platform::{Pal, Sys}; use platform::types::*; pub type cc_t = u8; @@ -25,12 +26,12 @@ pub struct termios { #[no_mangle] pub extern "C" fn tcgetattr(fd: c_int, out: *mut termios) -> c_int { - platform::tcgetattr(fd, out as *mut platform::types::termios) + Sys::tcgetattr(fd, out as *mut platform::types::termios) } #[no_mangle] pub extern "C" fn tcsetattr(fd: c_int, act: c_int, value: *mut termios) -> c_int { - platform::tcsetattr(fd, act, value as *mut platform::types::termios) + Sys::tcsetattr(fd, act, value as *mut platform::types::termios) } pub const VINTR: usize = 0; diff --git a/src/time/src/lib.rs b/src/time/src/lib.rs index 69ca7dcc9b..75aae5ffd1 100644 --- a/src/time/src/lib.rs +++ b/src/time/src/lib.rs @@ -15,6 +15,7 @@ use constants::*; use core::mem::transmute; use errno::EIO; use helpers::*; +use platform::{Pal, Sys}; use platform::types::*; #[repr(C)] @@ -121,7 +122,7 @@ pub extern "C" fn clock_getres(clock_id: clockid_t, res: *mut timespec) -> c_int #[no_mangle] pub extern "C" fn clock_gettime(clock_id: clockid_t, tp: *mut timespec) -> c_int { - platform::clock_gettime(clock_id, tp as *mut platform::types::timespec) + Sys::clock_gettime(clock_id, tp as *mut platform::types::timespec) } // #[no_mangle] @@ -328,7 +329,7 @@ pub unsafe extern "C" fn mktime(t: *mut tm) -> time_t { #[no_mangle] pub extern "C" fn nanosleep(rqtp: *const timespec, rmtp: *mut timespec) -> c_int { - platform::nanosleep( + Sys::nanosleep( rqtp as *const platform::types::timespec, rmtp as *mut platform::types::timespec, ) @@ -361,7 +362,7 @@ pub extern "C" fn strptime(buf: *const c_char, format: *const c_char, tm: *mut t #[no_mangle] pub extern "C" fn time(tloc: *mut time_t) -> time_t { let mut ts: platform::types::timespec = Default::default(); - platform::clock_gettime(CLOCK_REALTIME, &mut ts); + Sys::clock_gettime(CLOCK_REALTIME, &mut ts); unsafe { if !tloc.is_null() { *tloc = ts.tv_sec diff --git a/src/unistd/src/brk.rs b/src/unistd/src/brk.rs index bd186f8eba..78ece98354 100644 --- a/src/unistd/src/brk.rs +++ b/src/unistd/src/brk.rs @@ -2,13 +2,14 @@ use core::ptr; use errno::ENOMEM; use platform; +use platform::{Pal, Sys}; use platform::types::*; static mut BRK: *mut c_void = ptr::null_mut(); #[no_mangle] pub unsafe extern "C" fn brk(addr: *mut c_void) -> c_int { - BRK = platform::brk(addr); + BRK = Sys::brk(addr); if BRK < addr { platform::errno = ENOMEM; @@ -21,7 +22,7 @@ pub unsafe extern "C" fn brk(addr: *mut c_void) -> c_int { #[no_mangle] pub unsafe extern "C" fn sbrk(incr: intptr_t) -> *mut c_void { if BRK == ptr::null_mut() { - BRK = platform::brk(ptr::null_mut()); + BRK = Sys::brk(ptr::null_mut()); } let old_brk = BRK; @@ -29,7 +30,7 @@ pub unsafe extern "C" fn sbrk(incr: intptr_t) -> *mut c_void { if incr != 0 { let addr = old_brk.offset(incr); - BRK = platform::brk(addr); + BRK = Sys::brk(addr); if BRK < addr { platform::errno = ENOMEM; diff --git a/src/unistd/src/lib.rs b/src/unistd/src/lib.rs index 944d972669..aef969838c 100644 --- a/src/unistd/src/lib.rs +++ b/src/unistd/src/lib.rs @@ -10,6 +10,7 @@ extern crate sys_time; use core::{ptr, slice}; +use platform::{Pal, Sys}; use platform::types::*; pub use brk::*; @@ -42,12 +43,12 @@ const PATH_MAX: usize = 4096; #[no_mangle] pub extern "C" fn _exit(status: c_int) { - platform::exit(status) + Sys::exit(status) } #[no_mangle] pub extern "C" fn access(path: *const c_char, mode: c_int) -> c_int { - platform::access(path, mode) + Sys::access(path, mode) } #[no_mangle] @@ -74,7 +75,7 @@ pub extern "C" fn alarm(seconds: c_uint) -> c_uint { #[no_mangle] pub extern "C" fn chdir(path: *const c_char) -> c_int { - platform::chdir(path) + Sys::chdir(path) } // #[no_mangle] @@ -84,12 +85,12 @@ pub extern "C" fn chroot(path: *const c_char) -> c_int { #[no_mangle] pub extern "C" fn chown(path: *const c_char, owner: uid_t, group: gid_t) -> c_int { - platform::chown(path, owner, group) + Sys::chown(path, owner, group) } #[no_mangle] pub extern "C" fn close(fildes: c_int) -> c_int { - platform::close(fildes) + Sys::close(fildes) } // #[no_mangle] @@ -104,12 +105,12 @@ pub extern "C" fn crypt(key: *const c_char, salt: *const c_char) -> *mut c_char #[no_mangle] pub extern "C" fn dup(fildes: c_int) -> c_int { - platform::dup(fildes) + Sys::dup(fildes) } #[no_mangle] pub extern "C" fn dup2(fildes: c_int, fildes2: c_int) -> c_int { - platform::dup2(fildes, fildes2) + Sys::dup2(fildes, fildes2) } // #[no_mangle] @@ -147,7 +148,7 @@ pub unsafe extern "C" fn execve( argv: *const *mut c_char, envp: *const *mut c_char, ) -> c_int { - platform::execve(path, argv, envp) + Sys::execve(path, argv, envp) } // #[no_mangle] @@ -157,12 +158,12 @@ pub extern "C" fn execvp(file: *const c_char, argv: *const *mut c_char) -> c_int #[no_mangle] pub extern "C" fn fchown(fildes: c_int, owner: uid_t, group: gid_t) -> c_int { - platform::fchown(fildes, owner, group) + Sys::fchown(fildes, owner, group) } #[no_mangle] pub extern "C" fn fchdir(fildes: c_int) -> c_int { - platform::fchdir(fildes) + Sys::fchdir(fildes) } // #[no_mangle] @@ -172,17 +173,17 @@ pub extern "C" fn fdatasync(fildes: c_int) -> c_int { #[no_mangle] pub extern "C" fn fork() -> pid_t { - platform::fork() + Sys::fork() } #[no_mangle] pub extern "C" fn fsync(fildes: c_int) -> c_int { - platform::fsync(fildes) + Sys::fsync(fildes) } #[no_mangle] pub extern "C" fn ftruncate(fildes: c_int, length: off_t) -> c_int { - platform::ftruncate(fildes, length) + Sys::ftruncate(fildes, length) } #[no_mangle] @@ -194,7 +195,7 @@ pub extern "C" fn getcwd(mut buf: *mut c_char, mut size: size_t) -> *mut c_char size = stack_buf.len(); } - let ret = platform::getcwd(buf, size); + let ret = Sys::getcwd(buf, size); if ret == ptr::null_mut() { return ptr::null_mut(); } @@ -220,17 +221,17 @@ pub extern "C" fn getdtablesize() -> c_int { #[no_mangle] pub extern "C" fn getegid() -> gid_t { - platform::getegid() + Sys::getegid() } #[no_mangle] pub extern "C" fn geteuid() -> uid_t { - platform::geteuid() + Sys::geteuid() } #[no_mangle] pub extern "C" fn getgid() -> gid_t { - platform::getgid() + Sys::getgid() } // #[no_mangle] @@ -245,7 +246,7 @@ pub extern "C" fn gethostid() -> c_long { #[no_mangle] pub unsafe extern "C" fn gethostname(name: *mut c_char, len: size_t) -> c_int { - platform::gethostname(name, len) + Sys::gethostname(name, len) } // #[no_mangle] @@ -270,22 +271,22 @@ pub extern "C" fn getpass(prompt: *const c_char) -> *mut c_char { #[no_mangle] pub extern "C" fn getpgid(pid: pid_t) -> pid_t { - platform::getpgid(pid) + Sys::getpgid(pid) } #[no_mangle] pub extern "C" fn getpgrp() -> pid_t { - platform::getpgid(platform::getpid()) + Sys::getpgid(Sys::getpid()) } #[no_mangle] pub extern "C" fn getpid() -> pid_t { - platform::getpid() + Sys::getpid() } #[no_mangle] pub extern "C" fn getppid() -> pid_t { - platform::getppid() + Sys::getppid() } // #[no_mangle] @@ -295,7 +296,7 @@ pub extern "C" fn getsid(pid: pid_t) -> pid_t { #[no_mangle] pub extern "C" fn getuid() -> uid_t { - platform::getuid() + Sys::getuid() } #[no_mangle] @@ -305,7 +306,7 @@ pub extern "C" fn getwd(path_name: *mut c_char) -> *mut c_char { #[no_mangle] pub extern "C" fn isatty(fd: c_int) -> c_int { - platform::isatty(fd) + Sys::isatty(fd) } // #[no_mangle] @@ -315,7 +316,7 @@ pub extern "C" fn lchown(path: *const c_char, owner: uid_t, group: gid_t) -> c_i #[no_mangle] pub extern "C" fn link(path1: *const c_char, path2: *const c_char) -> c_int { - platform::link(path1, path2) + Sys::link(path1, path2) } // #[no_mangle] @@ -325,7 +326,7 @@ pub extern "C" fn lockf(fildes: c_int, function: c_int, size: off_t) -> c_int { #[no_mangle] pub extern "C" fn lseek(fildes: c_int, offset: off_t, whence: c_int) -> off_t { - platform::lseek(fildes, offset, whence) + Sys::lseek(fildes, offset, whence) } // #[no_mangle] @@ -340,7 +341,7 @@ pub extern "C" fn pause() -> c_int { #[no_mangle] pub unsafe extern "C" fn pipe(fildes: *mut c_int) -> c_int { - platform::pipe(slice::from_raw_parts_mut(fildes, 2)) + Sys::pipe(slice::from_raw_parts_mut(fildes, 2)) } // #[no_mangle] @@ -371,7 +372,7 @@ pub extern "C" fn pwrite( pub extern "C" fn read(fildes: c_int, buf: *const c_void, nbyte: size_t) -> ssize_t { use core::slice; let buf = unsafe { slice::from_raw_parts_mut(buf as *mut u8, nbyte as usize) }; - platform::read(fildes, buf) + Sys::read(fildes, buf) } // #[no_mangle] @@ -381,17 +382,17 @@ pub extern "C" fn readlink(path: *const c_char, buf: *mut c_char, bufsize: size_ #[no_mangle] pub extern "C" fn rmdir(path: *const c_char) -> c_int { - platform::rmdir(path) + Sys::rmdir(path) } #[no_mangle] pub extern "C" fn setgid(gid: gid_t) -> c_int { - platform::setregid(gid, gid) + Sys::setregid(gid, gid) } #[no_mangle] pub extern "C" fn setpgid(pid: pid_t, pgid: pid_t) -> c_int { - platform::setpgid(pid, pgid) + Sys::setpgid(pid, pgid) } // #[no_mangle] @@ -401,12 +402,12 @@ pub extern "C" fn setpgrp() -> pid_t { #[no_mangle] pub extern "C" fn setregid(rgid: gid_t, egid: gid_t) -> c_int { - platform::setregid(rgid, egid) + Sys::setregid(rgid, egid) } #[no_mangle] pub extern "C" fn setreuid(ruid: uid_t, euid: uid_t) -> c_int { - platform::setreuid(ruid, euid) + Sys::setreuid(ruid, euid) } // #[no_mangle] @@ -416,7 +417,7 @@ pub extern "C" fn setsid() -> pid_t { #[no_mangle] pub extern "C" fn setuid(uid: uid_t) -> c_int { - platform::setreuid(uid, uid) + Sys::setreuid(uid, uid) } #[no_mangle] @@ -426,7 +427,7 @@ pub extern "C" fn sleep(seconds: c_uint) -> c_uint { tv_nsec: 0, }; let rmtp = ptr::null_mut(); - platform::nanosleep(&rqtp, rmtp); + Sys::nanosleep(&rqtp, rmtp); 0 } @@ -502,7 +503,7 @@ pub extern "C" fn ualarm(value: useconds_t, interval: useconds_t) -> useconds_t #[no_mangle] pub extern "C" fn unlink(path: *const c_char) -> c_int { - platform::unlink(path) + Sys::unlink(path) } #[no_mangle] @@ -512,7 +513,7 @@ pub extern "C" fn usleep(useconds: useconds_t) -> c_int { tv_nsec: ((useconds % 1000) * 1000) as i64, }; let rmtp = ptr::null_mut(); - platform::nanosleep(&rqtp, rmtp) + Sys::nanosleep(&rqtp, rmtp) } // #[no_mangle] @@ -525,7 +526,7 @@ pub extern "C" fn write(fildes: c_int, buf: *const c_void, nbyte: size_t) -> ssi use core::slice; let buf = unsafe { slice::from_raw_parts(buf as *const u8, nbyte as usize) }; - platform::write(fildes, buf) + Sys::write(fildes, buf) } /* diff --git a/src/utime/src/lib.rs b/src/utime/src/lib.rs index cea8b06f8d..16ad0348f7 100644 --- a/src/utime/src/lib.rs +++ b/src/utime/src/lib.rs @@ -4,6 +4,7 @@ extern crate platform; +use platform::{Pal, Sys}; use platform::types::*; #[repr(C)] @@ -25,5 +26,5 @@ pub unsafe extern "C" fn utime(filename: *const c_char, times: *const utimbuf) - tv_nsec: 0, }, ]; - platform::utimens(filename, times_spec.as_ptr()) + Sys::utimens(filename, times_spec.as_ptr()) }