Revision control
Copy as Markdown
Other Tools
// defined in architecture specific module
use crate::prelude::*;
s! {
pub struct sockaddr_un {
pub sun_family: crate::sa_family_t,
pub sun_path: [c_char; 108usize],
}
}
pub const AF_UNIX: c_int = 1;
pub const RTLD_DEFAULT: *mut c_void = -2isize as *mut c_void;
pub const UTIME_OMIT: c_long = -1;
pub const AT_FDCWD: c_int = -2;
pub const O_DIRECTORY: c_int = 0x200000;
pub const O_NOFOLLOW: c_int = 0x100000;
pub const AT_EACCESS: c_int = 1;
pub const AT_SYMLINK_NOFOLLOW: c_int = 2;
pub const AT_SYMLINK_FOLLOW: c_int = 4;
pub const AT_REMOVEDIR: c_int = 8;
// signal.h
pub const SIG_BLOCK: c_int = 1;
pub const SIG_UNBLOCK: c_int = 2;
pub const SIG_SETMASK: c_int = 0;
pub const SIGHUP: c_int = 1;
pub const SIGINT: c_int = 2;
pub const SIGQUIT: c_int = 3;
pub const SIGILL: c_int = 4;
pub const SIGTRAP: c_int = 5;
pub const SIGABRT: c_int = 6;
pub const SIGEMT: c_int = 7;
pub const SIGFPE: c_int = 8;
pub const SIGKILL: c_int = 9;
pub const SIGBUS: c_int = 10;
pub const SIGSEGV: c_int = 11;
pub const SIGSYS: c_int = 12;
pub const SIGPIPE: c_int = 13;
pub const SIGALRM: c_int = 14;
pub const SIGTERM: c_int = 15;
pub const SIGURG: c_int = 16;
pub const SIGSTOP: c_int = 17;
pub const SIGTSTP: c_int = 18;
pub const SIGCONT: c_int = 19;
pub const SIGCHLD: c_int = 20;
pub const SIGCLD: c_int = 20;
pub const SIGTTIN: c_int = 21;
pub const SIGTTOU: c_int = 22;
pub const SIGIO: c_int = 23;
pub const SIGWINCH: c_int = 24;
pub const SIGUSR1: c_int = 25;
pub const SIGUSR2: c_int = 26;
pub const SIGRTMIN: c_int = 27;
pub const SIGRTMAX: c_int = 31;
pub const SIGXCPU: c_int = 24;
pub const SIGXFSZ: c_int = 25;
pub const SIGVTALRM: c_int = 26;
pub const SIGPROF: c_int = 27;
pub const SA_NOCLDSTOP: c_ulong = 0x00000001;
pub const SA_SIGINFO: c_ulong = 0x00000002;
pub const SA_ONSTACK: c_ulong = 0x00000004;
pub const EAI_AGAIN: c_int = 2;
pub const EAI_BADFLAGS: c_int = 3;
pub const EAI_FAIL: c_int = 4;
pub const EAI_SERVICE: c_int = 9;
pub const EAI_SYSTEM: c_int = 11;
pub const EAI_OVERFLOW: c_int = 14;
pub const _SC_PAGESIZE: c_int = 8;
pub const _SC_GETPW_R_SIZE_MAX: c_int = 51;
pub const PTHREAD_STACK_MIN: size_t = 0;
// sys/wait.h
pub const WNOHANG: c_int = 1;
pub const WUNTRACED: c_int = 2;
// sys/socket.h
pub const SOMAXCONN: c_int = 128;
safe_f! {
pub {const} fn WIFSTOPPED(status: c_int) -> bool {
(status & 0xff) == 0x7f
}
pub {const} fn WSTOPSIG(status: c_int) -> c_int {
// (status >> 8) & 0xff
WEXITSTATUS(status)
}
pub {const} fn WIFSIGNALED(status: c_int) -> bool {
((status & 0x7f) > 0) && ((status & 0x7f) < 0x7f)
}
pub {const} fn WTERMSIG(status: c_int) -> c_int {
status & 0x7f
}
pub {const} fn WIFEXITED(status: c_int) -> bool {
(status & 0xff) == 0
}
pub {const} fn WEXITSTATUS(status: c_int) -> c_int {
(status >> 8) & 0xff
}
// RTEMS doesn't have native WIFCONTINUED.
pub {const} fn WIFCONTINUED(_status: c_int) -> bool {
true
}
// RTEMS doesn't have native WCOREDUMP.
pub {const} fn WCOREDUMP(_status: c_int) -> bool {
false
}
}
extern "C" {
pub fn futimens(fd: c_int, times: *const crate::timespec) -> c_int;
pub fn writev(fd: c_int, iov: *const crate::iovec, iovcnt: c_int) -> ssize_t;
pub fn readv(fd: c_int, iov: *const crate::iovec, iovcnt: c_int) -> ssize_t;
pub fn pthread_create(
native: *mut crate::pthread_t,
attr: *const crate::pthread_attr_t,
f: extern "C" fn(_: *mut c_void) -> *mut c_void,
value: *mut c_void,
) -> c_int;
pub fn pthread_condattr_setclock(
attr: *mut crate::pthread_condattr_t,
clock_id: crate::clockid_t,
) -> c_int;
pub fn getentropy(buf: *mut c_void, buflen: size_t) -> c_int;
pub fn arc4random_buf(buf: *mut core::ffi::c_void, nbytes: size_t);
pub fn setgroups(ngroups: c_int, grouplist: *const crate::gid_t) -> c_int;
}