diff options
Diffstat (limited to 'vendor/libc/src/unix/solarish')
| -rw-r--r-- | vendor/libc/src/unix/solarish/compat.rs | 220 | ||||
| -rw-r--r-- | vendor/libc/src/unix/solarish/illumos.rs | 88 | ||||
| -rw-r--r-- | vendor/libc/src/unix/solarish/mod.rs | 3309 | ||||
| -rw-r--r-- | vendor/libc/src/unix/solarish/solaris.rs | 101 | ||||
| -rw-r--r-- | vendor/libc/src/unix/solarish/x86.rs | 29 | ||||
| -rw-r--r-- | vendor/libc/src/unix/solarish/x86_64.rs | 190 | ||||
| -rw-r--r-- | vendor/libc/src/unix/solarish/x86_common.rs | 65 | 
7 files changed, 4002 insertions, 0 deletions
diff --git a/vendor/libc/src/unix/solarish/compat.rs b/vendor/libc/src/unix/solarish/compat.rs new file mode 100644 index 0000000..cbf955a --- /dev/null +++ b/vendor/libc/src/unix/solarish/compat.rs @@ -0,0 +1,220 @@ +// Common functions that are unfortunately missing on illumos and +// Solaris, but often needed by other crates. + +use core::cmp::min; +use unix::solarish::*; + +const PTEM: &[u8] = b"ptem\0"; +const LDTERM: &[u8] = b"ldterm\0"; + +pub unsafe fn cfmakeraw(termios: *mut ::termios) { +    (*termios).c_iflag &= +        !(IMAXBEL | IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON); +    (*termios).c_oflag &= !OPOST; +    (*termios).c_lflag &= !(ECHO | ECHONL | ICANON | ISIG | IEXTEN); +    (*termios).c_cflag &= !(CSIZE | PARENB); +    (*termios).c_cflag |= CS8; + +    // By default, most software expects a pending read to block until at +    // least one byte becomes available.  As per termio(7I), this requires +    // setting the MIN and TIME parameters appropriately. +    // +    // As a somewhat unfortunate artefact of history, the MIN and TIME slots +    // in the control character array overlap with the EOF and EOL slots used +    // for canonical mode processing.  Because the EOF character needs to be +    // the ASCII EOT value (aka Control-D), it has the byte value 4.  When +    // switching to raw mode, this is interpreted as a MIN value of 4; i.e., +    // reads will block until at least four bytes have been input. +    // +    // Other platforms with a distinct MIN slot like Linux and FreeBSD appear +    // to default to a MIN value of 1, so we'll force that value here: +    (*termios).c_cc[VMIN] = 1; +    (*termios).c_cc[VTIME] = 0; +} + +pub unsafe fn cfsetspeed(termios: *mut ::termios, speed: ::speed_t) -> ::c_int { +    // Neither of these functions on illumos or Solaris actually ever +    // return an error +    ::cfsetispeed(termios, speed); +    ::cfsetospeed(termios, speed); +    0 +} + +unsafe fn bail(fdm: ::c_int, fds: ::c_int) -> ::c_int { +    let e = *___errno(); +    if fds >= 0 { +        ::close(fds); +    } +    if fdm >= 0 { +        ::close(fdm); +    } +    *___errno() = e; +    return -1; +} + +pub unsafe fn openpty( +    amain: *mut ::c_int, +    asubord: *mut ::c_int, +    name: *mut ::c_char, +    termp: *const termios, +    winp: *const ::winsize, +) -> ::c_int { +    // Open the main pseudo-terminal device, making sure not to set it as the +    // controlling terminal for this process: +    let fdm = ::posix_openpt(O_RDWR | O_NOCTTY); +    if fdm < 0 { +        return -1; +    } + +    // Set permissions and ownership on the subordinate device and unlock it: +    if ::grantpt(fdm) < 0 || ::unlockpt(fdm) < 0 { +        return bail(fdm, -1); +    } + +    // Get the path name of the subordinate device: +    let subordpath = ::ptsname(fdm); +    if subordpath.is_null() { +        return bail(fdm, -1); +    } + +    // Open the subordinate device without setting it as the controlling +    // terminal for this process: +    let fds = ::open(subordpath, O_RDWR | O_NOCTTY); +    if fds < 0 { +        return bail(fdm, -1); +    } + +    // Check if the STREAMS modules are already pushed: +    let setup = ::ioctl(fds, I_FIND, LDTERM.as_ptr()); +    if setup < 0 { +        return bail(fdm, fds); +    } else if setup == 0 { +        // The line discipline is not present, so push the appropriate STREAMS +        // modules for the subordinate device: +        if ::ioctl(fds, I_PUSH, PTEM.as_ptr()) < 0 || ::ioctl(fds, I_PUSH, LDTERM.as_ptr()) < 0 { +            return bail(fdm, fds); +        } +    } + +    // If provided, set the terminal parameters: +    if !termp.is_null() && ::tcsetattr(fds, TCSAFLUSH, termp) != 0 { +        return bail(fdm, fds); +    } + +    // If provided, set the window size: +    if !winp.is_null() && ::ioctl(fds, TIOCSWINSZ, winp) < 0 { +        return bail(fdm, fds); +    } + +    // If the caller wants the name of the subordinate device, copy it out. +    // +    // Note that this is a terrible interface: there appears to be no standard +    // upper bound on the copy length for this pointer.  Nobody should pass +    // anything but NULL here, preferring instead to use ptsname(3C) directly. +    if !name.is_null() { +        ::strcpy(name, subordpath); +    } + +    *amain = fdm; +    *asubord = fds; +    0 +} + +pub unsafe fn forkpty( +    amain: *mut ::c_int, +    name: *mut ::c_char, +    termp: *const termios, +    winp: *const ::winsize, +) -> ::pid_t { +    let mut fds = -1; + +    if openpty(amain, &mut fds, name, termp, winp) != 0 { +        return -1; +    } + +    let pid = ::fork(); +    if pid < 0 { +        return bail(*amain, fds); +    } else if pid > 0 { +        // In the parent process, we close the subordinate device and return the +        // process ID of the new child: +        ::close(fds); +        return pid; +    } + +    // The rest of this function executes in the child process. + +    // Close the main side of the pseudo-terminal pair: +    ::close(*amain); + +    // Use TIOCSCTTY to set the subordinate device as our controlling +    // terminal.  This will fail (with ENOTTY) if we are not the leader in +    // our own session, so we call setsid() first.  Finally, arrange for +    // the pseudo-terminal to occupy the standard I/O descriptors. +    if ::setsid() < 0 +        || ::ioctl(fds, TIOCSCTTY, 0) < 0 +        || ::dup2(fds, 0) < 0 +        || ::dup2(fds, 1) < 0 +        || ::dup2(fds, 2) < 0 +    { +        // At this stage there are no particularly good ways to handle failure. +        // Exit as abruptly as possible, using _exit() to avoid messing with any +        // state still shared with the parent process. +        ::_exit(EXIT_FAILURE); +    } +    // Close the inherited descriptor, taking care to avoid closing the standard +    // descriptors by mistake: +    if fds > 2 { +        ::close(fds); +    } + +    0 +} + +pub unsafe fn getpwent_r( +    pwd: *mut passwd, +    buf: *mut ::c_char, +    buflen: ::size_t, +    result: *mut *mut passwd, +) -> ::c_int { +    let old_errno = *::___errno(); +    *::___errno() = 0; +    *result = native_getpwent_r( +        pwd, +        buf, +        min(buflen, ::c_int::max_value() as ::size_t) as ::c_int, +    ); + +    let ret = if (*result).is_null() { +        *::___errno() +    } else { +        0 +    }; +    *::___errno() = old_errno; + +    ret +} + +pub unsafe fn getgrent_r( +    grp: *mut ::group, +    buf: *mut ::c_char, +    buflen: ::size_t, +    result: *mut *mut ::group, +) -> ::c_int { +    let old_errno = *::___errno(); +    *::___errno() = 0; +    *result = native_getgrent_r( +        grp, +        buf, +        min(buflen, ::c_int::max_value() as ::size_t) as ::c_int, +    ); + +    let ret = if (*result).is_null() { +        *::___errno() +    } else { +        0 +    }; +    *::___errno() = old_errno; + +    ret +} diff --git a/vendor/libc/src/unix/solarish/illumos.rs b/vendor/libc/src/unix/solarish/illumos.rs new file mode 100644 index 0000000..404f013 --- /dev/null +++ b/vendor/libc/src/unix/solarish/illumos.rs @@ -0,0 +1,88 @@ +s! { +    pub struct shmid_ds { +        pub shm_perm: ::ipc_perm, +        pub shm_segsz: ::size_t, +        pub shm_amp: *mut ::c_void, +        pub shm_lkcnt: ::c_ushort, +        pub shm_lpid: ::pid_t, +        pub shm_cpid: ::pid_t, +        pub shm_nattch: ::shmatt_t, +        pub shm_cnattch: ::c_ulong, +        pub shm_atime: ::time_t, +        pub shm_dtime: ::time_t, +        pub shm_ctime: ::time_t, +        pub shm_pad4: [i64; 4], +    } + +    pub struct fil_info { +        pub fi_flags: ::c_int, +        pub fi_pos: ::c_int, +        pub fi_name: [::c_char; ::FILNAME_MAX as usize], +    } +} + +pub const AF_LOCAL: ::c_int = 1; // AF_UNIX +pub const AF_FILE: ::c_int = 1; // AF_UNIX + +pub const EFD_SEMAPHORE: ::c_int = 0x1; +pub const EFD_NONBLOCK: ::c_int = 0x800; +pub const EFD_CLOEXEC: ::c_int = 0x80000; + +pub const TCP_KEEPIDLE: ::c_int = 34; +pub const TCP_KEEPCNT: ::c_int = 35; +pub const TCP_KEEPINTVL: ::c_int = 36; +pub const TCP_CONGESTION: ::c_int = 37; + +// These constants are correct for 64-bit programs or 32-bit programs that are +// not using large-file mode.  If Rust ever supports anything other than 64-bit +// compilation on illumos, this may require adjustment: +pub const F_OFD_GETLK: ::c_int = 47; +pub const F_OFD_SETLK: ::c_int = 48; +pub const F_OFD_SETLKW: ::c_int = 49; +pub const F_FLOCK: ::c_int = 53; +pub const F_FLOCKW: ::c_int = 54; + +pub const F_DUPFD_CLOEXEC: ::c_int = 37; +pub const F_DUP2FD_CLOEXEC: ::c_int = 36; + +pub const FIL_ATTACH: ::c_int = 0x1; +pub const FIL_DETACH: ::c_int = 0x2; +pub const FIL_LIST: ::c_int = 0x3; +pub const FILNAME_MAX: ::c_int = 32; +pub const FILF_PROG: ::c_int = 0x1; +pub const FILF_AUTO: ::c_int = 0x2; +pub const FILF_BYPASS: ::c_int = 0x4; +pub const SOL_FILTER: ::c_int = 0xfffc; + +pub const MADV_PURGE: ::c_int = 9; + +pub const B1000000: ::speed_t = 24; +pub const B1152000: ::speed_t = 25; +pub const B1500000: ::speed_t = 26; +pub const B2000000: ::speed_t = 27; +pub const B2500000: ::speed_t = 28; +pub const B3000000: ::speed_t = 29; +pub const B3500000: ::speed_t = 30; +pub const B4000000: ::speed_t = 31; + +// sys/systeminfo.h +pub const SI_ADDRESS_WIDTH: ::c_int = 520; + +extern "C" { +    pub fn eventfd(init: ::c_uint, flags: ::c_int) -> ::c_int; + +    pub fn mincore(addr: ::caddr_t, len: ::size_t, vec: *mut ::c_char) -> ::c_int; + +    pub fn pset_bind_lwp( +        pset: ::psetid_t, +        id: ::id_t, +        pid: ::pid_t, +        opset: *mut ::psetid_t, +    ) -> ::c_int; +    pub fn pset_getloadavg(pset: ::psetid_t, load: *mut ::c_double, num: ::c_int) -> ::c_int; + +    pub fn preadv(fd: ::c_int, iov: *const ::iovec, iovcnt: ::c_int, offset: ::off_t) -> ::ssize_t; +    pub fn pwritev(fd: ::c_int, iov: *const ::iovec, iovcnt: ::c_int, offset: ::off_t) +        -> ::ssize_t; +    pub fn getpagesizes2(pagesize: *mut ::size_t, nelem: ::c_int) -> ::c_int; +} diff --git a/vendor/libc/src/unix/solarish/mod.rs b/vendor/libc/src/unix/solarish/mod.rs new file mode 100644 index 0000000..c68cfba --- /dev/null +++ b/vendor/libc/src/unix/solarish/mod.rs @@ -0,0 +1,3309 @@ +pub type c_char = i8; +pub type c_long = i64; +pub type c_ulong = u64; +pub type caddr_t = *mut ::c_char; + +pub type clockid_t = ::c_int; +pub type blkcnt_t = ::c_long; +pub type clock_t = ::c_long; +pub type daddr_t = ::c_long; +pub type dev_t = ::c_ulong; +pub type fsblkcnt_t = ::c_ulong; +pub type fsfilcnt_t = ::c_ulong; +pub type ino_t = ::c_ulong; +pub type key_t = ::c_int; +pub type major_t = ::c_uint; +pub type minor_t = ::c_uint; +pub type mode_t = ::c_uint; +pub type nlink_t = ::c_uint; +pub type rlim_t = ::c_ulong; +pub type speed_t = ::c_uint; +pub type tcflag_t = ::c_uint; +pub type time_t = ::c_long; +pub type timer_t = ::c_int; +pub type wchar_t = ::c_int; +pub type nfds_t = ::c_ulong; +pub type projid_t = ::c_int; +pub type zoneid_t = ::c_int; +pub type psetid_t = ::c_int; +pub type processorid_t = ::c_int; +pub type chipid_t = ::c_int; +pub type ctid_t = ::id_t; + +pub type suseconds_t = ::c_long; +pub type off_t = ::c_long; +pub type useconds_t = ::c_uint; +pub type socklen_t = ::c_uint; +pub type sa_family_t = u16; +pub type pthread_t = ::c_uint; +pub type pthread_key_t = ::c_uint; +pub type thread_t = ::c_uint; +pub type blksize_t = ::c_int; +pub type nl_item = ::c_int; +pub type mqd_t = *mut ::c_void; +pub type id_t = ::c_int; +pub type idtype_t = ::c_uint; +pub type shmatt_t = ::c_ulong; + +pub type lgrp_rsrc_t = ::c_int; +pub type lgrp_affinity_t = ::c_int; +pub type lgrp_id_t = ::id_t; +pub type lgrp_mem_size_t = ::c_longlong; +pub type lgrp_cookie_t = ::uintptr_t; +pub type lgrp_content_t = ::c_uint; +pub type lgrp_lat_between_t = ::c_uint; +pub type lgrp_mem_size_flag_t = ::c_uint; +pub type lgrp_view_t = ::c_uint; + +#[cfg_attr(feature = "extra_traits", derive(Debug))] +pub enum timezone {} +impl ::Copy for timezone {} +impl ::Clone for timezone { +    fn clone(&self) -> timezone { +        *self +    } +} + +#[cfg_attr(feature = "extra_traits", derive(Debug))] +pub enum ucred_t {} +impl ::Copy for ucred_t {} +impl ::Clone for ucred_t { +    fn clone(&self) -> ucred_t { +        *self +    } +} + +s! { +    pub struct in_addr { +        pub s_addr: ::in_addr_t, +    } + +    pub struct ip_mreq { +        pub imr_multiaddr: in_addr, +        pub imr_interface: in_addr, +    } + +    pub struct ip_mreq_source { +        pub imr_multiaddr: in_addr, +        pub imr_sourceaddr: in_addr, +        pub imr_interface: in_addr, +    } + +    pub struct ipc_perm { +        pub uid: ::uid_t, +        pub gid: ::gid_t, +        pub cuid: ::uid_t, +        pub cgid: ::gid_t, +        pub mode: ::mode_t, +        pub seq: ::c_uint, +        pub key: ::key_t, +    } + +    pub struct sockaddr { +        pub sa_family: sa_family_t, +        pub sa_data: [::c_char; 14], +    } + +    pub struct sockaddr_in { +        pub sin_family: sa_family_t, +        pub sin_port: ::in_port_t, +        pub sin_addr: ::in_addr, +        pub sin_zero: [::c_char; 8] +    } + +    pub struct sockaddr_in6 { +        pub sin6_family: sa_family_t, +        pub sin6_port: ::in_port_t, +        pub sin6_flowinfo: u32, +        pub sin6_addr: ::in6_addr, +        pub sin6_scope_id: u32, +        pub __sin6_src_id: u32 +    } + +    pub struct passwd { +        pub pw_name: *mut ::c_char, +        pub pw_passwd: *mut ::c_char, +        pub pw_uid: ::uid_t, +        pub pw_gid: ::gid_t, +        pub pw_age: *mut ::c_char, +        pub pw_comment: *mut ::c_char, +        pub pw_gecos: *mut ::c_char, +        pub pw_dir: *mut ::c_char, +        pub pw_shell: *mut ::c_char +    } + +    pub struct ifaddrs { +        pub ifa_next: *mut ifaddrs, +        pub ifa_name: *mut ::c_char, +        pub ifa_flags: ::c_ulong, +        pub ifa_addr: *mut ::sockaddr, +        pub ifa_netmask: *mut ::sockaddr, +        pub ifa_dstaddr: *mut ::sockaddr, +        pub ifa_data: *mut ::c_void +    } + +    pub struct itimerspec { +        pub it_interval: ::timespec, +        pub it_value: ::timespec, +    } + +    pub struct tm { +        pub tm_sec: ::c_int, +        pub tm_min: ::c_int, +        pub tm_hour: ::c_int, +        pub tm_mday: ::c_int, +        pub tm_mon: ::c_int, +        pub tm_year: ::c_int, +        pub tm_wday: ::c_int, +        pub tm_yday: ::c_int, +        pub tm_isdst: ::c_int +    } + +     pub struct msghdr { +        pub msg_name: *mut ::c_void, +        pub msg_namelen: ::socklen_t, +        pub msg_iov: *mut ::iovec, +        pub msg_iovlen: ::c_int, +        pub msg_control: *mut ::c_void, +        pub msg_controllen: ::socklen_t, +        pub msg_flags: ::c_int, +    } + +    pub struct cmsghdr { +        pub cmsg_len: ::socklen_t, +        pub cmsg_level: ::c_int, +        pub cmsg_type: ::c_int, +    } + +    pub struct pthread_attr_t { +        __pthread_attrp: *mut ::c_void +    } + +    pub struct pthread_mutex_t { +        __pthread_mutex_flag1: u16, +        __pthread_mutex_flag2: u8, +        __pthread_mutex_ceiling: u8, +        __pthread_mutex_type: u16, +        __pthread_mutex_magic: u16, +        __pthread_mutex_lock: u64, +        __pthread_mutex_data: u64 +    } + +    pub struct pthread_mutexattr_t { +        __pthread_mutexattrp: *mut ::c_void +    } + +    pub struct pthread_cond_t { +        __pthread_cond_flag: [u8; 4], +        __pthread_cond_type: u16, +        __pthread_cond_magic: u16, +        __pthread_cond_data: u64 +    } + +    pub struct pthread_condattr_t { +        __pthread_condattrp: *mut ::c_void, +    } + +    pub struct pthread_rwlock_t { +        __pthread_rwlock_readers: i32, +        __pthread_rwlock_type: u16, +        __pthread_rwlock_magic: u16, +        __pthread_rwlock_mutex: ::pthread_mutex_t, +        __pthread_rwlock_readercv: ::pthread_cond_t, +        __pthread_rwlock_writercv: ::pthread_cond_t +    } + +    pub struct pthread_rwlockattr_t { +        __pthread_rwlockattrp: *mut ::c_void, +    } + +    pub struct dirent { +        pub d_ino: ::ino_t, +        pub d_off: ::off_t, +        pub d_reclen: u16, +        pub d_name: [::c_char; 3] +    } + +    pub struct glob_t { +        pub gl_pathc: ::size_t, +        pub gl_pathv:  *mut *mut ::c_char, +        pub gl_offs: ::size_t, +        __unused1: *mut ::c_void, +        __unused2: ::c_int, +        __unused3: ::c_int, +        __unused4: ::c_int, +        __unused5: *mut ::c_void, +        __unused6: *mut ::c_void, +        __unused7: *mut ::c_void, +        __unused8: *mut ::c_void, +        __unused9: *mut ::c_void, +        __unused10: *mut ::c_void, +    } + +    pub struct addrinfo { +        pub ai_flags: ::c_int, +        pub ai_family: ::c_int, +        pub ai_socktype: ::c_int, +        pub ai_protocol: ::c_int, +        #[cfg(target_arch = "sparc64")] +        __sparcv9_pad: ::c_int, +        pub ai_addrlen: ::socklen_t, +        pub ai_canonname: *mut ::c_char, +        pub ai_addr: *mut ::sockaddr, +        pub ai_next: *mut addrinfo, +    } + +    pub struct sigset_t { +        bits: [u32; 4], +    } + +    pub struct sigaction { +        pub sa_flags: ::c_int, +        pub sa_sigaction: ::sighandler_t, +        pub sa_mask: sigset_t, +    } + +    pub struct stack_t { +        pub ss_sp: *mut ::c_void, +        pub ss_size: ::size_t, +        pub ss_flags: ::c_int, +    } + +    pub struct statvfs { +        pub f_bsize: ::c_ulong, +        pub f_frsize: ::c_ulong, +        pub f_blocks: ::fsblkcnt_t, +        pub f_bfree: ::fsblkcnt_t, +        pub f_bavail: ::fsblkcnt_t, +        pub f_files: ::fsfilcnt_t, +        pub f_ffree: ::fsfilcnt_t, +        pub f_favail: ::fsfilcnt_t, +        pub f_fsid: ::c_ulong, +        pub f_basetype: [::c_char; 16], +        pub f_flag: ::c_ulong, +        pub f_namemax: ::c_ulong, +        pub f_fstr: [::c_char; 32] +    } + +    pub struct sendfilevec_t { +        pub sfv_fd: ::c_int, +        pub sfv_flag: ::c_uint, +        pub sfv_off: ::off_t, +        pub sfv_len: ::size_t, +    } + +    pub struct sched_param { +        pub sched_priority: ::c_int, +        sched_pad: [::c_int; 8] +    } + +    pub struct Dl_info { +        pub dli_fname: *const ::c_char, +        pub dli_fbase: *mut ::c_void, +        pub dli_sname: *const ::c_char, +        pub dli_saddr: *mut ::c_void, +    } + +    pub struct stat { +        pub st_dev: ::dev_t, +        pub st_ino: ::ino_t, +        pub st_mode: ::mode_t, +        pub st_nlink: ::nlink_t, +        pub st_uid: ::uid_t, +        pub st_gid: ::gid_t, +        pub st_rdev: ::dev_t, +        pub st_size: ::off_t, +        pub st_atime: ::time_t, +        pub st_atime_nsec: ::c_long, +        pub st_mtime: ::time_t, +        pub st_mtime_nsec: ::c_long, +        pub st_ctime: ::time_t, +        pub st_ctime_nsec: ::c_long, +        pub st_blksize: ::blksize_t, +        pub st_blocks: ::blkcnt_t, +        __unused: [::c_char; 16] +    } + +    pub struct termios { +        pub c_iflag: ::tcflag_t, +        pub c_oflag: ::tcflag_t, +        pub c_cflag: ::tcflag_t, +        pub c_lflag: ::tcflag_t, +        pub c_cc: [::cc_t; ::NCCS] +    } + +    pub struct lconv { +        pub decimal_point: *mut ::c_char, +        pub thousands_sep: *mut ::c_char, +        pub grouping: *mut ::c_char, +        pub int_curr_symbol: *mut ::c_char, +        pub currency_symbol: *mut ::c_char, +        pub mon_decimal_point: *mut ::c_char, +        pub mon_thousands_sep: *mut ::c_char, +        pub mon_grouping: *mut ::c_char, +        pub positive_sign: *mut ::c_char, +        pub negative_sign: *mut ::c_char, +        pub int_frac_digits: ::c_char, +        pub frac_digits: ::c_char, +        pub p_cs_precedes: ::c_char, +        pub p_sep_by_space: ::c_char, +        pub n_cs_precedes: ::c_char, +        pub n_sep_by_space: ::c_char, +        pub p_sign_posn: ::c_char, +        pub n_sign_posn: ::c_char, +        pub int_p_cs_precedes: ::c_char, +        pub int_p_sep_by_space: ::c_char, +        pub int_n_cs_precedes: ::c_char, +        pub int_n_sep_by_space: ::c_char, +        pub int_p_sign_posn: ::c_char, +        pub int_n_sign_posn: ::c_char, +    } + +    pub struct sem_t { +        pub sem_count: u32, +        pub sem_type: u16, +        pub sem_magic: u16, +        pub sem_pad1: [u64; 3], +        pub sem_pad2: [u64; 2] +    } + +    pub struct flock { +        pub l_type: ::c_short, +        pub l_whence: ::c_short, +        pub l_start: ::off_t, +        pub l_len: ::off_t, +        pub l_sysid: ::c_int, +        pub l_pid: ::pid_t, +        pub l_pad: [::c_long; 4] +    } + +    pub struct if_nameindex { +        pub if_index: ::c_uint, +        pub if_name: *mut ::c_char, +    } + +    pub struct mq_attr { +        pub mq_flags: ::c_long, +        pub mq_maxmsg: ::c_long, +        pub mq_msgsize: ::c_long, +        pub mq_curmsgs: ::c_long, +        _pad: [::c_int; 12] +    } + +    pub struct port_event { +        pub portev_events: ::c_int, +        pub portev_source: ::c_ushort, +        pub portev_pad: ::c_ushort, +        pub portev_object: ::uintptr_t, +        pub portev_user: *mut ::c_void, +    } + +    pub struct port_notify { +        pub portnfy_port: ::c_int, +        pub portnfy_user: *mut ::c_void, +    } + +    pub struct exit_status { +        e_termination: ::c_short, +        e_exit: ::c_short, +    } + +    pub struct utmp { +        pub ut_user: [::c_char; 8], +        pub ut_id: [::c_char; 4], +        pub ut_line: [::c_char; 12], +        pub ut_pid: ::c_short, +        pub ut_type: ::c_short, +        pub ut_exit: exit_status, +        pub ut_time: ::time_t, +    } + +    pub struct timex { +        pub modes: u32, +        pub offset: i32, +        pub freq: i32, +        pub maxerror: i32, +        pub esterror: i32, +        pub status: i32, +        pub constant: i32, +        pub precision: i32, +        pub tolerance: i32, +        pub ppsfreq: i32, +        pub jitter: i32, +        pub shift: i32, +        pub stabil: i32, +        pub jitcnt: i32, +        pub calcnt: i32, +        pub errcnt: i32, +        pub stbcnt: i32, +    } + +    pub struct ntptimeval { +        pub time: ::timeval, +        pub maxerror: i32, +        pub esterror: i32, +    } + +    pub struct mmapobj_result_t { +        pub mr_addr: ::caddr_t, +        pub mr_msize: ::size_t, +        pub mr_fsize: ::size_t, +        pub mr_offset: ::size_t, +        pub mr_prot: ::c_uint, +        pub mr_flags: ::c_uint, +    } + +    pub struct lgrp_affinity_args { +        pub idtype: ::idtype_t, +        pub id: ::id_t, +        pub lgrp: ::lgrp_id_t, +        pub aff: ::lgrp_affinity_t, +    } + +    pub struct processor_info_t { +        pub pi_state: ::c_int, +        pub pi_processor_type: [::c_char; PI_TYPELEN as usize], +        pub pi_fputypes: [::c_char; PI_FPUTYPE as usize], +        pub pi_clock: ::c_int, +    } + +    pub struct option { +        pub name: *const ::c_char, +        pub has_arg: ::c_int, +        pub flag: *mut ::c_int, +        pub val: ::c_int, +    } +} + +s_no_extra_traits! { +    #[cfg_attr(all( +            any(target_arch = "x86", target_arch = "x86_64"), +            libc_packedN +        ), repr(packed(4)))] +    #[cfg_attr(all( +            any(target_arch = "x86", target_arch = "x86_64"), +            not(libc_packedN) +        ), repr(packed))] +    pub struct epoll_event { +        pub events: u32, +        pub u64: u64, +    } + +    pub struct utmpx { +        pub ut_user: [::c_char; _UTX_USERSIZE], +        pub ut_id: [::c_char; _UTX_IDSIZE], +        pub ut_line: [::c_char; _UTX_LINESIZE], +        pub ut_pid: ::pid_t, +        pub ut_type: ::c_short, +        pub ut_exit: exit_status, +        pub ut_tv: ::timeval, +        pub ut_session: ::c_int, +        pub ut_pad: [::c_int; _UTX_PADSIZE], +        pub ut_syslen: ::c_short, +        pub ut_host: [::c_char; _UTX_HOSTSIZE], +    } + +    pub struct sockaddr_un { +        pub sun_family: sa_family_t, +        pub sun_path: [c_char; 108] +    } + +    pub struct utsname { +        pub sysname: [::c_char; 257], +        pub nodename: [::c_char; 257], +        pub release: [::c_char; 257], +        pub version: [::c_char; 257], +        pub machine: [::c_char; 257], +    } + +    pub struct fd_set { +        #[cfg(target_pointer_width = "64")] +        fds_bits: [i64; FD_SETSIZE / 64], +        #[cfg(target_pointer_width = "32")] +        fds_bits: [i32; FD_SETSIZE / 32], +    } + +    pub struct sockaddr_storage { +        pub ss_family: ::sa_family_t, +        __ss_pad1: [u8; 6], +        __ss_align: i64, +        __ss_pad2: [u8; 240], +    } + +    #[cfg_attr(all(target_pointer_width = "64", libc_align), repr(align(8)))] +    pub struct siginfo_t { +        pub si_signo: ::c_int, +        pub si_code: ::c_int, +        pub si_errno: ::c_int, +        #[cfg(target_pointer_width = "64")] +        pub si_pad: ::c_int, + +        __data_pad: [::c_int; SIGINFO_DATA_SIZE], +    } + +    pub struct sockaddr_dl { +        pub sdl_family: ::c_ushort, +        pub sdl_index: ::c_ushort, +        pub sdl_type: ::c_uchar, +        pub sdl_nlen: ::c_uchar, +        pub sdl_alen: ::c_uchar, +        pub sdl_slen: ::c_uchar, +        pub sdl_data: [::c_char; 244], +    } + +    pub struct sigevent { +        pub sigev_notify: ::c_int, +        pub sigev_signo: ::c_int, +        pub sigev_value: ::sigval, +        pub ss_sp: *mut ::c_void, +        pub sigev_notify_attributes: *const ::pthread_attr_t, +        __sigev_pad2: ::c_int, +    } + +    #[cfg(libc_union)] +    #[cfg_attr(libc_align, repr(align(16)))] +    pub union pad128_t { +        // pub _q in this structure would be a "long double", of 16 bytes +        pub _l: [i32; 4], +    } + +    #[cfg(libc_union)] +    #[cfg_attr(libc_align, repr(align(16)))] +    pub union upad128_t { +        // pub _q in this structure would be a "long double", of 16 bytes +        pub _l: [u32; 4], +    } +} + +cfg_if! { +    if #[cfg(feature = "extra_traits")] { +        impl PartialEq for utmpx { +            fn eq(&self, other: &utmpx) -> bool { +                self.ut_type == other.ut_type +                    && self.ut_pid == other.ut_pid +                    && self.ut_user == other.ut_user +                    && self.ut_line == other.ut_line +                    && self.ut_id == other.ut_id +                    && self.ut_exit == other.ut_exit +                    && self.ut_session == other.ut_session +                    && self.ut_tv == other.ut_tv +                    && self.ut_syslen == other.ut_syslen +                    && self.ut_pad == other.ut_pad +                    && self +                    .ut_host +                    .iter() +                    .zip(other.ut_host.iter()) +                    .all(|(a,b)| a == b) +            } +        } + +        impl Eq for utmpx {} + +        impl ::fmt::Debug for utmpx { +            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { +                f.debug_struct("utmpx") +                    .field("ut_user", &self.ut_user) +                    .field("ut_id", &self.ut_id) +                    .field("ut_line", &self.ut_line) +                    .field("ut_pid", &self.ut_pid) +                    .field("ut_type", &self.ut_type) +                    .field("ut_exit", &self.ut_exit) +                    .field("ut_tv", &self.ut_tv) +                    .field("ut_session", &self.ut_session) +                    .field("ut_pad", &self.ut_pad) +                    .field("ut_syslen", &self.ut_syslen) +                    .field("ut_host", &&self.ut_host[..]) +                    .finish() +            } +        } + +        impl ::hash::Hash for utmpx { +            fn hash<H: ::hash::Hasher>(&self, state: &mut H) { +                self.ut_user.hash(state); +                self.ut_type.hash(state); +                self.ut_pid.hash(state); +                self.ut_line.hash(state); +                self.ut_id.hash(state); +                self.ut_host.hash(state); +                self.ut_exit.hash(state); +                self.ut_session.hash(state); +                self.ut_tv.hash(state); +                self.ut_syslen.hash(state); +                self.ut_pad.hash(state); +            } +        } + +        impl PartialEq for epoll_event { +            fn eq(&self, other: &epoll_event) -> bool { +                self.events == other.events +                    && self.u64 == other.u64 +            } +        } +        impl Eq for epoll_event {} +        impl ::fmt::Debug for epoll_event { +            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { +                let events = self.events; +                let u64 = self.u64; +                f.debug_struct("epoll_event") +                    .field("events", &events) +                    .field("u64", &u64) +                    .finish() +            } +        } +        impl ::hash::Hash for epoll_event { +            fn hash<H: ::hash::Hasher>(&self, state: &mut H) { +                let events = self.events; +                let u64 = self.u64; +                events.hash(state); +                u64.hash(state); +            } +        } + +        impl PartialEq for sockaddr_un { +            fn eq(&self, other: &sockaddr_un) -> bool { +                self.sun_family == other.sun_family +                    && self +                    .sun_path +                    .iter() +                    .zip(other.sun_path.iter()) +                    .all(|(a, b)| a == b) +            } +        } +        impl Eq for sockaddr_un {} +        impl ::fmt::Debug for sockaddr_un { +            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { +                f.debug_struct("sockaddr_un") +                    .field("sun_family", &self.sun_family) +                    // FIXME: .field("sun_path", &self.sun_path) +                    .finish() +            } +        } +        impl ::hash::Hash for sockaddr_un { +            fn hash<H: ::hash::Hasher>(&self, state: &mut H) { +                self.sun_family.hash(state); +                self.sun_path.hash(state); +            } +        } + +        impl PartialEq for utsname { +            fn eq(&self, other: &utsname) -> bool { +                self.sysname +                    .iter() +                    .zip(other.sysname.iter()) +                    .all(|(a, b)| a == b) +                    && self +                    .nodename +                    .iter() +                    .zip(other.nodename.iter()) +                    .all(|(a, b)| a == b) +                    && self +                    .release +                    .iter() +                    .zip(other.release.iter()) +                    .all(|(a, b)| a == b) +                    && self +                    .version +                    .iter() +                    .zip(other.version.iter()) +                    .all(|(a, b)| a == b) +                    && self +                    .machine +                    .iter() +                    .zip(other.machine.iter()) +                    .all(|(a, b)| a == b) +            } +        } +        impl Eq for utsname {} +        impl ::fmt::Debug for utsname { +            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { +                f.debug_struct("utsname") +                    // FIXME: .field("sysname", &self.sysname) +                    // FIXME: .field("nodename", &self.nodename) +                    // FIXME: .field("release", &self.release) +                    // FIXME: .field("version", &self.version) +                    // FIXME: .field("machine", &self.machine) +                    .finish() +            } +        } +        impl ::hash::Hash for utsname { +            fn hash<H: ::hash::Hasher>(&self, state: &mut H) { +                self.sysname.hash(state); +                self.nodename.hash(state); +                self.release.hash(state); +                self.version.hash(state); +                self.machine.hash(state); +            } +        } + +        impl PartialEq for fd_set { +            fn eq(&self, other: &fd_set) -> bool { +                self.fds_bits +                    .iter() +                    .zip(other.fds_bits.iter()) +                    .all(|(a, b)| a == b) +            } +        } +        impl Eq for fd_set {} +        impl ::fmt::Debug for fd_set { +            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { +                f.debug_struct("fd_set") +                    // FIXME: .field("fds_bits", &self.fds_bits) +                    .finish() +            } +        } +        impl ::hash::Hash for fd_set { +            fn hash<H: ::hash::Hasher>(&self, state: &mut H) { +                self.fds_bits.hash(state); +            } +        } + +        impl PartialEq for sockaddr_storage { +            fn eq(&self, other: &sockaddr_storage) -> bool { +                self.ss_family == other.ss_family +                    && self.__ss_pad1 == other.__ss_pad1 +                    && self.__ss_align == other.__ss_align +                    && self +                    .__ss_pad2 +                    .iter() +                    .zip(other.__ss_pad2.iter()) +                    .all(|(a, b)| a == b) +            } +        } +        impl Eq for sockaddr_storage {} +        impl ::fmt::Debug for sockaddr_storage { +            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { +                f.debug_struct("sockaddr_storage") +                    .field("ss_family", &self.ss_family) +                    .field("__ss_pad1", &self.__ss_pad1) +                    .field("__ss_align", &self.__ss_align) +                    // FIXME: .field("__ss_pad2", &self.__ss_pad2) +                    .finish() +            } +        } +        impl ::hash::Hash for sockaddr_storage { +            fn hash<H: ::hash::Hasher>(&self, state: &mut H) { +                self.ss_family.hash(state); +                self.__ss_pad1.hash(state); +                self.__ss_align.hash(state); +                self.__ss_pad2.hash(state); +            } +        } + +        impl siginfo_t { +            /// The siginfo_t will have differing contents based on the delivered signal.  Based on +            /// `si_signo`, this determines how many of the `c_int` pad fields contain valid data +            /// exposed by the C unions. +            /// +            /// It is not yet exhausitive for the OS-defined types, and defaults to assuming the +            /// entire data pad area is "valid" for otherwise unrecognized signal numbers. +            fn data_field_count(&self) -> usize { +                match self.si_signo { +                    ::SIGSEGV | ::SIGBUS | ::SIGILL | ::SIGTRAP | ::SIGFPE => { +                        ::mem::size_of::<siginfo_fault>() / ::mem::size_of::<::c_int>() +                    } +                    ::SIGCLD => ::mem::size_of::<siginfo_sigcld>() / ::mem::size_of::<::c_int>(), +                    ::SIGHUP +                    | ::SIGINT +                    | ::SIGQUIT +                    | ::SIGABRT +                    | ::SIGSYS +                    | ::SIGPIPE +                    | ::SIGALRM +                    | ::SIGTERM +                    | ::SIGUSR1 +                    | ::SIGUSR2 +                    | ::SIGPWR +                    | ::SIGWINCH +                    | ::SIGURG => ::mem::size_of::<siginfo_kill>() / ::mem::size_of::<::c_int>(), +                    _ => SIGINFO_DATA_SIZE, +                } +            } +        } +        impl PartialEq for siginfo_t { +            fn eq(&self, other: &siginfo_t) -> bool { +                if self.si_signo == other.si_signo +                    && self.si_code == other.si_code +                    && self.si_errno == other.si_errno { +                        // FIXME: The `si_pad` field in the 64-bit version of the struct is ignored +                        // (for now) when doing comparisons. + +                        let field_count = self.data_field_count(); +                        self.__data_pad[..field_count] +                            .iter() +                            .zip(other.__data_pad[..field_count].iter()) +                            .all(|(a, b)| a == b) +                } else { +                    false +                } +            } +        } +        impl Eq for siginfo_t {} +        impl ::fmt::Debug for siginfo_t { +            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { +                f.debug_struct("siginfo_t") +                    .field("si_signo", &self.si_signo) +                    .field("si_code", &self.si_code) +                    .field("si_errno", &self.si_errno) +                    // FIXME: .field("__pad", &self.__pad) +                    .finish() +            } +        } +        impl ::hash::Hash for siginfo_t { +            fn hash<H: ::hash::Hasher>(&self, state: &mut H) { +                self.si_signo.hash(state); +                self.si_code.hash(state); +                self.si_errno.hash(state); + +                // FIXME: The `si_pad` field in the 64-bit version of the struct is ignored +                // (for now) when doing hashing. + +                let field_count = self.data_field_count(); +                self.__data_pad[..field_count].hash(state) +            } +        } + +        impl PartialEq for sockaddr_dl { +            fn eq(&self, other: &sockaddr_dl) -> bool { +                self.sdl_family == other.sdl_family +                    && self.sdl_index == other.sdl_index +                    && self.sdl_type == other.sdl_type +                    && self.sdl_nlen == other.sdl_nlen +                    && self.sdl_alen == other.sdl_alen +                    && self.sdl_slen == other.sdl_slen +                    && self +                    .sdl_data +                    .iter() +                    .zip(other.sdl_data.iter()) +                    .all(|(a,b)| a == b) +            } +        } +        impl Eq for sockaddr_dl {} +        impl ::fmt::Debug for sockaddr_dl { +            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { +                f.debug_struct("sockaddr_dl") +                    .field("sdl_family", &self.sdl_family) +                    .field("sdl_index", &self.sdl_index) +                    .field("sdl_type", &self.sdl_type) +                    .field("sdl_nlen", &self.sdl_nlen) +                    .field("sdl_alen", &self.sdl_alen) +                    .field("sdl_slen", &self.sdl_slen) +                    // FIXME: .field("sdl_data", &self.sdl_data) +                    .finish() +            } +        } +        impl ::hash::Hash for sockaddr_dl { +            fn hash<H: ::hash::Hasher>(&self, state: &mut H) { +                self.sdl_family.hash(state); +                self.sdl_index.hash(state); +                self.sdl_type.hash(state); +                self.sdl_nlen.hash(state); +                self.sdl_alen.hash(state); +                self.sdl_slen.hash(state); +                self.sdl_data.hash(state); +            } +        } + +        impl PartialEq for sigevent { +            fn eq(&self, other: &sigevent) -> bool { +                self.sigev_notify == other.sigev_notify +                    && self.sigev_signo == other.sigev_signo +                    && self.sigev_value == other.sigev_value +                    && self.ss_sp == other.ss_sp +                    && self.sigev_notify_attributes +                        == other.sigev_notify_attributes +            } +        } +        impl Eq for sigevent {} +        impl ::fmt::Debug for sigevent { +            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { +                f.debug_struct("sigevent") +                    .field("sigev_notify", &self.sigev_notify) +                    .field("sigev_signo", &self.sigev_signo) +                    .field("sigev_value", &self.sigev_value) +                    .field("ss_sp", &self.ss_sp) +                    .field("sigev_notify_attributes", +                           &self.sigev_notify_attributes) +                    .finish() +            } +        } +        impl ::hash::Hash for sigevent { +            fn hash<H: ::hash::Hasher>(&self, state: &mut H) { +                self.sigev_notify.hash(state); +                self.sigev_signo.hash(state); +                self.sigev_value.hash(state); +                self.ss_sp.hash(state); +                self.sigev_notify_attributes.hash(state); +            } +        } + +        #[cfg(libc_union)] +        impl PartialEq for pad128_t { +            fn eq(&self, other: &pad128_t) -> bool { +                unsafe { +                // FIXME: self._q == other._q || +                    self._l == other._l +                } +            } +        } +        #[cfg(libc_union)] +        impl Eq for pad128_t {} +        #[cfg(libc_union)] +        impl ::fmt::Debug for pad128_t { +            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { +                unsafe { +                f.debug_struct("pad128_t") +                    // FIXME: .field("_q", &{self._q}) +                    .field("_l", &{self._l}) +                    .finish() +                } +            } +        } +        #[cfg(libc_union)] +        impl ::hash::Hash for pad128_t { +            fn hash<H: ::hash::Hasher>(&self, state: &mut H) { +                unsafe { +                // FIXME: state.write_i64(self._q as i64); +                self._l.hash(state); +                } +            } +        } +        #[cfg(libc_union)] +        impl PartialEq for upad128_t { +            fn eq(&self, other: &upad128_t) -> bool { +                unsafe { +                // FIXME: self._q == other._q || +                    self._l == other._l +                } +            } +        } +        #[cfg(libc_union)] +        impl Eq for upad128_t {} +        #[cfg(libc_union)] +        impl ::fmt::Debug for upad128_t { +            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { +                unsafe { +                f.debug_struct("upad128_t") +                    // FIXME: .field("_q", &{self._q}) +                    .field("_l", &{self._l}) +                    .finish() +                } +            } +        } +        #[cfg(libc_union)] +        impl ::hash::Hash for upad128_t { +            fn hash<H: ::hash::Hasher>(&self, state: &mut H) { +                unsafe { +                // FIXME: state.write_i64(self._q as i64); +                self._l.hash(state); +                } +            } +        } +    } +} + +cfg_if! { +    if #[cfg(target_pointer_width = "64")] { +        const SIGINFO_DATA_SIZE: usize = 60; +    } else { +        const SIGINFO_DATA_SIZE: usize = 29; +    } +} + +#[repr(C)] +struct siginfo_fault { +    addr: *mut ::c_void, +    trapno: ::c_int, +    pc: *mut ::caddr_t, +} +impl ::Copy for siginfo_fault {} +impl ::Clone for siginfo_fault { +    fn clone(&self) -> Self { +        *self +    } +} + +#[repr(C)] +struct siginfo_cldval { +    utime: ::clock_t, +    status: ::c_int, +    stime: ::clock_t, +} +impl ::Copy for siginfo_cldval {} +impl ::Clone for siginfo_cldval { +    fn clone(&self) -> Self { +        *self +    } +} + +#[repr(C)] +struct siginfo_killval { +    uid: ::uid_t, +    value: ::sigval, +    // Pad out to match the SIGCLD value size +    _pad: *mut ::c_void, +} +impl ::Copy for siginfo_killval {} +impl ::Clone for siginfo_killval { +    fn clone(&self) -> Self { +        *self +    } +} + +#[repr(C)] +struct siginfo_sigcld { +    pid: ::pid_t, +    val: siginfo_cldval, +    ctid: ::ctid_t, +    zoneid: ::zoneid_t, +} +impl ::Copy for siginfo_sigcld {} +impl ::Clone for siginfo_sigcld { +    fn clone(&self) -> Self { +        *self +    } +} + +#[repr(C)] +struct siginfo_kill { +    pid: ::pid_t, +    val: siginfo_killval, +    ctid: ::ctid_t, +    zoneid: ::zoneid_t, +} +impl ::Copy for siginfo_kill {} +impl ::Clone for siginfo_kill { +    fn clone(&self) -> Self { +        *self +    } +} + +impl siginfo_t { +    unsafe fn sidata<T: ::Copy>(&self) -> T { +        *((&self.__data_pad) as *const ::c_int as *const T) +    } +    pub unsafe fn si_addr(&self) -> *mut ::c_void { +        let sifault: siginfo_fault = self.sidata(); +        sifault.addr +    } +    pub unsafe fn si_uid(&self) -> ::uid_t { +        let kill: siginfo_kill = self.sidata(); +        kill.val.uid +    } +    pub unsafe fn si_value(&self) -> ::sigval { +        let kill: siginfo_kill = self.sidata(); +        kill.val.value +    } +    pub unsafe fn si_pid(&self) -> ::pid_t { +        let sigcld: siginfo_sigcld = self.sidata(); +        sigcld.pid +    } +    pub unsafe fn si_status(&self) -> ::c_int { +        let sigcld: siginfo_sigcld = self.sidata(); +        sigcld.val.status +    } +    pub unsafe fn si_utime(&self) -> ::c_long { +        let sigcld: siginfo_sigcld = self.sidata(); +        sigcld.val.utime +    } +    pub unsafe fn si_stime(&self) -> ::c_long { +        let sigcld: siginfo_sigcld = self.sidata(); +        sigcld.val.stime +    } +} + +pub const LC_CTYPE: ::c_int = 0; +pub const LC_NUMERIC: ::c_int = 1; +pub const LC_TIME: ::c_int = 2; +pub const LC_COLLATE: ::c_int = 3; +pub const LC_MONETARY: ::c_int = 4; +pub const LC_MESSAGES: ::c_int = 5; +pub const LC_ALL: ::c_int = 6; +pub const LC_CTYPE_MASK: ::c_int = 1 << LC_CTYPE; +pub const LC_NUMERIC_MASK: ::c_int = 1 << LC_NUMERIC; +pub const LC_TIME_MASK: ::c_int = 1 << LC_TIME; +pub const LC_COLLATE_MASK: ::c_int = 1 << LC_COLLATE; +pub const LC_MONETARY_MASK: ::c_int = 1 << LC_MONETARY; +pub const LC_MESSAGES_MASK: ::c_int = 1 << LC_MESSAGES; +pub const LC_ALL_MASK: ::c_int = LC_CTYPE_MASK +    | LC_NUMERIC_MASK +    | LC_TIME_MASK +    | LC_COLLATE_MASK +    | LC_MONETARY_MASK +    | LC_MESSAGES_MASK; + +pub const DAY_1: ::nl_item = 1; +pub const DAY_2: ::nl_item = 2; +pub const DAY_3: ::nl_item = 3; +pub const DAY_4: ::nl_item = 4; +pub const DAY_5: ::nl_item = 5; +pub const DAY_6: ::nl_item = 6; +pub const DAY_7: ::nl_item = 7; + +pub const ABDAY_1: ::nl_item = 8; +pub const ABDAY_2: ::nl_item = 9; +pub const ABDAY_3: ::nl_item = 10; +pub const ABDAY_4: ::nl_item = 11; +pub const ABDAY_5: ::nl_item = 12; +pub const ABDAY_6: ::nl_item = 13; +pub const ABDAY_7: ::nl_item = 14; + +pub const MON_1: ::nl_item = 15; +pub const MON_2: ::nl_item = 16; +pub const MON_3: ::nl_item = 17; +pub const MON_4: ::nl_item = 18; +pub const MON_5: ::nl_item = 19; +pub const MON_6: ::nl_item = 20; +pub const MON_7: ::nl_item = 21; +pub const MON_8: ::nl_item = 22; +pub const MON_9: ::nl_item = 23; +pub const MON_10: ::nl_item = 24; +pub const MON_11: ::nl_item = 25; +pub const MON_12: ::nl_item = 26; + +pub const ABMON_1: ::nl_item = 27; +pub const ABMON_2: ::nl_item = 28; +pub const ABMON_3: ::nl_item = 29; +pub const ABMON_4: ::nl_item = 30; +pub const ABMON_5: ::nl_item = 31; +pub const ABMON_6: ::nl_item = 32; +pub const ABMON_7: ::nl_item = 33; +pub const ABMON_8: ::nl_item = 34; +pub const ABMON_9: ::nl_item = 35; +pub const ABMON_10: ::nl_item = 36; +pub const ABMON_11: ::nl_item = 37; +pub const ABMON_12: ::nl_item = 38; + +pub const RADIXCHAR: ::nl_item = 39; +pub const THOUSEP: ::nl_item = 40; +pub const YESSTR: ::nl_item = 41; +pub const NOSTR: ::nl_item = 42; +pub const CRNCYSTR: ::nl_item = 43; + +pub const D_T_FMT: ::nl_item = 44; +pub const D_FMT: ::nl_item = 45; +pub const T_FMT: ::nl_item = 46; +pub const AM_STR: ::nl_item = 47; +pub const PM_STR: ::nl_item = 48; + +pub const CODESET: ::nl_item = 49; +pub const T_FMT_AMPM: ::nl_item = 50; +pub const ERA: ::nl_item = 51; +pub const ERA_D_FMT: ::nl_item = 52; +pub const ERA_D_T_FMT: ::nl_item = 53; +pub const ERA_T_FMT: ::nl_item = 54; +pub const ALT_DIGITS: ::nl_item = 55; +pub const YESEXPR: ::nl_item = 56; +pub const NOEXPR: ::nl_item = 57; +pub const _DATE_FMT: ::nl_item = 58; +pub const MAXSTRMSG: ::nl_item = 58; + +pub const PATH_MAX: ::c_int = 1024; + +pub const SA_ONSTACK: ::c_int = 0x00000001; +pub const SA_RESETHAND: ::c_int = 0x00000002; +pub const SA_RESTART: ::c_int = 0x00000004; +pub const SA_SIGINFO: ::c_int = 0x00000008; +pub const SA_NODEFER: ::c_int = 0x00000010; +pub const SA_NOCLDWAIT: ::c_int = 0x00010000; +pub const SA_NOCLDSTOP: ::c_int = 0x00020000; + +pub const SS_ONSTACK: ::c_int = 1; +pub const SS_DISABLE: ::c_int = 2; + +pub const FIOCLEX: ::c_int = 0x20006601; +pub const FIONCLEX: ::c_int = 0x20006602; +pub const FIONREAD: ::c_int = 0x4004667f; +pub const FIONBIO: ::c_int = 0x8004667e; +pub const FIOASYNC: ::c_int = 0x8004667d; +pub const FIOSETOWN: ::c_int = 0x8004667c; +pub const FIOGETOWN: ::c_int = 0x4004667b; + +pub const SIGCHLD: ::c_int = 18; +pub const SIGCLD: ::c_int = ::SIGCHLD; +pub const SIGBUS: ::c_int = 10; +pub const SIGINFO: ::c_int = 41; +pub const SIG_BLOCK: ::c_int = 1; +pub const SIG_UNBLOCK: ::c_int = 2; +pub const SIG_SETMASK: ::c_int = 3; + +pub const SIGEV_NONE: ::c_int = 1; +pub const SIGEV_SIGNAL: ::c_int = 2; +pub const SIGEV_THREAD: ::c_int = 3; + +pub const CLD_EXITED: ::c_int = 1; +pub const CLD_KILLED: ::c_int = 2; +pub const CLD_DUMPED: ::c_int = 3; +pub const CLD_TRAPPED: ::c_int = 4; +pub const CLD_STOPPED: ::c_int = 5; +pub const CLD_CONTINUED: ::c_int = 6; + +pub const IP_RECVDSTADDR: ::c_int = 0x7; +pub const IP_SEC_OPT: ::c_int = 0x22; + +pub const IPV6_UNICAST_HOPS: ::c_int = 0x5; +pub const IPV6_MULTICAST_IF: ::c_int = 0x6; +pub const IPV6_MULTICAST_HOPS: ::c_int = 0x7; +pub const IPV6_MULTICAST_LOOP: ::c_int = 0x8; +pub const IPV6_RECVPKTINFO: ::c_int = 0x12; +pub const IPV6_SEC_OPT: ::c_int = 0x22; +pub const IPV6_V6ONLY: ::c_int = 0x27; + +cfg_if! { +    if #[cfg(target_pointer_width = "64")] { +        pub const FD_SETSIZE: usize = 65536; +    } else { +        pub const FD_SETSIZE: usize = 1024; +    } +} + +pub const ST_RDONLY: ::c_ulong = 1; +pub const ST_NOSUID: ::c_ulong = 2; + +pub const NI_MAXHOST: ::socklen_t = 1025; +pub const NI_MAXSERV: ::socklen_t = 32; + +pub const EXIT_FAILURE: ::c_int = 1; +pub const EXIT_SUCCESS: ::c_int = 0; +pub const RAND_MAX: ::c_int = 32767; +pub const EOF: ::c_int = -1; +pub const SEEK_SET: ::c_int = 0; +pub const SEEK_CUR: ::c_int = 1; +pub const SEEK_END: ::c_int = 2; +pub const SEEK_DATA: ::c_int = 3; +pub const SEEK_HOLE: ::c_int = 4; +pub const _IOFBF: ::c_int = 0; +pub const _IONBF: ::c_int = 4; +pub const _IOLBF: ::c_int = 64; +pub const BUFSIZ: ::c_uint = 1024; +pub const FOPEN_MAX: ::c_uint = 20; +pub const FILENAME_MAX: ::c_uint = 1024; +pub const L_tmpnam: ::c_uint = 25; +pub const TMP_MAX: ::c_uint = 17576; + +pub const GRND_NONBLOCK: ::c_uint = 0x0001; +pub const GRND_RANDOM: ::c_uint = 0x0002; + +pub const O_RDONLY: ::c_int = 0; +pub const O_WRONLY: ::c_int = 1; +pub const O_RDWR: ::c_int = 2; +pub const O_NDELAY: ::c_int = 0x04; +pub const O_APPEND: ::c_int = 8; +pub const O_DSYNC: ::c_int = 0x40; +pub const O_CREAT: ::c_int = 256; +pub const O_EXCL: ::c_int = 1024; +pub const O_NOCTTY: ::c_int = 2048; +pub const O_TRUNC: ::c_int = 512; +pub const O_NOFOLLOW: ::c_int = 0x20000; +pub const O_SEARCH: ::c_int = 0x200000; +pub const O_EXEC: ::c_int = 0x400000; +pub const O_CLOEXEC: ::c_int = 0x800000; +pub const O_ACCMODE: ::c_int = 0x600003; +pub const O_XATTR: ::c_int = 0x4000; +pub const O_DIRECTORY: ::c_int = 0x1000000; +pub const O_DIRECT: ::c_int = 0x2000000; +pub const S_IFIFO: mode_t = 4096; +pub const S_IFCHR: mode_t = 8192; +pub const S_IFBLK: mode_t = 24576; +pub const S_IFDIR: mode_t = 16384; +pub const S_IFREG: mode_t = 32768; +pub const S_IFLNK: mode_t = 40960; +pub const S_IFSOCK: mode_t = 49152; +pub const S_IFMT: mode_t = 61440; +pub const S_IEXEC: mode_t = 64; +pub const S_IWRITE: mode_t = 128; +pub const S_IREAD: mode_t = 256; +pub const S_IRWXU: mode_t = 448; +pub const S_IXUSR: mode_t = 64; +pub const S_IWUSR: mode_t = 128; +pub const S_IRUSR: mode_t = 256; +pub const S_IRWXG: mode_t = 56; +pub const S_IXGRP: mode_t = 8; +pub const S_IWGRP: mode_t = 16; +pub const S_IRGRP: mode_t = 32; +pub const S_IRWXO: mode_t = 7; +pub const S_IXOTH: mode_t = 1; +pub const S_IWOTH: mode_t = 2; +pub const S_IROTH: mode_t = 4; +pub const F_OK: ::c_int = 0; +pub const R_OK: ::c_int = 4; +pub const W_OK: ::c_int = 2; +pub const X_OK: ::c_int = 1; +pub const STDIN_FILENO: ::c_int = 0; +pub const STDOUT_FILENO: ::c_int = 1; +pub const STDERR_FILENO: ::c_int = 2; +pub const F_LOCK: ::c_int = 1; +pub const F_TEST: ::c_int = 3; +pub const F_TLOCK: ::c_int = 2; +pub const F_ULOCK: ::c_int = 0; +pub const F_SETLK: ::c_int = 6; +pub const F_SETLKW: ::c_int = 7; +pub const F_GETLK: ::c_int = 14; +pub const F_ALLOCSP: ::c_int = 10; +pub const F_FREESP: ::c_int = 11; +pub const F_BLOCKS: ::c_int = 18; +pub const F_BLKSIZE: ::c_int = 19; +pub const F_SHARE: ::c_int = 40; +pub const F_UNSHARE: ::c_int = 41; +pub const F_ISSTREAM: ::c_int = 13; +pub const F_PRIV: ::c_int = 15; +pub const F_NPRIV: ::c_int = 16; +pub const F_QUOTACTL: ::c_int = 17; +pub const F_GETOWN: ::c_int = 23; +pub const F_SETOWN: ::c_int = 24; +pub const F_REVOKE: ::c_int = 25; +pub const F_HASREMOTELOCKS: ::c_int = 26; +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 SIGABRT: ::c_int = 6; +pub const SIGEMT: ::c_int = 7; +pub const SIGFPE: ::c_int = 8; +pub const SIGKILL: ::c_int = 9; +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 SIGUSR1: ::c_int = 16; +pub const SIGUSR2: ::c_int = 17; +pub const SIGPWR: ::c_int = 19; +pub const SIGWINCH: ::c_int = 20; +pub const SIGURG: ::c_int = 21; +pub const SIGPOLL: ::c_int = 22; +pub const SIGIO: ::c_int = SIGPOLL; +pub const SIGSTOP: ::c_int = 23; +pub const SIGTSTP: ::c_int = 24; +pub const SIGCONT: ::c_int = 25; +pub const SIGTTIN: ::c_int = 26; +pub const SIGTTOU: ::c_int = 27; +pub const SIGVTALRM: ::c_int = 28; +pub const SIGPROF: ::c_int = 29; +pub const SIGXCPU: ::c_int = 30; +pub const SIGXFSZ: ::c_int = 31; + +pub const WNOHANG: ::c_int = 0x40; +pub const WUNTRACED: ::c_int = 0x04; + +pub const WEXITED: ::c_int = 0x01; +pub const WTRAPPED: ::c_int = 0x02; +pub const WSTOPPED: ::c_int = WUNTRACED; +pub const WCONTINUED: ::c_int = 0x08; +pub const WNOWAIT: ::c_int = 0x80; + +pub const AT_FDCWD: ::c_int = 0xffd19553; +pub const AT_SYMLINK_NOFOLLOW: ::c_int = 0x1000; +pub const AT_SYMLINK_FOLLOW: ::c_int = 0x2000; +pub const AT_REMOVEDIR: ::c_int = 0x1; +pub const _AT_TRIGGER: ::c_int = 0x2; +pub const AT_EACCESS: ::c_int = 0x4; + +pub const P_PID: idtype_t = 0; +pub const P_PPID: idtype_t = 1; +pub const P_PGID: idtype_t = 2; +pub const P_SID: idtype_t = 3; +pub const P_CID: idtype_t = 4; +pub const P_UID: idtype_t = 5; +pub const P_GID: idtype_t = 6; +pub const P_ALL: idtype_t = 7; +pub const P_LWPID: idtype_t = 8; +pub const P_TASKID: idtype_t = 9; +pub const P_PROJID: idtype_t = 10; +pub const P_POOLID: idtype_t = 11; +pub const P_ZONEID: idtype_t = 12; +pub const P_CTID: idtype_t = 13; +pub const P_CPUID: idtype_t = 14; +pub const P_PSETID: idtype_t = 15; + +pub const PBIND_NONE: ::processorid_t = -1; +pub const PBIND_QUERY: ::processorid_t = -2; +pub const PBIND_HARD: ::processorid_t = -3; +pub const PBIND_SOFT: ::processorid_t = -4; + +pub const PS_NONE: ::c_int = -1; +pub const PS_QUERY: ::c_int = -2; +pub const PS_MYID: ::c_int = -3; +pub const PS_SOFT: ::c_int = -4; +pub const PS_HARD: ::c_int = -5; +pub const PS_QUERY_TYPE: ::c_int = -6; +pub const PS_SYSTEM: ::c_int = 1; +pub const PS_PRIVATE: ::c_int = 2; + +pub const UTIME_OMIT: c_long = -2; +pub const UTIME_NOW: c_long = -1; + +pub const PROT_NONE: ::c_int = 0; +pub const PROT_READ: ::c_int = 1; +pub const PROT_WRITE: ::c_int = 2; +pub const PROT_EXEC: ::c_int = 4; + +pub const MAP_FILE: ::c_int = 0; +pub const MAP_SHARED: ::c_int = 0x0001; +pub const MAP_PRIVATE: ::c_int = 0x0002; +pub const MAP_FIXED: ::c_int = 0x0010; +pub const MAP_NORESERVE: ::c_int = 0x40; +pub const MAP_ANON: ::c_int = 0x0100; +pub const MAP_ANONYMOUS: ::c_int = 0x0100; +pub const MAP_RENAME: ::c_int = 0x20; +pub const MAP_ALIGN: ::c_int = 0x200; +pub const MAP_TEXT: ::c_int = 0x400; +pub const MAP_INITDATA: ::c_int = 0x800; +pub const MAP_32BIT: ::c_int = 0x80; +pub const MAP_FAILED: *mut ::c_void = !0 as *mut ::c_void; + +pub const MCL_CURRENT: ::c_int = 0x0001; +pub const MCL_FUTURE: ::c_int = 0x0002; + +pub const MS_SYNC: ::c_int = 0x0004; +pub const MS_ASYNC: ::c_int = 0x0001; +pub const MS_INVALIDATE: ::c_int = 0x0002; + +pub const MMOBJ_PADDING: ::c_uint = 0x10000; +pub const MMOBJ_INTERPRET: ::c_uint = 0x20000; +pub const MR_PADDING: ::c_uint = 0x1; +pub const MR_HDR_ELF: ::c_uint = 0x2; + +pub const EPERM: ::c_int = 1; +pub const ENOENT: ::c_int = 2; +pub const ESRCH: ::c_int = 3; +pub const EINTR: ::c_int = 4; +pub const EIO: ::c_int = 5; +pub const ENXIO: ::c_int = 6; +pub const E2BIG: ::c_int = 7; +pub const ENOEXEC: ::c_int = 8; +pub const EBADF: ::c_int = 9; +pub const ECHILD: ::c_int = 10; +pub const EAGAIN: ::c_int = 11; +pub const ENOMEM: ::c_int = 12; +pub const EACCES: ::c_int = 13; +pub const EFAULT: ::c_int = 14; +pub const ENOTBLK: ::c_int = 15; +pub const EBUSY: ::c_int = 16; +pub const EEXIST: ::c_int = 17; +pub const EXDEV: ::c_int = 18; +pub const ENODEV: ::c_int = 19; +pub const ENOTDIR: ::c_int = 20; +pub const EISDIR: ::c_int = 21; +pub const EINVAL: ::c_int = 22; +pub const ENFILE: ::c_int = 23; +pub const EMFILE: ::c_int = 24; +pub const ENOTTY: ::c_int = 25; +pub const ETXTBSY: ::c_int = 26; +pub const EFBIG: ::c_int = 27; +pub const ENOSPC: ::c_int = 28; +pub const ESPIPE: ::c_int = 29; +pub const EROFS: ::c_int = 30; +pub const EMLINK: ::c_int = 31; +pub const EPIPE: ::c_int = 32; +pub const EDOM: ::c_int = 33; +pub const ERANGE: ::c_int = 34; +pub const ENOMSG: ::c_int = 35; +pub const EIDRM: ::c_int = 36; +pub const ECHRNG: ::c_int = 37; +pub const EL2NSYNC: ::c_int = 38; +pub const EL3HLT: ::c_int = 39; +pub const EL3RST: ::c_int = 40; +pub const ELNRNG: ::c_int = 41; +pub const EUNATCH: ::c_int = 42; +pub const ENOCSI: ::c_int = 43; +pub const EL2HLT: ::c_int = 44; +pub const EDEADLK: ::c_int = 45; +pub const ENOLCK: ::c_int = 46; +pub const ECANCELED: ::c_int = 47; +pub const ENOTSUP: ::c_int = 48; +pub const EDQUOT: ::c_int = 49; +pub const EBADE: ::c_int = 50; +pub const EBADR: ::c_int = 51; +pub const EXFULL: ::c_int = 52; +pub const ENOANO: ::c_int = 53; +pub const EBADRQC: ::c_int = 54; +pub const EBADSLT: ::c_int = 55; +pub const EDEADLOCK: ::c_int = 56; +pub const EBFONT: ::c_int = 57; +pub const EOWNERDEAD: ::c_int = 58; +pub const ENOTRECOVERABLE: ::c_int = 59; +pub const ENOSTR: ::c_int = 60; +pub const ENODATA: ::c_int = 61; +pub const ETIME: ::c_int = 62; +pub const ENOSR: ::c_int = 63; +pub const ENONET: ::c_int = 64; +pub const ENOPKG: ::c_int = 65; +pub const EREMOTE: ::c_int = 66; +pub const ENOLINK: ::c_int = 67; +pub const EADV: ::c_int = 68; +pub const ESRMNT: ::c_int = 69; +pub const ECOMM: ::c_int = 70; +pub const EPROTO: ::c_int = 71; +pub const ELOCKUNMAPPED: ::c_int = 72; +pub const ENOTACTIVE: ::c_int = 73; +pub const EMULTIHOP: ::c_int = 74; +pub const EADI: ::c_int = 75; +pub const EBADMSG: ::c_int = 77; +pub const ENAMETOOLONG: ::c_int = 78; +pub const EOVERFLOW: ::c_int = 79; +pub const ENOTUNIQ: ::c_int = 80; +pub const EBADFD: ::c_int = 81; +pub const EREMCHG: ::c_int = 82; +pub const ELIBACC: ::c_int = 83; +pub const ELIBBAD: ::c_int = 84; +pub const ELIBSCN: ::c_int = 85; +pub const ELIBMAX: ::c_int = 86; +pub const ELIBEXEC: ::c_int = 87; +pub const EILSEQ: ::c_int = 88; +pub const ENOSYS: ::c_int = 89; +pub const ELOOP: ::c_int = 90; +pub const ERESTART: ::c_int = 91; +pub const ESTRPIPE: ::c_int = 92; +pub const ENOTEMPTY: ::c_int = 93; +pub const EUSERS: ::c_int = 94; +pub const ENOTSOCK: ::c_int = 95; +pub const EDESTADDRREQ: ::c_int = 96; +pub const EMSGSIZE: ::c_int = 97; +pub const EPROTOTYPE: ::c_int = 98; +pub const ENOPROTOOPT: ::c_int = 99; +pub const EPROTONOSUPPORT: ::c_int = 120; +pub const ESOCKTNOSUPPORT: ::c_int = 121; +pub const EOPNOTSUPP: ::c_int = 122; +pub const EPFNOSUPPORT: ::c_int = 123; +pub const EAFNOSUPPORT: ::c_int = 124; +pub const EADDRINUSE: ::c_int = 125; +pub const EADDRNOTAVAIL: ::c_int = 126; +pub const ENETDOWN: ::c_int = 127; +pub const ENETUNREACH: ::c_int = 128; +pub const ENETRESET: ::c_int = 129; +pub const ECONNABORTED: ::c_int = 130; +pub const ECONNRESET: ::c_int = 131; +pub const ENOBUFS: ::c_int = 132; +pub const EISCONN: ::c_int = 133; +pub const ENOTCONN: ::c_int = 134; +pub const ESHUTDOWN: ::c_int = 143; +pub const ETOOMANYREFS: ::c_int = 144; +pub const ETIMEDOUT: ::c_int = 145; +pub const ECONNREFUSED: ::c_int = 146; +pub const EHOSTDOWN: ::c_int = 147; +pub const EHOSTUNREACH: ::c_int = 148; +pub const EWOULDBLOCK: ::c_int = EAGAIN; +pub const EALREADY: ::c_int = 149; +pub const EINPROGRESS: ::c_int = 150; +pub const ESTALE: ::c_int = 151; + +pub const EAI_AGAIN: ::c_int = 2; +pub const EAI_BADFLAGS: ::c_int = 3; +pub const EAI_FAIL: ::c_int = 4; +pub const EAI_FAMILY: ::c_int = 5; +pub const EAI_MEMORY: ::c_int = 6; +pub const EAI_NODATA: ::c_int = 7; +pub const EAI_NONAME: ::c_int = 8; +pub const EAI_SERVICE: ::c_int = 9; +pub const EAI_SOCKTYPE: ::c_int = 10; +pub const EAI_SYSTEM: ::c_int = 11; +pub const EAI_OVERFLOW: ::c_int = 12; + +pub const NI_NOFQDN: ::c_uint = 0x0001; +pub const NI_NUMERICHOST: ::c_uint = 0x0002; +pub const NI_NAMEREQD: ::c_uint = 0x0004; +pub const NI_NUMERICSERV: ::c_uint = 0x0008; +pub const NI_DGRAM: ::c_uint = 0x0010; +pub const NI_WITHSCOPEID: ::c_uint = 0x0020; +pub const NI_NUMERICSCOPE: ::c_uint = 0x0040; + +pub const F_DUPFD: ::c_int = 0; +pub const F_DUP2FD: ::c_int = 9; +pub const F_GETFD: ::c_int = 1; +pub const F_SETFD: ::c_int = 2; +pub const F_GETFL: ::c_int = 3; +pub const F_SETFL: ::c_int = 4; +pub const F_GETXFL: ::c_int = 45; + +pub const SIGTRAP: ::c_int = 5; + +pub const GLOB_APPEND: ::c_int = 32; +pub const GLOB_DOOFFS: ::c_int = 16; +pub const GLOB_ERR: ::c_int = 1; +pub const GLOB_MARK: ::c_int = 2; +pub const GLOB_NOCHECK: ::c_int = 8; +pub const GLOB_NOSORT: ::c_int = 4; +pub const GLOB_NOESCAPE: ::c_int = 64; + +pub const GLOB_NOSPACE: ::c_int = -2; +pub const GLOB_ABORTED: ::c_int = -1; +pub const GLOB_NOMATCH: ::c_int = -3; + +pub const POLLIN: ::c_short = 0x1; +pub const POLLPRI: ::c_short = 0x2; +pub const POLLOUT: ::c_short = 0x4; +pub const POLLERR: ::c_short = 0x8; +pub const POLLHUP: ::c_short = 0x10; +pub const POLLNVAL: ::c_short = 0x20; +pub const POLLNORM: ::c_short = 0x0040; +pub const POLLRDNORM: ::c_short = 0x0040; +pub const POLLWRNORM: ::c_short = 0x4; /* POLLOUT */ +pub const POLLRDBAND: ::c_short = 0x0080; +pub const POLLWRBAND: ::c_short = 0x0100; + +pub const POSIX_MADV_NORMAL: ::c_int = 0; +pub const POSIX_MADV_RANDOM: ::c_int = 1; +pub const POSIX_MADV_SEQUENTIAL: ::c_int = 2; +pub const POSIX_MADV_WILLNEED: ::c_int = 3; +pub const POSIX_MADV_DONTNEED: ::c_int = 4; + +pub const PTHREAD_CREATE_JOINABLE: ::c_int = 0; +pub const PTHREAD_CREATE_DETACHED: ::c_int = 0x40; +pub const PTHREAD_PROCESS_SHARED: ::c_int = 1; +pub const PTHREAD_PROCESS_PRIVATE: ::c_ushort = 0; +pub const PTHREAD_STACK_MIN: ::size_t = 4096; + +pub const SIGSTKSZ: ::size_t = 8192; + +// https://illumos.org/man/3c/clock_gettime +// https://github.com/illumos/illumos-gate/ +//   blob/HEAD/usr/src/lib/libc/amd64/sys/__clock_gettime.s +// clock_gettime(3c) doesn't seem to accept anything other than CLOCK_REALTIME +// or __CLOCK_REALTIME0 +// +// https://github.com/illumos/illumos-gate/ +//   blob/HEAD/usr/src/uts/common/sys/time_impl.h +// Confusing! CLOCK_HIGHRES==CLOCK_MONOTONIC==4 +// __CLOCK_REALTIME0==0 is an obsoleted version of CLOCK_REALTIME==3 +pub const CLOCK_REALTIME: ::clockid_t = 3; +pub const CLOCK_MONOTONIC: ::clockid_t = 4; +pub const TIMER_RELTIME: ::c_int = 0; +pub const TIMER_ABSTIME: ::c_int = 1; + +pub const RLIMIT_CPU: ::c_int = 0; +pub const RLIMIT_FSIZE: ::c_int = 1; +pub const RLIMIT_DATA: ::c_int = 2; +pub const RLIMIT_STACK: ::c_int = 3; +pub const RLIMIT_CORE: ::c_int = 4; +pub const RLIMIT_NOFILE: ::c_int = 5; +pub const RLIMIT_VMEM: ::c_int = 6; +pub const RLIMIT_AS: ::c_int = RLIMIT_VMEM; + +#[deprecated(since = "0.2.64", note = "Not stable across OS versions")] +pub const RLIM_NLIMITS: rlim_t = 7; +pub const RLIM_INFINITY: rlim_t = 0xfffffffffffffffd; + +pub const RUSAGE_SELF: ::c_int = 0; +pub const RUSAGE_CHILDREN: ::c_int = -1; + +pub const MADV_NORMAL: ::c_int = 0; +pub const MADV_RANDOM: ::c_int = 1; +pub const MADV_SEQUENTIAL: ::c_int = 2; +pub const MADV_WILLNEED: ::c_int = 3; +pub const MADV_DONTNEED: ::c_int = 4; +pub const MADV_FREE: ::c_int = 5; +pub const MADV_ACCESS_DEFAULT: ::c_int = 6; +pub const MADV_ACCESS_LWP: ::c_int = 7; +pub const MADV_ACCESS_MANY: ::c_int = 8; + +pub const AF_UNSPEC: ::c_int = 0; +pub const AF_UNIX: ::c_int = 1; +pub const AF_INET: ::c_int = 2; +pub const AF_IMPLINK: ::c_int = 3; +pub const AF_PUP: ::c_int = 4; +pub const AF_CHAOS: ::c_int = 5; +pub const AF_NS: ::c_int = 6; +pub const AF_NBS: ::c_int = 7; +pub const AF_ECMA: ::c_int = 8; +pub const AF_DATAKIT: ::c_int = 9; +pub const AF_CCITT: ::c_int = 10; +pub const AF_SNA: ::c_int = 11; +pub const AF_DECnet: ::c_int = 12; +pub const AF_DLI: ::c_int = 13; +pub const AF_LAT: ::c_int = 14; +pub const AF_HYLINK: ::c_int = 15; +pub const AF_APPLETALK: ::c_int = 16; +pub const AF_NIT: ::c_int = 17; +pub const AF_802: ::c_int = 18; +pub const AF_OSI: ::c_int = 19; +pub const AF_X25: ::c_int = 20; +pub const AF_OSINET: ::c_int = 21; +pub const AF_GOSIP: ::c_int = 22; +pub const AF_IPX: ::c_int = 23; +pub const AF_ROUTE: ::c_int = 24; +pub const AF_LINK: ::c_int = 25; +pub const AF_INET6: ::c_int = 26; +pub const AF_KEY: ::c_int = 27; +pub const AF_NCA: ::c_int = 28; +pub const AF_POLICY: ::c_int = 29; +pub const AF_INET_OFFLOAD: ::c_int = 30; +pub const AF_TRILL: ::c_int = 31; +pub const AF_PACKET: ::c_int = 32; + +pub const PF_UNSPEC: ::c_int = AF_UNSPEC; +pub const PF_UNIX: ::c_int = AF_UNIX; +pub const PF_LOCAL: ::c_int = PF_UNIX; +pub const PF_FILE: ::c_int = PF_UNIX; +pub const PF_INET: ::c_int = AF_INET; +pub const PF_IMPLINK: ::c_int = AF_IMPLINK; +pub const PF_PUP: ::c_int = AF_PUP; +pub const PF_CHAOS: ::c_int = AF_CHAOS; +pub const PF_NS: ::c_int = AF_NS; +pub const PF_NBS: ::c_int = AF_NBS; +pub const PF_ECMA: ::c_int = AF_ECMA; +pub const PF_DATAKIT: ::c_int = AF_DATAKIT; +pub const PF_CCITT: ::c_int = AF_CCITT; +pub const PF_SNA: ::c_int = AF_SNA; +pub const PF_DECnet: ::c_int = AF_DECnet; +pub const PF_DLI: ::c_int = AF_DLI; +pub const PF_LAT: ::c_int = AF_LAT; +pub const PF_HYLINK: ::c_int = AF_HYLINK; +pub const PF_APPLETALK: ::c_int = AF_APPLETALK; +pub const PF_NIT: ::c_int = AF_NIT; +pub const PF_802: ::c_int = AF_802; +pub const PF_OSI: ::c_int = AF_OSI; +pub const PF_X25: ::c_int = AF_X25; +pub const PF_OSINET: ::c_int = AF_OSINET; +pub const PF_GOSIP: ::c_int = AF_GOSIP; +pub const PF_IPX: ::c_int = AF_IPX; +pub const PF_ROUTE: ::c_int = AF_ROUTE; +pub const PF_LINK: ::c_int = AF_LINK; +pub const PF_INET6: ::c_int = AF_INET6; +pub const PF_KEY: ::c_int = AF_KEY; +pub const PF_NCA: ::c_int = AF_NCA; +pub const PF_POLICY: ::c_int = AF_POLICY; +pub const PF_INET_OFFLOAD: ::c_int = AF_INET_OFFLOAD; +pub const PF_TRILL: ::c_int = AF_TRILL; +pub const PF_PACKET: ::c_int = AF_PACKET; + +pub const SOCK_DGRAM: ::c_int = 1; +pub const SOCK_STREAM: ::c_int = 2; +pub const SOCK_RAW: ::c_int = 4; +pub const SOCK_RDM: ::c_int = 5; +pub const SOCK_SEQPACKET: ::c_int = 6; +pub const IP_MULTICAST_IF: ::c_int = 16; +pub const IP_MULTICAST_TTL: ::c_int = 17; +pub const IP_MULTICAST_LOOP: ::c_int = 18; +pub const IP_TTL: ::c_int = 4; +pub const IP_HDRINCL: ::c_int = 2; +pub const IP_ADD_MEMBERSHIP: ::c_int = 19; +pub const IP_DROP_MEMBERSHIP: ::c_int = 20; +pub const IPV6_JOIN_GROUP: ::c_int = 9; +pub const IPV6_LEAVE_GROUP: ::c_int = 10; +pub const IP_ADD_SOURCE_MEMBERSHIP: ::c_int = 23; +pub const IP_DROP_SOURCE_MEMBERSHIP: ::c_int = 24; +pub const IP_BLOCK_SOURCE: ::c_int = 21; +pub const IP_UNBLOCK_SOURCE: ::c_int = 22; + +// These TCP socket options are common between illumos and Solaris, while higher +// numbers have generally diverged: +pub const TCP_NODELAY: ::c_int = 0x1; +pub const TCP_MAXSEG: ::c_int = 0x2; +pub const TCP_KEEPALIVE: ::c_int = 0x8; +pub const TCP_NOTIFY_THRESHOLD: ::c_int = 0x10; +pub const TCP_ABORT_THRESHOLD: ::c_int = 0x11; +pub const TCP_CONN_NOTIFY_THRESHOLD: ::c_int = 0x12; +pub const TCP_CONN_ABORT_THRESHOLD: ::c_int = 0x13; +pub const TCP_RECVDSTADDR: ::c_int = 0x14; +pub const TCP_INIT_CWND: ::c_int = 0x15; +pub const TCP_KEEPALIVE_THRESHOLD: ::c_int = 0x16; +pub const TCP_KEEPALIVE_ABORT_THRESHOLD: ::c_int = 0x17; +pub const TCP_CORK: ::c_int = 0x18; +pub const TCP_RTO_INITIAL: ::c_int = 0x19; +pub const TCP_RTO_MIN: ::c_int = 0x1a; +pub const TCP_RTO_MAX: ::c_int = 0x1b; +pub const TCP_LINGER2: ::c_int = 0x1c; + +pub const UDP_NAT_T_ENDPOINT: ::c_int = 0x0103; + +pub const SOMAXCONN: ::c_int = 128; + +pub const SOL_SOCKET: ::c_int = 0xffff; +pub const SO_DEBUG: ::c_int = 0x01; +pub const SO_ACCEPTCONN: ::c_int = 0x0002; +pub const SO_REUSEADDR: ::c_int = 0x0004; +pub const SO_KEEPALIVE: ::c_int = 0x0008; +pub const SO_DONTROUTE: ::c_int = 0x0010; +pub const SO_BROADCAST: ::c_int = 0x0020; +pub const SO_USELOOPBACK: ::c_int = 0x0040; +pub const SO_LINGER: ::c_int = 0x0080; +pub const SO_OOBINLINE: ::c_int = 0x0100; +pub const SO_SNDBUF: ::c_int = 0x1001; +pub const SO_RCVBUF: ::c_int = 0x1002; +pub const SO_SNDLOWAT: ::c_int = 0x1003; +pub const SO_RCVLOWAT: ::c_int = 0x1004; +pub const SO_SNDTIMEO: ::c_int = 0x1005; +pub const SO_RCVTIMEO: ::c_int = 0x1006; +pub const SO_ERROR: ::c_int = 0x1007; +pub const SO_TYPE: ::c_int = 0x1008; +pub const SO_PROTOTYPE: ::c_int = 0x1009; +pub const SO_DOMAIN: ::c_int = 0x100c; +pub const SO_TIMESTAMP: ::c_int = 0x1013; + +pub const SCM_RIGHTS: ::c_int = 0x1010; +pub const SCM_UCRED: ::c_int = 0x1012; +pub const SCM_TIMESTAMP: ::c_int = SO_TIMESTAMP; + +pub const MSG_OOB: ::c_int = 0x1; +pub const MSG_PEEK: ::c_int = 0x2; +pub const MSG_DONTROUTE: ::c_int = 0x4; +pub const MSG_EOR: ::c_int = 0x8; +pub const MSG_CTRUNC: ::c_int = 0x10; +pub const MSG_TRUNC: ::c_int = 0x20; +pub const MSG_WAITALL: ::c_int = 0x40; +pub const MSG_DONTWAIT: ::c_int = 0x80; +pub const MSG_NOTIFICATION: ::c_int = 0x100; +pub const MSG_NOSIGNAL: ::c_int = 0x200; +pub const MSG_DUPCTRL: ::c_int = 0x800; +pub const MSG_XPG4_2: ::c_int = 0x8000; +pub const MSG_MAXIOVLEN: ::c_int = 16; + +pub const IF_NAMESIZE: ::size_t = 32; +pub const IFNAMSIZ: ::size_t = 16; + +// https://docs.oracle.com/cd/E23824_01/html/821-1475/if-7p.html +pub const IFF_UP: ::c_int = 0x0000000001; // Address is up +pub const IFF_BROADCAST: ::c_int = 0x0000000002; // Broadcast address valid +pub const IFF_DEBUG: ::c_int = 0x0000000004; // Turn on debugging +pub const IFF_LOOPBACK: ::c_int = 0x0000000008; // Loopback net +pub const IFF_POINTOPOINT: ::c_int = 0x0000000010; // Interface is p-to-p +pub const IFF_NOTRAILERS: ::c_int = 0x0000000020; // Avoid use of trailers +pub const IFF_RUNNING: ::c_int = 0x0000000040; // Resources allocated +pub const IFF_NOARP: ::c_int = 0x0000000080; // No address res. protocol +pub const IFF_PROMISC: ::c_int = 0x0000000100; // Receive all packets +pub const IFF_ALLMULTI: ::c_int = 0x0000000200; // Receive all multicast pkts +pub const IFF_INTELLIGENT: ::c_int = 0x0000000400; // Protocol code on board +pub const IFF_MULTICAST: ::c_int = 0x0000000800; // Supports multicast + +// Multicast using broadcst. add. +pub const IFF_MULTI_BCAST: ::c_int = 0x0000001000; +pub const IFF_UNNUMBERED: ::c_int = 0x0000002000; // Non-unique address +pub const IFF_DHCPRUNNING: ::c_int = 0x0000004000; // DHCP controls interface +pub const IFF_PRIVATE: ::c_int = 0x0000008000; // Do not advertise +pub const IFF_NOXMIT: ::c_int = 0x0000010000; // Do not transmit pkts + +// No address - just on-link subnet +pub const IFF_NOLOCAL: ::c_int = 0x0000020000; +pub const IFF_DEPRECATED: ::c_int = 0x0000040000; // Address is deprecated +pub const IFF_ADDRCONF: ::c_int = 0x0000080000; // Addr. from stateless addrconf +pub const IFF_ROUTER: ::c_int = 0x0000100000; // Router on interface +pub const IFF_NONUD: ::c_int = 0x0000200000; // No NUD on interface +pub const IFF_ANYCAST: ::c_int = 0x0000400000; // Anycast address +pub const IFF_NORTEXCH: ::c_int = 0x0000800000; // Don't xchange rout. info +pub const IFF_IPV4: ::c_int = 0x0001000000; // IPv4 interface +pub const IFF_IPV6: ::c_int = 0x0002000000; // IPv6 interface +pub const IFF_NOFAILOVER: ::c_int = 0x0008000000; // in.mpathd test address +pub const IFF_FAILED: ::c_int = 0x0010000000; // Interface has failed +pub const IFF_STANDBY: ::c_int = 0x0020000000; // Interface is a hot-spare +pub const IFF_INACTIVE: ::c_int = 0x0040000000; // Functioning but not used +pub const IFF_OFFLINE: ::c_int = 0x0080000000; // Interface is offline +                                               // If CoS marking is supported +pub const IFF_COS_ENABLED: ::c_longlong = 0x0200000000; +pub const IFF_PREFERRED: ::c_longlong = 0x0400000000; // Prefer as source addr. +pub const IFF_TEMPORARY: ::c_longlong = 0x0800000000; // RFC3041 +pub const IFF_FIXEDMTU: ::c_longlong = 0x1000000000; // MTU set with SIOCSLIFMTU +pub const IFF_VIRTUAL: ::c_longlong = 0x2000000000; // Cannot send/receive pkts +pub const IFF_DUPLICATE: ::c_longlong = 0x4000000000; // Local address in use +pub const IFF_IPMP: ::c_longlong = 0x8000000000; // IPMP IP interface + +// sys/ipc.h: +pub const IPC_ALLOC: ::c_int = 0x8000; +pub const IPC_CREAT: ::c_int = 0x200; +pub const IPC_EXCL: ::c_int = 0x400; +pub const IPC_NOWAIT: ::c_int = 0x800; +pub const IPC_PRIVATE: key_t = 0; +pub const IPC_RMID: ::c_int = 10; +pub const IPC_SET: ::c_int = 11; +pub const IPC_SEAT: ::c_int = 12; + +// sys/shm.h +pub const SHM_R: ::c_int = 0o400; +pub const SHM_W: ::c_int = 0o200; +pub const SHM_RDONLY: ::c_int = 0o10000; +pub const SHM_RND: ::c_int = 0o20000; +pub const SHM_SHARE_MMU: ::c_int = 0o40000; +pub const SHM_PAGEABLE: ::c_int = 0o100000; + +pub const SHUT_RD: ::c_int = 0; +pub const SHUT_WR: ::c_int = 1; +pub const SHUT_RDWR: ::c_int = 2; + +pub const LOCK_SH: ::c_int = 1; +pub const LOCK_EX: ::c_int = 2; +pub const LOCK_NB: ::c_int = 4; +pub const LOCK_UN: ::c_int = 8; + +pub const F_RDLCK: ::c_short = 1; +pub const F_WRLCK: ::c_short = 2; +pub const F_UNLCK: ::c_short = 3; + +pub const O_SYNC: ::c_int = 16; +pub const O_NONBLOCK: ::c_int = 128; + +pub const IPPROTO_RAW: ::c_int = 255; + +pub const _PC_LINK_MAX: ::c_int = 1; +pub const _PC_MAX_CANON: ::c_int = 2; +pub const _PC_MAX_INPUT: ::c_int = 3; +pub const _PC_NAME_MAX: ::c_int = 4; +pub const _PC_PATH_MAX: ::c_int = 5; +pub const _PC_PIPE_BUF: ::c_int = 6; +pub const _PC_NO_TRUNC: ::c_int = 7; +pub const _PC_VDISABLE: ::c_int = 8; +pub const _PC_CHOWN_RESTRICTED: ::c_int = 9; +pub const _PC_ASYNC_IO: ::c_int = 10; +pub const _PC_PRIO_IO: ::c_int = 11; +pub const _PC_SYNC_IO: ::c_int = 12; +pub const _PC_ALLOC_SIZE_MIN: ::c_int = 13; +pub const _PC_REC_INCR_XFER_SIZE: ::c_int = 14; +pub const _PC_REC_MAX_XFER_SIZE: ::c_int = 15; +pub const _PC_REC_MIN_XFER_SIZE: ::c_int = 16; +pub const _PC_REC_XFER_ALIGN: ::c_int = 17; +pub const _PC_SYMLINK_MAX: ::c_int = 18; +pub const _PC_2_SYMLINKS: ::c_int = 19; +pub const _PC_ACL_ENABLED: ::c_int = 20; +pub const _PC_MIN_HOLE_SIZE: ::c_int = 21; +pub const _PC_CASE_BEHAVIOR: ::c_int = 22; +pub const _PC_SATTR_ENABLED: ::c_int = 23; +pub const _PC_SATTR_EXISTS: ::c_int = 24; +pub const _PC_ACCESS_FILTERING: ::c_int = 25; +pub const _PC_TIMESTAMP_RESOLUTION: ::c_int = 26; +pub const _PC_FILESIZEBITS: ::c_int = 67; +pub const _PC_XATTR_ENABLED: ::c_int = 100; +pub const _PC_LAST: ::c_int = 101; +pub const _PC_XATTR_EXISTS: ::c_int = 101; + +pub const _SC_ARG_MAX: ::c_int = 1; +pub const _SC_CHILD_MAX: ::c_int = 2; +pub const _SC_CLK_TCK: ::c_int = 3; +pub const _SC_NGROUPS_MAX: ::c_int = 4; +pub const _SC_OPEN_MAX: ::c_int = 5; +pub const _SC_JOB_CONTROL: ::c_int = 6; +pub const _SC_SAVED_IDS: ::c_int = 7; +pub const _SC_VERSION: ::c_int = 8; +pub const _SC_PASS_MAX: ::c_int = 9; +pub const _SC_LOGNAME_MAX: ::c_int = 10; +pub const _SC_PAGESIZE: ::c_int = 11; +pub const _SC_PAGE_SIZE: ::c_int = _SC_PAGESIZE; +pub const _SC_XOPEN_VERSION: ::c_int = 12; +pub const _SC_NPROCESSORS_CONF: ::c_int = 14; +pub const _SC_NPROCESSORS_ONLN: ::c_int = 15; +pub const _SC_STREAM_MAX: ::c_int = 16; +pub const _SC_TZNAME_MAX: ::c_int = 17; +pub const _SC_AIO_LISTIO_MAX: ::c_int = 18; +pub const _SC_AIO_MAX: ::c_int = 19; +pub const _SC_AIO_PRIO_DELTA_MAX: ::c_int = 20; +pub const _SC_ASYNCHRONOUS_IO: ::c_int = 21; +pub const _SC_DELAYTIMER_MAX: ::c_int = 22; +pub const _SC_FSYNC: ::c_int = 23; +pub const _SC_MAPPED_FILES: ::c_int = 24; +pub const _SC_MEMLOCK: ::c_int = 25; +pub const _SC_MEMLOCK_RANGE: ::c_int = 26; +pub const _SC_MEMORY_PROTECTION: ::c_int = 27; +pub const _SC_MESSAGE_PASSING: ::c_int = 28; +pub const _SC_MQ_OPEN_MAX: ::c_int = 29; +pub const _SC_MQ_PRIO_MAX: ::c_int = 30; +pub const _SC_PRIORITIZED_IO: ::c_int = 31; +pub const _SC_PRIORITY_SCHEDULING: ::c_int = 32; +pub const _SC_REALTIME_SIGNALS: ::c_int = 33; +pub const _SC_RTSIG_MAX: ::c_int = 34; +pub const _SC_SEMAPHORES: ::c_int = 35; +pub const _SC_SEM_NSEMS_MAX: ::c_int = 36; +pub const _SC_SEM_VALUE_MAX: ::c_int = 37; +pub const _SC_SHARED_MEMORY_OBJECTS: ::c_int = 38; +pub const _SC_SIGQUEUE_MAX: ::c_int = 39; +pub const _SC_SIGRT_MIN: ::c_int = 40; +pub const _SC_SIGRT_MAX: ::c_int = 41; +pub const _SC_SYNCHRONIZED_IO: ::c_int = 42; +pub const _SC_TIMERS: ::c_int = 43; +pub const _SC_TIMER_MAX: ::c_int = 44; +pub const _SC_2_C_BIND: ::c_int = 45; +pub const _SC_2_C_DEV: ::c_int = 46; +pub const _SC_2_C_VERSION: ::c_int = 47; +pub const _SC_2_FORT_DEV: ::c_int = 48; +pub const _SC_2_FORT_RUN: ::c_int = 49; +pub const _SC_2_LOCALEDEF: ::c_int = 50; +pub const _SC_2_SW_DEV: ::c_int = 51; +pub const _SC_2_UPE: ::c_int = 52; +pub const _SC_2_VERSION: ::c_int = 53; +pub const _SC_BC_BASE_MAX: ::c_int = 54; +pub const _SC_BC_DIM_MAX: ::c_int = 55; +pub const _SC_BC_SCALE_MAX: ::c_int = 56; +pub const _SC_BC_STRING_MAX: ::c_int = 57; +pub const _SC_COLL_WEIGHTS_MAX: ::c_int = 58; +pub const _SC_EXPR_NEST_MAX: ::c_int = 59; +pub const _SC_LINE_MAX: ::c_int = 60; +pub const _SC_RE_DUP_MAX: ::c_int = 61; +pub const _SC_XOPEN_CRYPT: ::c_int = 62; +pub const _SC_XOPEN_ENH_I18N: ::c_int = 63; +pub const _SC_XOPEN_SHM: ::c_int = 64; +pub const _SC_2_CHAR_TERM: ::c_int = 66; +pub const _SC_XOPEN_XCU_VERSION: ::c_int = 67; +pub const _SC_ATEXIT_MAX: ::c_int = 76; +pub const _SC_IOV_MAX: ::c_int = 77; +pub const _SC_XOPEN_UNIX: ::c_int = 78; +pub const _SC_T_IOV_MAX: ::c_int = 79; +pub const _SC_PHYS_PAGES: ::c_int = 500; +pub const _SC_AVPHYS_PAGES: ::c_int = 501; +pub const _SC_COHER_BLKSZ: ::c_int = 503; +pub const _SC_SPLIT_CACHE: ::c_int = 504; +pub const _SC_ICACHE_SZ: ::c_int = 505; +pub const _SC_DCACHE_SZ: ::c_int = 506; +pub const _SC_ICACHE_LINESZ: ::c_int = 507; +pub const _SC_DCACHE_LINESZ: ::c_int = 508; +pub const _SC_ICACHE_BLKSZ: ::c_int = 509; +pub const _SC_DCACHE_BLKSZ: ::c_int = 510; +pub const _SC_DCACHE_TBLKSZ: ::c_int = 511; +pub const _SC_ICACHE_ASSOC: ::c_int = 512; +pub const _SC_DCACHE_ASSOC: ::c_int = 513; +pub const _SC_MAXPID: ::c_int = 514; +pub const _SC_STACK_PROT: ::c_int = 515; +pub const _SC_NPROCESSORS_MAX: ::c_int = 516; +pub const _SC_CPUID_MAX: ::c_int = 517; +pub const _SC_EPHID_MAX: ::c_int = 518; +pub const _SC_THREAD_DESTRUCTOR_ITERATIONS: ::c_int = 568; +pub const _SC_GETGR_R_SIZE_MAX: ::c_int = 569; +pub const _SC_GETPW_R_SIZE_MAX: ::c_int = 570; +pub const _SC_LOGIN_NAME_MAX: ::c_int = 571; +pub const _SC_THREAD_KEYS_MAX: ::c_int = 572; +pub const _SC_THREAD_STACK_MIN: ::c_int = 573; +pub const _SC_THREAD_THREADS_MAX: ::c_int = 574; +pub const _SC_TTY_NAME_MAX: ::c_int = 575; +pub const _SC_THREADS: ::c_int = 576; +pub const _SC_THREAD_ATTR_STACKADDR: ::c_int = 577; +pub const _SC_THREAD_ATTR_STACKSIZE: ::c_int = 578; +pub const _SC_THREAD_PRIORITY_SCHEDULING: ::c_int = 579; +pub const _SC_THREAD_PRIO_INHERIT: ::c_int = 580; +pub const _SC_THREAD_PRIO_PROTECT: ::c_int = 581; +pub const _SC_THREAD_PROCESS_SHARED: ::c_int = 582; +pub const _SC_THREAD_SAFE_FUNCTIONS: ::c_int = 583; +pub const _SC_XOPEN_LEGACY: ::c_int = 717; +pub const _SC_XOPEN_REALTIME: ::c_int = 718; +pub const _SC_XOPEN_REALTIME_THREADS: ::c_int = 719; +pub const _SC_XBS5_ILP32_OFF32: ::c_int = 720; +pub const _SC_XBS5_ILP32_OFFBIG: ::c_int = 721; +pub const _SC_XBS5_LP64_OFF64: ::c_int = 722; +pub const _SC_XBS5_LPBIG_OFFBIG: ::c_int = 723; +pub const _SC_2_PBS: ::c_int = 724; +pub const _SC_2_PBS_ACCOUNTING: ::c_int = 725; +pub const _SC_2_PBS_CHECKPOINT: ::c_int = 726; +pub const _SC_2_PBS_LOCATE: ::c_int = 728; +pub const _SC_2_PBS_MESSAGE: ::c_int = 729; +pub const _SC_2_PBS_TRACK: ::c_int = 730; +pub const _SC_ADVISORY_INFO: ::c_int = 731; +pub const _SC_BARRIERS: ::c_int = 732; +pub const _SC_CLOCK_SELECTION: ::c_int = 733; +pub const _SC_CPUTIME: ::c_int = 734; +pub const _SC_HOST_NAME_MAX: ::c_int = 735; +pub const _SC_MONOTONIC_CLOCK: ::c_int = 736; +pub const _SC_READER_WRITER_LOCKS: ::c_int = 737; +pub const _SC_REGEXP: ::c_int = 738; +pub const _SC_SHELL: ::c_int = 739; +pub const _SC_SPAWN: ::c_int = 740; +pub const _SC_SPIN_LOCKS: ::c_int = 741; +pub const _SC_SPORADIC_SERVER: ::c_int = 742; +pub const _SC_SS_REPL_MAX: ::c_int = 743; +pub const _SC_SYMLOOP_MAX: ::c_int = 744; +pub const _SC_THREAD_CPUTIME: ::c_int = 745; +pub const _SC_THREAD_SPORADIC_SERVER: ::c_int = 746; +pub const _SC_TIMEOUTS: ::c_int = 747; +pub const _SC_TRACE: ::c_int = 748; +pub const _SC_TRACE_EVENT_FILTER: ::c_int = 749; +pub const _SC_TRACE_EVENT_NAME_MAX: ::c_int = 750; +pub const _SC_TRACE_INHERIT: ::c_int = 751; +pub const _SC_TRACE_LOG: ::c_int = 752; +pub const _SC_TRACE_NAME_MAX: ::c_int = 753; +pub const _SC_TRACE_SYS_MAX: ::c_int = 754; +pub const _SC_TRACE_USER_EVENT_MAX: ::c_int = 755; +pub const _SC_TYPED_MEMORY_OBJECTS: ::c_int = 756; +pub const _SC_V6_ILP32_OFF32: ::c_int = 757; +pub const _SC_V6_ILP32_OFFBIG: ::c_int = 758; +pub const _SC_V6_LP64_OFF64: ::c_int = 759; +pub const _SC_V6_LPBIG_OFFBIG: ::c_int = 760; +pub const _SC_XOPEN_STREAMS: ::c_int = 761; +pub const _SC_IPV6: ::c_int = 762; +pub const _SC_RAW_SOCKETS: ::c_int = 763; + +pub const _MUTEX_MAGIC: u16 = 0x4d58; // MX +pub const _COND_MAGIC: u16 = 0x4356; // CV +pub const _RWL_MAGIC: u16 = 0x5257; // RW + +pub const NCCS: usize = 19; + +pub const LOG_CRON: ::c_int = 15 << 3; + +pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = pthread_mutex_t { +    __pthread_mutex_flag1: 0, +    __pthread_mutex_flag2: 0, +    __pthread_mutex_ceiling: 0, +    __pthread_mutex_type: PTHREAD_PROCESS_PRIVATE, +    __pthread_mutex_magic: _MUTEX_MAGIC, +    __pthread_mutex_lock: 0, +    __pthread_mutex_data: 0, +}; +pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = pthread_cond_t { +    __pthread_cond_flag: [0; 4], +    __pthread_cond_type: PTHREAD_PROCESS_PRIVATE, +    __pthread_cond_magic: _COND_MAGIC, +    __pthread_cond_data: 0, +}; +pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t { +    __pthread_rwlock_readers: 0, +    __pthread_rwlock_type: PTHREAD_PROCESS_PRIVATE, +    __pthread_rwlock_magic: _RWL_MAGIC, +    __pthread_rwlock_mutex: PTHREAD_MUTEX_INITIALIZER, +    __pthread_rwlock_readercv: PTHREAD_COND_INITIALIZER, +    __pthread_rwlock_writercv: PTHREAD_COND_INITIALIZER, +}; +pub const PTHREAD_MUTEX_NORMAL: ::c_int = 0; +pub const PTHREAD_MUTEX_ERRORCHECK: ::c_int = 2; +pub const PTHREAD_MUTEX_RECURSIVE: ::c_int = 4; +pub const PTHREAD_MUTEX_DEFAULT: ::c_int = PTHREAD_MUTEX_NORMAL; + +pub const RTLD_NEXT: *mut ::c_void = -1isize as *mut ::c_void; +pub const RTLD_DEFAULT: *mut ::c_void = -2isize as *mut ::c_void; +pub const RTLD_SELF: *mut ::c_void = -3isize as *mut ::c_void; +pub const RTLD_PROBE: *mut ::c_void = -4isize as *mut ::c_void; + +pub const RTLD_LAZY: ::c_int = 0x1; +pub const RTLD_NOW: ::c_int = 0x2; +pub const RTLD_NOLOAD: ::c_int = 0x4; +pub const RTLD_GLOBAL: ::c_int = 0x100; +pub const RTLD_LOCAL: ::c_int = 0x0; +pub const RTLD_PARENT: ::c_int = 0x200; +pub const RTLD_GROUP: ::c_int = 0x400; +pub const RTLD_WORLD: ::c_int = 0x800; +pub const RTLD_NODELETE: ::c_int = 0x1000; +pub const RTLD_FIRST: ::c_int = 0x2000; +pub const RTLD_CONFGEN: ::c_int = 0x10000; + +pub const PORT_SOURCE_AIO: ::c_int = 1; +pub const PORT_SOURCE_TIMER: ::c_int = 2; +pub const PORT_SOURCE_USER: ::c_int = 3; +pub const PORT_SOURCE_FD: ::c_int = 4; +pub const PORT_SOURCE_ALERT: ::c_int = 5; +pub const PORT_SOURCE_MQ: ::c_int = 6; +pub const PORT_SOURCE_FILE: ::c_int = 7; + +pub const NONROOT_USR: ::c_short = 2; +pub const _UTX_USERSIZE: usize = 32; +pub const _UTX_LINESIZE: usize = 32; +pub const _UTX_PADSIZE: usize = 5; +pub const _UTX_IDSIZE: usize = 4; +pub const _UTX_HOSTSIZE: usize = 257; +pub const EMPTY: ::c_short = 0; +pub const RUN_LVL: ::c_short = 1; +pub const BOOT_TIME: ::c_short = 2; +pub const OLD_TIME: ::c_short = 3; +pub const NEW_TIME: ::c_short = 4; +pub const INIT_PROCESS: ::c_short = 5; +pub const LOGIN_PROCESS: ::c_short = 6; +pub const USER_PROCESS: ::c_short = 7; +pub const DEAD_PROCESS: ::c_short = 8; +pub const ACCOUNTING: ::c_short = 9; +pub const DOWN_TIME: ::c_short = 10; + +const _TIOC: ::c_int = ('T' as i32) << 8; +const tIOC: ::c_int = ('t' as i32) << 8; +pub const TCGETA: ::c_int = _TIOC | 1; +pub const TCSETA: ::c_int = _TIOC | 2; +pub const TCSETAW: ::c_int = _TIOC | 3; +pub const TCSETAF: ::c_int = _TIOC | 4; +pub const TCSBRK: ::c_int = _TIOC | 5; +pub const TCXONC: ::c_int = _TIOC | 6; +pub const TCFLSH: ::c_int = _TIOC | 7; +pub const TCDSET: ::c_int = _TIOC | 32; +pub const TCGETS: ::c_int = _TIOC | 13; +pub const TCSETS: ::c_int = _TIOC | 14; +pub const TCSANOW: ::c_int = _TIOC | 14; +pub const TCSETSW: ::c_int = _TIOC | 15; +pub const TCSADRAIN: ::c_int = _TIOC | 15; +pub const TCSETSF: ::c_int = _TIOC | 16; +pub const TCSAFLUSH: ::c_int = _TIOC | 16; +pub const TCIFLUSH: ::c_int = 0; +pub const TCOFLUSH: ::c_int = 1; +pub const TCIOFLUSH: ::c_int = 2; +pub const TCOOFF: ::c_int = 0; +pub const TCOON: ::c_int = 1; +pub const TCIOFF: ::c_int = 2; +pub const TCION: ::c_int = 3; +pub const TIOC: ::c_int = _TIOC; +pub const TIOCKBON: ::c_int = _TIOC | 8; +pub const TIOCKBOF: ::c_int = _TIOC | 9; +pub const TIOCGWINSZ: ::c_int = _TIOC | 104; +pub const TIOCSWINSZ: ::c_int = _TIOC | 103; +pub const TIOCGSOFTCAR: ::c_int = _TIOC | 105; +pub const TIOCSSOFTCAR: ::c_int = _TIOC | 106; +pub const TIOCGPPS: ::c_int = _TIOC | 125; +pub const TIOCSPPS: ::c_int = _TIOC | 126; +pub const TIOCGPPSEV: ::c_int = _TIOC | 127; +pub const TIOCGETD: ::c_int = tIOC | 0; +pub const TIOCSETD: ::c_int = tIOC | 1; +pub const TIOCHPCL: ::c_int = tIOC | 2; +pub const TIOCGETP: ::c_int = tIOC | 8; +pub const TIOCSETP: ::c_int = tIOC | 9; +pub const TIOCSETN: ::c_int = tIOC | 10; +pub const TIOCEXCL: ::c_int = tIOC | 13; +pub const TIOCNXCL: ::c_int = tIOC | 14; +pub const TIOCFLUSH: ::c_int = tIOC | 16; +pub const TIOCSETC: ::c_int = tIOC | 17; +pub const TIOCGETC: ::c_int = tIOC | 18; +pub const TIOCLBIS: ::c_int = tIOC | 127; +pub const TIOCLBIC: ::c_int = tIOC | 126; +pub const TIOCLSET: ::c_int = tIOC | 125; +pub const TIOCLGET: ::c_int = tIOC | 124; +pub const TIOCSBRK: ::c_int = tIOC | 123; +pub const TIOCCBRK: ::c_int = tIOC | 122; +pub const TIOCSDTR: ::c_int = tIOC | 121; +pub const TIOCCDTR: ::c_int = tIOC | 120; +pub const TIOCSLTC: ::c_int = tIOC | 117; +pub const TIOCGLTC: ::c_int = tIOC | 116; +pub const TIOCOUTQ: ::c_int = tIOC | 115; +pub const TIOCNOTTY: ::c_int = tIOC | 113; +pub const TIOCSCTTY: ::c_int = tIOC | 132; +pub const TIOCSTOP: ::c_int = tIOC | 111; +pub const TIOCSTART: ::c_int = tIOC | 110; +pub const TIOCSILOOP: ::c_int = tIOC | 109; +pub const TIOCCILOOP: ::c_int = tIOC | 108; +pub const TIOCGPGRP: ::c_int = tIOC | 20; +pub const TIOCSPGRP: ::c_int = tIOC | 21; +pub const TIOCGSID: ::c_int = tIOC | 22; +pub const TIOCSTI: ::c_int = tIOC | 23; +pub const TIOCMSET: ::c_int = tIOC | 26; +pub const TIOCMBIS: ::c_int = tIOC | 27; +pub const TIOCMBIC: ::c_int = tIOC | 28; +pub const TIOCMGET: ::c_int = tIOC | 29; +pub const TIOCREMOTE: ::c_int = tIOC | 30; +pub const TIOCSIGNAL: ::c_int = tIOC | 31; + +pub const TIOCM_LE: ::c_int = 0o0001; +pub const TIOCM_DTR: ::c_int = 0o0002; +pub const TIOCM_RTS: ::c_int = 0o0004; +pub const TIOCM_ST: ::c_int = 0o0010; +pub const TIOCM_SR: ::c_int = 0o0020; +pub const TIOCM_CTS: ::c_int = 0o0040; +pub const TIOCM_CAR: ::c_int = 0o0100; +pub const TIOCM_CD: ::c_int = TIOCM_CAR; +pub const TIOCM_RNG: ::c_int = 0o0200; +pub const TIOCM_RI: ::c_int = TIOCM_RNG; +pub const TIOCM_DSR: ::c_int = 0o0400; + +pub const EPOLLIN: ::c_int = 0x1; +pub const EPOLLPRI: ::c_int = 0x2; +pub const EPOLLOUT: ::c_int = 0x4; +pub const EPOLLRDNORM: ::c_int = 0x40; +pub const EPOLLRDBAND: ::c_int = 0x80; +pub const EPOLLWRNORM: ::c_int = 0x100; +pub const EPOLLWRBAND: ::c_int = 0x200; +pub const EPOLLMSG: ::c_int = 0x400; +pub const EPOLLERR: ::c_int = 0x8; +pub const EPOLLHUP: ::c_int = 0x10; +pub const EPOLLET: ::c_int = 0x80000000; +pub const EPOLLRDHUP: ::c_int = 0x2000; +pub const EPOLLONESHOT: ::c_int = 0x40000000; +pub const EPOLLWAKEUP: ::c_int = 0x20000000; +pub const EPOLLEXCLUSIVE: ::c_int = 0x10000000; +pub const EPOLL_CLOEXEC: ::c_int = 0x80000; +pub const EPOLL_CTL_ADD: ::c_int = 1; +pub const EPOLL_CTL_MOD: ::c_int = 3; +pub const EPOLL_CTL_DEL: ::c_int = 2; + +/* termios */ +pub const B0: speed_t = 0; +pub const B50: speed_t = 1; +pub const B75: speed_t = 2; +pub const B110: speed_t = 3; +pub const B134: speed_t = 4; +pub const B150: speed_t = 5; +pub const B200: speed_t = 6; +pub const B300: speed_t = 7; +pub const B600: speed_t = 8; +pub const B1200: speed_t = 9; +pub const B1800: speed_t = 10; +pub const B2400: speed_t = 11; +pub const B4800: speed_t = 12; +pub const B9600: speed_t = 13; +pub const B19200: speed_t = 14; +pub const B38400: speed_t = 15; +pub const B57600: speed_t = 16; +pub const B76800: speed_t = 17; +pub const B115200: speed_t = 18; +pub const B153600: speed_t = 19; +pub const B230400: speed_t = 20; +pub const B307200: speed_t = 21; +pub const B460800: speed_t = 22; +pub const B921600: speed_t = 23; +pub const CSTART: ::tcflag_t = 0o21; +pub const CSTOP: ::tcflag_t = 0o23; +pub const CSWTCH: ::tcflag_t = 0o32; +pub const CBAUD: ::tcflag_t = 0o17; +pub const CIBAUD: ::tcflag_t = 0o3600000; +pub const CBAUDEXT: ::tcflag_t = 0o10000000; +pub const CIBAUDEXT: ::tcflag_t = 0o20000000; +pub const CSIZE: ::tcflag_t = 0o000060; +pub const CS5: ::tcflag_t = 0; +pub const CS6: ::tcflag_t = 0o000020; +pub const CS7: ::tcflag_t = 0o000040; +pub const CS8: ::tcflag_t = 0o000060; +pub const CSTOPB: ::tcflag_t = 0o000100; +pub const ECHO: ::tcflag_t = 0o000010; +pub const ECHOE: ::tcflag_t = 0o000020; +pub const ECHOK: ::tcflag_t = 0o000040; +pub const ECHONL: ::tcflag_t = 0o000100; +pub const ECHOCTL: ::tcflag_t = 0o001000; +pub const ECHOPRT: ::tcflag_t = 0o002000; +pub const ECHOKE: ::tcflag_t = 0o004000; +pub const EXTPROC: ::tcflag_t = 0o200000; +pub const IGNBRK: ::tcflag_t = 0o000001; +pub const BRKINT: ::tcflag_t = 0o000002; +pub const IGNPAR: ::tcflag_t = 0o000004; +pub const PARMRK: ::tcflag_t = 0o000010; +pub const INPCK: ::tcflag_t = 0o000020; +pub const ISTRIP: ::tcflag_t = 0o000040; +pub const INLCR: ::tcflag_t = 0o000100; +pub const IGNCR: ::tcflag_t = 0o000200; +pub const ICRNL: ::tcflag_t = 0o000400; +pub const IUCLC: ::tcflag_t = 0o001000; +pub const IXON: ::tcflag_t = 0o002000; +pub const IXOFF: ::tcflag_t = 0o010000; +pub const IXANY: ::tcflag_t = 0o004000; +pub const IMAXBEL: ::tcflag_t = 0o020000; +pub const DOSMODE: ::tcflag_t = 0o100000; +pub const OPOST: ::tcflag_t = 0o000001; +pub const OLCUC: ::tcflag_t = 0o000002; +pub const ONLCR: ::tcflag_t = 0o000004; +pub const OCRNL: ::tcflag_t = 0o000010; +pub const ONOCR: ::tcflag_t = 0o000020; +pub const ONLRET: ::tcflag_t = 0o000040; +pub const OFILL: ::tcflag_t = 0o0000100; +pub const OFDEL: ::tcflag_t = 0o0000200; +pub const CREAD: ::tcflag_t = 0o000200; +pub const PARENB: ::tcflag_t = 0o000400; +pub const PARODD: ::tcflag_t = 0o001000; +pub const HUPCL: ::tcflag_t = 0o002000; +pub const CLOCAL: ::tcflag_t = 0o004000; +pub const CRTSXOFF: ::tcflag_t = 0o10000000000; +pub const CRTSCTS: ::tcflag_t = 0o20000000000; +pub const ISIG: ::tcflag_t = 0o000001; +pub const ICANON: ::tcflag_t = 0o000002; +pub const IEXTEN: ::tcflag_t = 0o100000; +pub const TOSTOP: ::tcflag_t = 0o000400; +pub const FLUSHO: ::tcflag_t = 0o020000; +pub const PENDIN: ::tcflag_t = 0o040000; +pub const NOFLSH: ::tcflag_t = 0o000200; +pub const VINTR: usize = 0; +pub const VQUIT: usize = 1; +pub const VERASE: usize = 2; +pub const VKILL: usize = 3; +pub const VEOF: usize = 4; +pub const VEOL: usize = 5; +pub const VEOL2: usize = 6; +pub const VMIN: usize = 4; +pub const VTIME: usize = 5; +pub const VSWTCH: usize = 7; +pub const VSTART: usize = 8; +pub const VSTOP: usize = 9; +pub const VSUSP: usize = 10; +pub const VDSUSP: usize = 11; +pub const VREPRINT: usize = 12; +pub const VDISCARD: usize = 13; +pub const VWERASE: usize = 14; +pub const VLNEXT: usize = 15; +pub const VSTATUS: usize = 16; +pub const VERASE2: usize = 17; + +// <sys/stropts.h> +const STR: ::c_int = (b'S' as ::c_int) << 8; +pub const I_NREAD: ::c_int = STR | 0o1; +pub const I_PUSH: ::c_int = STR | 0o2; +pub const I_POP: ::c_int = STR | 0o3; +pub const I_LOOK: ::c_int = STR | 0o4; +pub const I_FLUSH: ::c_int = STR | 0o5; +pub const I_SRDOPT: ::c_int = STR | 0o6; +pub const I_GRDOPT: ::c_int = STR | 0o7; +pub const I_STR: ::c_int = STR | 0o10; +pub const I_SETSIG: ::c_int = STR | 0o11; +pub const I_GETSIG: ::c_int = STR | 0o12; +pub const I_FIND: ::c_int = STR | 0o13; +pub const I_LINK: ::c_int = STR | 0o14; +pub const I_UNLINK: ::c_int = STR | 0o15; +pub const I_PEEK: ::c_int = STR | 0o17; +pub const I_FDINSERT: ::c_int = STR | 0o20; +pub const I_SENDFD: ::c_int = STR | 0o21; +pub const I_RECVFD: ::c_int = STR | 0o16; +pub const I_SWROPT: ::c_int = STR | 0o23; +pub const I_GWROPT: ::c_int = STR | 0o24; +pub const I_LIST: ::c_int = STR | 0o25; +pub const I_PLINK: ::c_int = STR | 0o26; +pub const I_PUNLINK: ::c_int = STR | 0o27; +pub const I_ANCHOR: ::c_int = STR | 0o30; +pub const I_FLUSHBAND: ::c_int = STR | 0o34; +pub const I_CKBAND: ::c_int = STR | 0o35; +pub const I_GETBAND: ::c_int = STR | 0o36; +pub const I_ATMARK: ::c_int = STR | 0o37; +pub const I_SETCLTIME: ::c_int = STR | 0o40; +pub const I_GETCLTIME: ::c_int = STR | 0o41; +pub const I_CANPUT: ::c_int = STR | 0o42; +pub const I_SERROPT: ::c_int = STR | 0o43; +pub const I_GERROPT: ::c_int = STR | 0o44; +pub const I_ESETSIG: ::c_int = STR | 0o45; +pub const I_EGETSIG: ::c_int = STR | 0o46; +pub const __I_PUSH_NOCTTY: ::c_int = STR | 0o47; + +// 3SOCKET flags +pub const SOCK_CLOEXEC: ::c_int = 0x080000; +pub const SOCK_NONBLOCK: ::c_int = 0x100000; +pub const SOCK_NDELAY: ::c_int = 0x200000; + +//<sys/timex.h> +pub const SCALE_KG: ::c_int = 1 << 6; +pub const SCALE_KF: ::c_int = 1 << 16; +pub const SCALE_KH: ::c_int = 1 << 2; +pub const MAXTC: ::c_int = 1 << 6; +pub const SCALE_PHASE: ::c_int = 1 << 22; +pub const SCALE_USEC: ::c_int = 1 << 16; +pub const SCALE_UPDATE: ::c_int = SCALE_KG * MAXTC; +pub const FINEUSEC: ::c_int = 1 << 22; +pub const MAXPHASE: ::c_int = 512000; +pub const MAXFREQ: ::c_int = 512 * SCALE_USEC; +pub const MAXTIME: ::c_int = 200 << PPS_AVG; +pub const MINSEC: ::c_int = 16; +pub const MAXSEC: ::c_int = 1200; +pub const PPS_AVG: ::c_int = 2; +pub const PPS_SHIFT: ::c_int = 2; +pub const PPS_SHIFTMAX: ::c_int = 8; +pub const PPS_VALID: ::c_int = 120; +pub const MAXGLITCH: ::c_int = 30; +pub const MOD_OFFSET: u32 = 0x0001; +pub const MOD_FREQUENCY: u32 = 0x0002; +pub const MOD_MAXERROR: u32 = 0x0004; +pub const MOD_ESTERROR: u32 = 0x0008; +pub const MOD_STATUS: u32 = 0x0010; +pub const MOD_TIMECONST: u32 = 0x0020; +pub const MOD_CLKB: u32 = 0x4000; +pub const MOD_CLKA: u32 = 0x8000; +pub const STA_PLL: u32 = 0x0001; +pub const STA_PPSFREQ: i32 = 0x0002; +pub const STA_PPSTIME: i32 = 0x0004; +pub const STA_FLL: i32 = 0x0008; +pub const STA_INS: i32 = 0x0010; +pub const STA_DEL: i32 = 0x0020; +pub const STA_UNSYNC: i32 = 0x0040; +pub const STA_FREQHOLD: i32 = 0x0080; +pub const STA_PPSSIGNAL: i32 = 0x0100; +pub const STA_PPSJITTER: i32 = 0x0200; +pub const STA_PPSWANDER: i32 = 0x0400; +pub const STA_PPSERROR: i32 = 0x0800; +pub const STA_CLOCKERR: i32 = 0x1000; +pub const STA_RONLY: i32 = +    STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR | STA_CLOCKERR; +pub const TIME_OK: i32 = 0; +pub const TIME_INS: i32 = 1; +pub const TIME_DEL: i32 = 2; +pub const TIME_OOP: i32 = 3; +pub const TIME_WAIT: i32 = 4; +pub const TIME_ERROR: i32 = 5; + +pub const PRIO_PROCESS: ::c_int = 0; +pub const PRIO_PGRP: ::c_int = 1; +pub const PRIO_USER: ::c_int = 2; + +pub const SCHED_OTHER: ::c_int = 0; +pub const SCHED_FIFO: ::c_int = 1; +pub const SCHED_RR: ::c_int = 2; +pub const SCHED_SYS: ::c_int = 3; +pub const SCHED_IA: ::c_int = 4; +pub const SCHED_FSS: ::c_int = 5; +pub const SCHED_FX: ::c_int = 6; + +// sys/priv.h +pub const PRIV_DEBUG: ::c_uint = 0x0001; +pub const PRIV_AWARE: ::c_uint = 0x0002; +pub const PRIV_AWARE_INHERIT: ::c_uint = 0x0004; +pub const __PROC_PROTECT: ::c_uint = 0x0008; +pub const NET_MAC_AWARE: ::c_uint = 0x0010; +pub const NET_MAC_AWARE_INHERIT: ::c_uint = 0x0020; +pub const PRIV_AWARE_RESET: ::c_uint = 0x0040; +pub const PRIV_XPOLICY: ::c_uint = 0x0080; +pub const PRIV_PFEXEC: ::c_uint = 0x0100; +pub const PRIV_USER: ::c_uint = PRIV_DEBUG +    | NET_MAC_AWARE +    | NET_MAC_AWARE_INHERIT +    | PRIV_XPOLICY +    | PRIV_AWARE_RESET +    | PRIV_PFEXEC; + +// sys/systeminfo.h +pub const SI_SYSNAME: ::c_int = 1; +pub const SI_HOSTNAME: ::c_int = 2; +pub const SI_RELEASE: ::c_int = 3; +pub const SI_VERSION: ::c_int = 4; +pub const SI_MACHINE: ::c_int = 5; +pub const SI_ARCHITECTURE: ::c_int = 6; +pub const SI_HW_SERIAL: ::c_int = 7; +pub const SI_HW_PROVIDER: ::c_int = 8; +pub const SI_SET_HOSTNAME: ::c_int = 258; +pub const SI_SET_SRPC_DOMAIN: ::c_int = 265; +pub const SI_PLATFORM: ::c_int = 513; +pub const SI_ISALIST: ::c_int = 514; +pub const SI_DHCP_CACHE: ::c_int = 515; +pub const SI_ARCHITECTURE_32: ::c_int = 516; +pub const SI_ARCHITECTURE_64: ::c_int = 517; +pub const SI_ARCHITECTURE_K: ::c_int = 518; +pub const SI_ARCHITECTURE_NATIVE: ::c_int = 519; + +// sys/lgrp_user.h +pub const LGRP_COOKIE_NONE: ::lgrp_cookie_t = 0; +pub const LGRP_AFF_NONE: ::lgrp_affinity_t = 0x0; +pub const LGRP_AFF_WEAK: ::lgrp_affinity_t = 0x10; +pub const LGRP_AFF_STRONG: ::lgrp_affinity_t = 0x100; +pub const LGRP_RSRC_COUNT: ::lgrp_rsrc_t = 2; +pub const LGRP_RSRC_CPU: ::lgrp_rsrc_t = 0; +pub const LGRP_RSRC_MEM: ::lgrp_rsrc_t = 1; +pub const LGRP_CONTENT_ALL: ::lgrp_content_t = 0; +pub const LGRP_CONTENT_HIERARCHY: ::lgrp_content_t = LGRP_CONTENT_ALL; +pub const LGRP_CONTENT_DIRECT: ::lgrp_content_t = 1; +pub const LGRP_LAT_CPU_TO_MEM: ::lgrp_lat_between_t = 0; +pub const LGRP_MEM_SZ_FREE: ::lgrp_mem_size_flag_t = 0; +pub const LGRP_MEM_SZ_INSTALLED: ::lgrp_mem_size_flag_t = 1; +pub const LGRP_VIEW_CALLER: ::lgrp_view_t = 0; +pub const LGRP_VIEW_OS: ::lgrp_view_t = 1; + +// sys/processor.h + +pub const P_OFFLINE: ::c_int = 0x001; +pub const P_ONLINE: ::c_int = 0x002; +pub const P_STATUS: ::c_int = 0x003; +pub const P_FAULTED: ::c_int = 0x004; +pub const P_POWEROFF: ::c_int = 0x005; +pub const P_NOINTR: ::c_int = 0x006; +pub const P_SPARE: ::c_int = 0x007; +pub const P_DISABLED: ::c_int = 0x008; +pub const P_FORCED: ::c_int = 0x10000000; +pub const PI_TYPELEN: ::c_int = 16; +pub const PI_FPUTYPE: ::c_int = 32; + +// sys/auxv.h +pub const AT_SUN_HWCAP: ::c_uint = 2009; +pub const AT_SUN_HWCAP2: ::c_uint = 2023; +pub const AT_SUN_FPTYPE: ::c_uint = 2027; + +// As per sys/socket.h, header alignment must be 8 bytes on SPARC +// and 4 bytes everywhere else: +#[cfg(target_arch = "sparc64")] +const _CMSG_HDR_ALIGNMENT: usize = 8; +#[cfg(not(target_arch = "sparc64"))] +const _CMSG_HDR_ALIGNMENT: usize = 4; + +const _CMSG_DATA_ALIGNMENT: usize = ::mem::size_of::<::c_int>(); + +const NEWDEV: ::c_int = 1; + +// sys/sendfile.h +pub const SFV_FD_SELF: ::c_int = -2; + +const_fn! { +    {const} fn _CMSG_HDR_ALIGN(p: usize) -> usize { +        (p + _CMSG_HDR_ALIGNMENT - 1) & !(_CMSG_HDR_ALIGNMENT - 1) +    } + +    {const} fn _CMSG_DATA_ALIGN(p: usize) -> usize { +        (p + _CMSG_DATA_ALIGNMENT - 1) & !(_CMSG_DATA_ALIGNMENT - 1) +    } +} + +f! { +    pub fn CMSG_DATA(cmsg: *const ::cmsghdr) -> *mut ::c_uchar { +        _CMSG_DATA_ALIGN(cmsg.offset(1) as usize) as *mut ::c_uchar +    } + +    pub {const} fn CMSG_LEN(length: ::c_uint) -> ::c_uint { +        _CMSG_DATA_ALIGN(::mem::size_of::<::cmsghdr>()) as ::c_uint + length +    } + +    pub fn CMSG_FIRSTHDR(mhdr: *const ::msghdr) -> *mut ::cmsghdr { +        if ((*mhdr).msg_controllen as usize) < ::mem::size_of::<::cmsghdr>() { +            0 as *mut ::cmsghdr +        } else { +            (*mhdr).msg_control as *mut ::cmsghdr +        } +    } + +    pub fn CMSG_NXTHDR(mhdr: *const ::msghdr, cmsg: *const ::cmsghdr) +        -> *mut ::cmsghdr +    { +        if cmsg.is_null() { +            return ::CMSG_FIRSTHDR(mhdr); +        }; +        let next = _CMSG_HDR_ALIGN(cmsg as usize + (*cmsg).cmsg_len as usize +            + ::mem::size_of::<::cmsghdr>()); +        let max = (*mhdr).msg_control as usize +            + (*mhdr).msg_controllen as usize; +        if next > max { +            0 as *mut ::cmsghdr +        } else { +            _CMSG_HDR_ALIGN(cmsg as usize + (*cmsg).cmsg_len as usize) +                as *mut ::cmsghdr +        } +    } + +    pub {const} fn CMSG_SPACE(length: ::c_uint) -> ::c_uint { +        _CMSG_HDR_ALIGN(::mem::size_of::<::cmsghdr>() as usize +            + length as usize) as ::c_uint +    } + +    pub fn FD_CLR(fd: ::c_int, set: *mut fd_set) -> () { +        let bits = ::mem::size_of_val(&(*set).fds_bits[0]) * 8; +        let fd = fd as usize; +        (*set).fds_bits[fd / bits] &= !(1 << (fd % bits)); +        return +    } + +    pub fn FD_ISSET(fd: ::c_int, set: *const fd_set) -> bool { +        let bits = ::mem::size_of_val(&(*set).fds_bits[0]) * 8; +        let fd = fd as usize; +        return ((*set).fds_bits[fd / bits] & (1 << (fd % bits))) != 0 +    } + +    pub fn FD_SET(fd: ::c_int, set: *mut fd_set) -> () { +        let bits = ::mem::size_of_val(&(*set).fds_bits[0]) * 8; +        let fd = fd as usize; +        (*set).fds_bits[fd / bits] |= 1 << (fd % bits); +        return +    } + +    pub fn FD_ZERO(set: *mut fd_set) -> () { +        for slot in (*set).fds_bits.iter_mut() { +            *slot = 0; +        } +    } +} + +safe_f! { +    pub {const} fn WIFEXITED(status: ::c_int) -> bool { +        (status & 0xFF) == 0 +    } + +    pub {const} fn WEXITSTATUS(status: ::c_int) -> ::c_int { +        (status >> 8) & 0xFF +    } + +    pub {const} fn WTERMSIG(status: ::c_int) -> ::c_int { +        status & 0x7F +    } + +    pub {const} fn WIFCONTINUED(status: ::c_int) -> bool { +        (status & 0xffff) == 0xffff +    } + +    pub {const} fn WSTOPSIG(status: ::c_int) -> ::c_int { +        (status & 0xff00) >> 8 +    } + +    pub {const} fn WIFSIGNALED(status: ::c_int) -> bool { +        ((status & 0xff) > 0) && (status & 0xff00 == 0) +    } + +    pub {const} fn WIFSTOPPED(status: ::c_int) -> bool { +        ((status & 0xff) == 0x7f) && ((status & 0xff00) != 0) +    } + +    pub {const} fn WCOREDUMP(status: ::c_int) -> bool { +        (status & 0x80) != 0 +    } + +    pub {const} fn MR_GET_TYPE(flags: ::c_uint) -> ::c_uint { +        flags & 0x0000ffff +    } +} + +extern "C" { +    pub fn getrlimit(resource: ::c_int, rlim: *mut ::rlimit) -> ::c_int; +    pub fn setrlimit(resource: ::c_int, rlim: *const ::rlimit) -> ::c_int; + +    pub fn strerror_r(errnum: ::c_int, buf: *mut c_char, buflen: ::size_t) -> ::c_int; + +    pub fn sem_destroy(sem: *mut sem_t) -> ::c_int; +    pub fn sem_init(sem: *mut sem_t, pshared: ::c_int, value: ::c_uint) -> ::c_int; + +    pub fn abs(i: ::c_int) -> ::c_int; +    pub fn acct(filename: *const ::c_char) -> ::c_int; +    pub fn dirfd(dirp: *mut ::DIR) -> ::c_int; +    pub fn labs(i: ::c_long) -> ::c_long; +    pub fn rand() -> ::c_int; +    pub fn srand(seed: ::c_uint); +    pub fn getentropy(buf: *mut ::c_void, buflen: ::size_t) -> ::c_int; +    pub fn getrandom(bbuf: *mut ::c_void, buflen: ::size_t, flags: ::c_uint) -> ::ssize_t; + +    pub fn gettimeofday(tp: *mut ::timeval, tz: *mut ::c_void) -> ::c_int; +    pub fn settimeofday(tp: *const ::timeval, tz: *const ::c_void) -> ::c_int; +    pub fn getifaddrs(ifap: *mut *mut ::ifaddrs) -> ::c_int; +    pub fn freeifaddrs(ifa: *mut ::ifaddrs); + +    pub fn stack_getbounds(sp: *mut ::stack_t) -> ::c_int; +    pub fn getgrouplist( +        name: *const ::c_char, +        basegid: ::gid_t, +        groups: *mut ::gid_t, +        ngroups: *mut ::c_int, +    ) -> ::c_int; +    pub fn initgroups(name: *const ::c_char, basegid: ::gid_t) -> ::c_int; +    pub fn setgroups(ngroups: ::c_int, ptr: *const ::gid_t) -> ::c_int; +    pub fn ioctl(fildes: ::c_int, request: ::c_int, ...) -> ::c_int; +    pub fn mprotect(addr: *const ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int; +    pub fn ___errno() -> *mut ::c_int; +    pub fn clock_getres(clk_id: ::clockid_t, tp: *mut ::timespec) -> ::c_int; +    pub fn clock_gettime(clk_id: ::clockid_t, tp: *mut ::timespec) -> ::c_int; +    pub fn clock_nanosleep( +        clk_id: ::clockid_t, +        flags: ::c_int, +        rqtp: *const ::timespec, +        rmtp: *mut ::timespec, +    ) -> ::c_int; +    pub fn clock_settime(clk_id: ::clockid_t, tp: *const ::timespec) -> ::c_int; +    pub fn getnameinfo( +        sa: *const ::sockaddr, +        salen: ::socklen_t, +        host: *mut ::c_char, +        hostlen: ::socklen_t, +        serv: *mut ::c_char, +        servlen: ::socklen_t, +        flags: ::c_int, +    ) -> ::c_int; +    pub fn setpwent(); +    pub fn endpwent(); +    pub fn getpwent() -> *mut passwd; +    pub fn fdatasync(fd: ::c_int) -> ::c_int; +    pub fn nl_langinfo_l(item: ::nl_item, locale: ::locale_t) -> *mut ::c_char; +    pub fn duplocale(base: ::locale_t) -> ::locale_t; +    pub fn freelocale(loc: ::locale_t); +    pub fn newlocale(mask: ::c_int, locale: *const ::c_char, base: ::locale_t) -> ::locale_t; +    pub fn uselocale(loc: ::locale_t) -> ::locale_t; +    pub fn getprogname() -> *const ::c_char; +    pub fn setprogname(name: *const ::c_char); +    pub fn getloadavg(loadavg: *mut ::c_double, nelem: ::c_int) -> ::c_int; +    pub fn getpriority(which: ::c_int, who: ::c_int) -> ::c_int; +    pub fn setpriority(which: ::c_int, who: ::c_int, prio: ::c_int) -> ::c_int; + +    pub fn mknodat( +        dirfd: ::c_int, +        pathname: *const ::c_char, +        mode: ::mode_t, +        dev: dev_t, +    ) -> ::c_int; +    pub fn mkfifoat(dirfd: ::c_int, pathname: *const ::c_char, mode: ::mode_t) -> ::c_int; +    pub fn sethostname(name: *const ::c_char, len: ::c_int) -> ::c_int; +    pub fn if_nameindex() -> *mut if_nameindex; +    pub fn if_freenameindex(ptr: *mut if_nameindex); +    pub fn pthread_create( +        native: *mut ::pthread_t, +        attr: *const ::pthread_attr_t, +        f: extern "C" fn(*mut ::c_void) -> *mut ::c_void, +        value: *mut ::c_void, +    ) -> ::c_int; +    pub fn pthread_attr_getstack( +        attr: *const ::pthread_attr_t, +        stackaddr: *mut *mut ::c_void, +        stacksize: *mut ::size_t, +    ) -> ::c_int; +    pub fn pthread_condattr_getclock( +        attr: *const pthread_condattr_t, +        clock_id: *mut clockid_t, +    ) -> ::c_int; +    pub fn pthread_condattr_setclock( +        attr: *mut pthread_condattr_t, +        clock_id: ::clockid_t, +    ) -> ::c_int; +    pub fn sem_timedwait(sem: *mut sem_t, abstime: *const ::timespec) -> ::c_int; +    pub fn sem_getvalue(sem: *mut sem_t, sval: *mut ::c_int) -> ::c_int; +    pub fn pthread_mutex_timedlock( +        lock: *mut pthread_mutex_t, +        abstime: *const ::timespec, +    ) -> ::c_int; +    pub fn pthread_getname_np(tid: ::pthread_t, name: *mut ::c_char, len: ::size_t) -> ::c_int; +    pub fn pthread_setname_np(tid: ::pthread_t, name: *const ::c_char) -> ::c_int; +    pub fn waitid(idtype: idtype_t, id: id_t, infop: *mut ::siginfo_t, options: ::c_int) +        -> ::c_int; + +    #[cfg_attr(target_os = "illumos", link_name = "_glob_ext")] +    pub fn glob( +        pattern: *const ::c_char, +        flags: ::c_int, +        errfunc: ::Option<extern "C" fn(epath: *const ::c_char, errno: ::c_int) -> ::c_int>, +        pglob: *mut ::glob_t, +    ) -> ::c_int; + +    #[cfg_attr(target_os = "illumos", link_name = "_globfree_ext")] +    pub fn globfree(pglob: *mut ::glob_t); + +    pub fn posix_madvise(addr: *mut ::c_void, len: ::size_t, advice: ::c_int) -> ::c_int; + +    pub fn shmat(shmid: ::c_int, shmaddr: *const ::c_void, shmflg: ::c_int) -> *mut ::c_void; + +    pub fn shmctl(shmid: ::c_int, cmd: ::c_int, buf: *mut ::shmid_ds) -> ::c_int; + +    pub fn shmdt(shmaddr: *const ::c_void) -> ::c_int; + +    pub fn shmget(key: key_t, size: ::size_t, shmflg: ::c_int) -> ::c_int; + +    pub fn shm_open(name: *const ::c_char, oflag: ::c_int, mode: ::mode_t) -> ::c_int; +    pub fn shm_unlink(name: *const ::c_char) -> ::c_int; + +    pub fn seekdir(dirp: *mut ::DIR, loc: ::c_long); + +    pub fn telldir(dirp: *mut ::DIR) -> ::c_long; +    pub fn madvise(addr: *mut ::c_void, len: ::size_t, advice: ::c_int) -> ::c_int; + +    pub fn msync(addr: *mut ::c_void, len: ::size_t, flags: ::c_int) -> ::c_int; + +    pub fn memalign(align: ::size_t, size: ::size_t) -> *mut ::c_void; + +    pub fn recvfrom( +        socket: ::c_int, +        buf: *mut ::c_void, +        len: ::size_t, +        flags: ::c_int, +        addr: *mut ::sockaddr, +        addrlen: *mut ::socklen_t, +    ) -> ::ssize_t; +    pub fn mkstemps(template: *mut ::c_char, suffixlen: ::c_int) -> ::c_int; +    pub fn futimesat(fd: ::c_int, path: *const ::c_char, times: *const ::timeval) -> ::c_int; +    pub fn futimens(dirfd: ::c_int, times: *const ::timespec) -> ::c_int; +    pub fn utimensat( +        dirfd: ::c_int, +        path: *const ::c_char, +        times: *const ::timespec, +        flag: ::c_int, +    ) -> ::c_int; +    pub fn nl_langinfo(item: ::nl_item) -> *mut ::c_char; + +    #[cfg_attr(target_os = "illumos", link_name = "__xnet_bind")] +    pub fn bind(socket: ::c_int, address: *const ::sockaddr, address_len: ::socklen_t) -> ::c_int; + +    pub fn writev(fd: ::c_int, iov: *const ::iovec, iovcnt: ::c_int) -> ::ssize_t; +    pub fn readv(fd: ::c_int, iov: *const ::iovec, iovcnt: ::c_int) -> ::ssize_t; + +    #[cfg_attr(target_os = "illumos", link_name = "__xnet_sendmsg")] +    pub fn sendmsg(fd: ::c_int, msg: *const ::msghdr, flags: ::c_int) -> ::ssize_t; +    #[cfg_attr(target_os = "illumos", link_name = "__xnet_recvmsg")] +    pub fn recvmsg(fd: ::c_int, msg: *mut ::msghdr, flags: ::c_int) -> ::ssize_t; +    pub fn accept4( +        fd: ::c_int, +        address: *mut sockaddr, +        address_len: *mut socklen_t, +        flags: ::c_int, +    ) -> ::c_int; + +    pub fn mq_open(name: *const ::c_char, oflag: ::c_int, ...) -> ::mqd_t; +    pub fn mq_close(mqd: ::mqd_t) -> ::c_int; +    pub fn mq_unlink(name: *const ::c_char) -> ::c_int; +    pub fn mq_receive( +        mqd: ::mqd_t, +        msg_ptr: *mut ::c_char, +        msg_len: ::size_t, +        msg_prio: *mut ::c_uint, +    ) -> ::ssize_t; +    pub fn mq_timedreceive( +        mqd: ::mqd_t, +        msg_ptr: *mut ::c_char, +        msg_len: ::size_t, +        msg_prio: *mut ::c_uint, +        abs_timeout: *const ::timespec, +    ) -> ::ssize_t; +    pub fn mq_send( +        mqd: ::mqd_t, +        msg_ptr: *const ::c_char, +        msg_len: ::size_t, +        msg_prio: ::c_uint, +    ) -> ::c_int; +    pub fn mq_timedsend( +        mqd: ::mqd_t, +        msg_ptr: *const ::c_char, +        msg_len: ::size_t, +        msg_prio: ::c_uint, +        abs_timeout: *const ::timespec, +    ) -> ::c_int; +    pub fn mq_getattr(mqd: ::mqd_t, attr: *mut ::mq_attr) -> ::c_int; +    pub fn mq_setattr(mqd: ::mqd_t, newattr: *const ::mq_attr, oldattr: *mut ::mq_attr) -> ::c_int; +    pub fn port_create() -> ::c_int; +    pub fn port_associate( +        port: ::c_int, +        source: ::c_int, +        object: ::uintptr_t, +        events: ::c_int, +        user: *mut ::c_void, +    ) -> ::c_int; +    pub fn port_dissociate(port: ::c_int, source: ::c_int, object: ::uintptr_t) -> ::c_int; +    pub fn port_get(port: ::c_int, pe: *mut port_event, timeout: *mut ::timespec) -> ::c_int; +    pub fn port_getn( +        port: ::c_int, +        pe_list: *mut port_event, +        max: ::c_uint, +        nget: *mut ::c_uint, +        timeout: *mut ::timespec, +    ) -> ::c_int; +    pub fn port_send(port: ::c_int, events: ::c_int, user: *mut ::c_void) -> ::c_int; +    pub fn port_sendn( +        port_list: *mut ::c_int, +        error_list: *mut ::c_int, +        nent: ::c_uint, +        events: ::c_int, +        user: *mut ::c_void, +    ) -> ::c_int; +    #[cfg_attr( +        any(target_os = "solaris", target_os = "illumos"), +        link_name = "__posix_getgrgid_r" +    )] +    pub fn getgrgid_r( +        gid: ::gid_t, +        grp: *mut ::group, +        buf: *mut ::c_char, +        buflen: ::size_t, +        result: *mut *mut ::group, +    ) -> ::c_int; +    pub fn sigaltstack(ss: *const stack_t, oss: *mut stack_t) -> ::c_int; +    pub fn sigsuspend(mask: *const ::sigset_t) -> ::c_int; +    pub fn sem_close(sem: *mut sem_t) -> ::c_int; +    pub fn getdtablesize() -> ::c_int; + +    // The epoll functions are actually only present on illumos.  However, +    // there are things using epoll on illumos (built using the +    // x86_64-pc-solaris target) which would break until the illumos target is +    // present in rustc. +    pub fn epoll_pwait( +        epfd: ::c_int, +        events: *mut ::epoll_event, +        maxevents: ::c_int, +        timeout: ::c_int, +        sigmask: *const ::sigset_t, +    ) -> ::c_int; + +    pub fn epoll_create(size: ::c_int) -> ::c_int; +    pub fn epoll_create1(flags: ::c_int) -> ::c_int; +    pub fn epoll_wait( +        epfd: ::c_int, +        events: *mut ::epoll_event, +        maxevents: ::c_int, +        timeout: ::c_int, +    ) -> ::c_int; +    pub fn epoll_ctl(epfd: ::c_int, op: ::c_int, fd: ::c_int, event: *mut ::epoll_event) +        -> ::c_int; + +    #[cfg_attr( +        any(target_os = "solaris", target_os = "illumos"), +        link_name = "__posix_getgrnam_r" +    )] +    pub fn getgrnam_r( +        name: *const ::c_char, +        grp: *mut ::group, +        buf: *mut ::c_char, +        buflen: ::size_t, +        result: *mut *mut ::group, +    ) -> ::c_int; +    pub fn thr_self() -> ::thread_t; +    pub fn pthread_sigmask(how: ::c_int, set: *const sigset_t, oldset: *mut sigset_t) -> ::c_int; +    pub fn sem_open(name: *const ::c_char, oflag: ::c_int, ...) -> *mut sem_t; +    pub fn getgrnam(name: *const ::c_char) -> *mut ::group; +    pub fn pthread_kill(thread: ::pthread_t, sig: ::c_int) -> ::c_int; +    pub fn sched_get_priority_min(policy: ::c_int) -> ::c_int; +    pub fn sched_get_priority_max(policy: ::c_int) -> ::c_int; +    pub fn sched_getparam(pid: ::pid_t, param: *mut sched_param) -> ::c_int; +    pub fn sched_setparam(pid: ::pid_t, param: *const sched_param) -> ::c_int; +    pub fn sched_getscheduler(pid: ::pid_t) -> ::c_int; +    pub fn sched_setscheduler( +        pid: ::pid_t, +        policy: ::c_int, +        param: *const ::sched_param, +    ) -> ::c_int; +    pub fn sem_unlink(name: *const ::c_char) -> ::c_int; +    pub fn daemon(nochdir: ::c_int, noclose: ::c_int) -> ::c_int; +    #[cfg_attr( +        any(target_os = "solaris", target_os = "illumos"), +        link_name = "__posix_getpwnam_r" +    )] +    pub fn getpwnam_r( +        name: *const ::c_char, +        pwd: *mut passwd, +        buf: *mut ::c_char, +        buflen: ::size_t, +        result: *mut *mut passwd, +    ) -> ::c_int; +    #[cfg_attr( +        any(target_os = "solaris", target_os = "illumos"), +        link_name = "__posix_getpwuid_r" +    )] +    pub fn getpwuid_r( +        uid: ::uid_t, +        pwd: *mut passwd, +        buf: *mut ::c_char, +        buflen: ::size_t, +        result: *mut *mut passwd, +    ) -> ::c_int; +    #[cfg_attr( +        any(target_os = "solaris", target_os = "illumos"), +        link_name = "getpwent_r" +    )] +    fn native_getpwent_r(pwd: *mut passwd, buf: *mut ::c_char, buflen: ::c_int) -> *mut passwd; +    #[cfg_attr( +        any(target_os = "solaris", target_os = "illumos"), +        link_name = "getgrent_r" +    )] +    fn native_getgrent_r(grp: *mut ::group, buf: *mut ::c_char, buflen: ::c_int) -> *mut ::group; +    #[cfg_attr( +        any(target_os = "solaris", target_os = "illumos"), +        link_name = "__posix_sigwait" +    )] +    pub fn sigwait(set: *const sigset_t, sig: *mut ::c_int) -> ::c_int; +    pub fn pthread_atfork( +        prepare: ::Option<unsafe extern "C" fn()>, +        parent: ::Option<unsafe extern "C" fn()>, +        child: ::Option<unsafe extern "C" fn()>, +    ) -> ::c_int; +    pub fn getgrgid(gid: ::gid_t) -> *mut ::group; +    pub fn setgrent(); +    pub fn endgrent(); +    pub fn getgrent() -> *mut ::group; +    pub fn popen(command: *const c_char, mode: *const c_char) -> *mut ::FILE; + +    pub fn dup3(src: ::c_int, dst: ::c_int, flags: ::c_int) -> ::c_int; +    pub fn uname(buf: *mut ::utsname) -> ::c_int; +    pub fn pipe2(fds: *mut ::c_int, flags: ::c_int) -> ::c_int; + +    pub fn makeutx(ux: *const utmpx) -> *mut utmpx; +    pub fn modutx(ux: *const utmpx) -> *mut utmpx; +    pub fn updwtmpx(file: *const ::c_char, ut: *const utmpx) -> ::c_int; +    pub fn utmpxname(file: *const ::c_char) -> ::c_int; +    pub fn getutxent() -> *mut utmpx; +    pub fn getutxid(ut: *const utmpx) -> *mut utmpx; +    pub fn getutxline(ut: *const utmpx) -> *mut utmpx; +    pub fn pututxline(ut: *const utmpx) -> *mut utmpx; +    pub fn setutxent(); +    pub fn endutxent(); + +    pub fn endutent(); +    pub fn getutent() -> *mut utmp; +    pub fn getutid(u: *const utmp) -> *mut utmp; +    pub fn getutline(u: *const utmp) -> *mut utmp; +    pub fn pututline(u: *const utmp) -> *mut utmp; +    pub fn setutent(); +    pub fn utmpname(file: *const ::c_char) -> ::c_int; + +    pub fn getutmp(ux: *const utmpx, u: *mut utmp); +    pub fn getutmpx(u: *const utmp, ux: *mut utmpx); +    pub fn updwtmp(file: *const ::c_char, u: *mut utmp); + +    pub fn ntp_adjtime(buf: *mut timex) -> ::c_int; +    pub fn ntp_gettime(buf: *mut ntptimeval) -> ::c_int; + +    pub fn timer_create(clock_id: clockid_t, evp: *mut sigevent, timerid: *mut timer_t) -> ::c_int; +    pub fn timer_delete(timerid: timer_t) -> ::c_int; +    pub fn timer_getoverrun(timerid: timer_t) -> ::c_int; +    pub fn timer_gettime(timerid: timer_t, value: *mut itimerspec) -> ::c_int; +    pub fn timer_settime( +        timerid: timer_t, +        flags: ::c_int, +        value: *const itimerspec, +        ovalue: *mut itimerspec, +    ) -> ::c_int; + +    pub fn ucred_get(pid: ::pid_t) -> *mut ucred_t; +    pub fn getpeerucred(fd: ::c_int, ucred: *mut *mut ucred_t) -> ::c_int; + +    pub fn ucred_free(ucred: *mut ucred_t); + +    pub fn ucred_geteuid(ucred: *const ucred_t) -> ::uid_t; +    pub fn ucred_getruid(ucred: *const ucred_t) -> ::uid_t; +    pub fn ucred_getsuid(ucred: *const ucred_t) -> ::uid_t; +    pub fn ucred_getegid(ucred: *const ucred_t) -> ::gid_t; +    pub fn ucred_getrgid(ucred: *const ucred_t) -> ::gid_t; +    pub fn ucred_getsgid(ucred: *const ucred_t) -> ::gid_t; +    pub fn ucred_getgroups(ucred: *const ucred_t, groups: *mut *const ::gid_t) -> ::c_int; +    pub fn ucred_getpid(ucred: *const ucred_t) -> ::pid_t; +    pub fn ucred_getprojid(ucred: *const ucred_t) -> projid_t; +    pub fn ucred_getzoneid(ucred: *const ucred_t) -> zoneid_t; +    pub fn ucred_getpflags(ucred: *const ucred_t, flags: ::c_uint) -> ::c_uint; + +    pub fn ucred_size() -> ::size_t; + +    pub fn pset_create(newpset: *mut ::psetid_t) -> ::c_int; +    pub fn pset_destroy(pset: ::psetid_t) -> ::c_int; +    pub fn pset_assign(pset: ::psetid_t, cpu: ::processorid_t, opset: *mut psetid_t) -> ::c_int; +    pub fn pset_info( +        pset: ::psetid_t, +        tpe: *mut ::c_int, +        numcpus: *mut ::c_uint, +        cpulist: *mut processorid_t, +    ) -> ::c_int; +    pub fn pset_bind( +        pset: ::psetid_t, +        idtype: ::idtype_t, +        id: ::id_t, +        opset: *mut psetid_t, +    ) -> ::c_int; +    pub fn pset_list(pset: *mut psetid_t, numpsets: *mut ::c_uint) -> ::c_int; +    pub fn pset_setattr(pset: psetid_t, attr: ::c_uint) -> ::c_int; +    pub fn pset_getattr(pset: psetid_t, attr: *mut ::c_uint) -> ::c_int; +    pub fn processor_bind( +        idtype: ::idtype_t, +        id: ::id_t, +        new_binding: ::processorid_t, +        old_binding: *mut processorid_t, +    ) -> ::c_int; +    pub fn p_online(processorid: ::processorid_t, flag: ::c_int) -> ::c_int; +    pub fn processor_info(processorid: ::processorid_t, infop: *mut processor_info_t) -> ::c_int; + +    pub fn getexecname() -> *const ::c_char; + +    pub fn gethostid() -> ::c_long; + +    pub fn getpflags(flags: ::c_uint) -> ::c_uint; +    pub fn setpflags(flags: ::c_uint, value: ::c_uint) -> ::c_int; + +    pub fn sysinfo(command: ::c_int, buf: *mut ::c_char, count: ::c_long) -> ::c_int; + +    pub fn faccessat(fd: ::c_int, path: *const ::c_char, amode: ::c_int, flag: ::c_int) -> ::c_int; + +    // #include <link.h> +    #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] +    pub fn dl_iterate_phdr( +        callback: ::Option< +            unsafe extern "C" fn( +                info: *mut dl_phdr_info, +                size: usize, +                data: *mut ::c_void, +            ) -> ::c_int, +        >, +        data: *mut ::c_void, +    ) -> ::c_int; +    pub fn getpagesize() -> ::c_int; +    pub fn getpagesizes(pagesize: *mut ::size_t, nelem: ::c_int) -> ::c_int; +    pub fn mmapobj( +        fd: ::c_int, +        flags: ::c_uint, +        storage: *mut mmapobj_result_t, +        elements: *mut ::c_uint, +        arg: *mut ::c_void, +    ) -> ::c_int; +    pub fn meminfo( +        inaddr: *const u64, +        addr_count: ::c_int, +        info_req: *const ::c_uint, +        info_count: ::c_int, +        outdata: *mut u64, +        validity: *mut ::c_uint, +    ) -> ::c_int; + +    pub fn strcasecmp_l(s1: *const ::c_char, s2: *const ::c_char, loc: ::locale_t) -> ::c_int; +    pub fn strncasecmp_l( +        s1: *const ::c_char, +        s2: *const ::c_char, +        n: ::size_t, +        loc: ::locale_t, +    ) -> ::c_int; +    pub fn strsep(string: *mut *mut ::c_char, delim: *const ::c_char) -> *mut ::c_char; + +    pub fn getisax(array: *mut u32, n: ::c_uint) -> ::c_uint; + +    pub fn backtrace(buffer: *mut *mut ::c_void, size: ::c_int) -> ::c_int; +    pub fn backtrace_symbols(buffer: *const *mut ::c_void, size: ::c_int) -> *mut *mut ::c_char; +    pub fn backtrace_symbols_fd(buffer: *const *mut ::c_void, size: ::c_int, fd: ::c_int); + +    pub fn getopt_long( +        argc: ::c_int, +        argv: *const *mut c_char, +        optstring: *const c_char, +        longopts: *const option, +        longindex: *mut ::c_int, +    ) -> ::c_int; + +    pub fn sync(); + +    pub fn __major(version: ::c_int, devnum: ::dev_t) -> ::major_t; +    pub fn __minor(version: ::c_int, devnum: ::dev_t) -> ::minor_t; +    pub fn __makedev(version: ::c_int, majdev: ::major_t, mindev: ::minor_t) -> ::dev_t; +} + +#[link(name = "sendfile")] +extern "C" { +    pub fn sendfile(out_fd: ::c_int, in_fd: ::c_int, off: *mut ::off_t, len: ::size_t) +        -> ::ssize_t; +    pub fn sendfilev( +        fildes: ::c_int, +        vec: *const sendfilevec_t, +        sfvcnt: ::c_int, +        xferred: *mut ::size_t, +    ) -> ::ssize_t; +} + +#[link(name = "lgrp")] +extern "C" { +    pub fn lgrp_init(view: lgrp_view_t) -> lgrp_cookie_t; +    pub fn lgrp_fini(cookie: lgrp_cookie_t) -> ::c_int; +    pub fn lgrp_affinity_get( +        idtype: ::idtype_t, +        id: ::id_t, +        lgrp: ::lgrp_id_t, +    ) -> ::lgrp_affinity_t; +    pub fn lgrp_affinity_set( +        idtype: ::idtype_t, +        id: ::id_t, +        lgrp: ::lgrp_id_t, +        aff: lgrp_affinity_t, +    ) -> ::lgrp_affinity_t; +    pub fn lgrp_cpus( +        cookie: ::lgrp_cookie_t, +        lgrp: ::lgrp_id_t, +        cpuids: *mut ::processorid_t, +        count: ::c_uint, +        content: ::lgrp_content_t, +    ) -> ::c_int; +    pub fn lgrp_mem_size( +        cookie: ::lgrp_cookie_t, +        lgrp: ::lgrp_id_t, +        tpe: ::lgrp_mem_size_flag_t, +        content: ::lgrp_content_t, +    ) -> ::lgrp_mem_size_t; +    pub fn lgrp_nlgrps(cookie: ::lgrp_cookie_t) -> ::c_int; +    pub fn lgrp_view(cookie: ::lgrp_cookie_t) -> ::lgrp_view_t; +    pub fn lgrp_home(idtype: ::idtype_t, id: ::id_t) -> ::lgrp_id_t; +    pub fn lgrp_version(version: ::c_int) -> ::c_int; +    pub fn lgrp_resources( +        cookie: ::lgrp_cookie_t, +        lgrp: ::lgrp_id_t, +        lgrps: *mut ::lgrp_id_t, +        count: ::c_uint, +        tpe: ::lgrp_rsrc_t, +    ) -> ::c_int; +    pub fn lgrp_root(cookie: ::lgrp_cookie_t) -> ::lgrp_id_t; +} + +pub unsafe fn major(device: ::dev_t) -> ::major_t { +    __major(NEWDEV, device) +} + +pub unsafe fn minor(device: ::dev_t) -> ::minor_t { +    __minor(NEWDEV, device) +} + +pub unsafe fn makedev(maj: ::major_t, min: ::minor_t) -> ::dev_t { +    __makedev(NEWDEV, maj, min) +} + +mod compat; +pub use self::compat::*; + +cfg_if! { +    if #[cfg(target_os = "illumos")] { +        mod illumos; +        pub use self::illumos::*; +    } else if #[cfg(target_os = "solaris")] { +        mod solaris; +        pub use self::solaris::*; +    } else { +        // Unknown target_os +    } +} + +cfg_if! { +    if #[cfg(target_arch = "x86_64")] { +        mod x86_64; +        mod x86_common; +        pub use self::x86_64::*; +        pub use self::x86_common::*; +    } else if #[cfg(target_arch = "x86")] { +        mod x86; +        mod x86_common; +        pub use self::x86::*; +        pub use self::x86_common::*; +    } +} diff --git a/vendor/libc/src/unix/solarish/solaris.rs b/vendor/libc/src/unix/solarish/solaris.rs new file mode 100644 index 0000000..80bad28 --- /dev/null +++ b/vendor/libc/src/unix/solarish/solaris.rs @@ -0,0 +1,101 @@ +pub type door_attr_t = ::c_uint; +pub type door_id_t = ::c_ulonglong; + +s! { +    pub struct shmid_ds { +        pub shm_perm: ::ipc_perm, +        pub shm_segsz: ::size_t, +        pub shm_flags: ::uintptr_t, +        pub shm_lkcnt: ::c_ushort, +        pub shm_lpid: ::pid_t, +        pub shm_cpid: ::pid_t, +        pub shm_nattch: ::shmatt_t, +        pub shm_cnattch: ::c_ulong, +        pub shm_atime: ::time_t, +        pub shm_dtime: ::time_t, +        pub shm_ctime: ::time_t, +        pub shm_amp: *mut ::c_void, +        pub shm_gransize: u64, +        pub shm_allocated: u64, +        pub shm_pad4: [i64; 1], +    } + +    pub struct door_desc_t__d_data__d_desc { +        pub d_descriptor: ::c_int, +        pub d_id: ::door_id_t +    } +} + +s_no_extra_traits! { +    #[cfg_attr(feature = "extra_traits", allow(missing_debug_implementations))] +    pub union door_desc_t__d_data { +        pub d_desc: door_desc_t__d_data__d_desc, +        d_resv: [::c_int; 5], /* Check out /usr/include/sys/door.h */ +    } + +    #[cfg_attr(feature = "extra_traits", allow(missing_debug_implementations))] +    pub struct door_desc_t { +        pub d_attributes: door_attr_t, +        pub d_data: door_desc_t__d_data, +    } + +    #[cfg_attr(feature = "extra_traits", allow(missing_debug_implementations))] +    pub struct door_arg_t { +        pub data_ptr: *const ::c_char, +        pub data_size: ::size_t, +        pub desc_ptr: *const door_desc_t, +        pub dec_num: ::c_uint, +        pub rbuf: *const ::c_char, +        pub rsize: ::size_t, +    } +} + +pub const PORT_SOURCE_POSTWAIT: ::c_int = 8; +pub const PORT_SOURCE_SIGNAL: ::c_int = 9; + +pub const AF_LOCAL: ::c_int = 0; +pub const AF_FILE: ::c_int = 0; + +pub const TCP_KEEPIDLE: ::c_int = 0x1d; +pub const TCP_KEEPINTVL: ::c_int = 0x1e; +pub const TCP_KEEPCNT: ::c_int = 0x1f; + +pub const F_DUPFD_CLOEXEC: ::c_int = 47; +pub const F_DUPFD_CLOFORK: ::c_int = 49; +pub const F_DUP2FD_CLOEXEC: ::c_int = 48; +pub const F_DUP2FD_CLOFORK: ::c_int = 50; + +extern "C" { +    pub fn fexecve( +        fd: ::c_int, +        argv: *const *const ::c_char, +        envp: *const *const ::c_char, +    ) -> ::c_int; + +    pub fn mincore(addr: *const ::c_void, len: ::size_t, vec: *mut ::c_char) -> ::c_int; + +    pub fn door_call(d: ::c_int, params: *const door_arg_t) -> ::c_int; +    pub fn door_return( +        data_ptr: *const ::c_char, +        data_size: ::size_t, +        desc_ptr: *const door_desc_t, +        num_desc: ::c_uint, +    ); +    pub fn door_create( +        server_procedure: extern "C" fn( +            cookie: *const ::c_void, +            argp: *const ::c_char, +            arg_size: ::size_t, +            dp: *const door_desc_t, +            n_desc: ::c_uint, +        ), +        cookie: *const ::c_void, +        attributes: door_attr_t, +    ) -> ::c_int; + +    pub fn fattach(fildes: ::c_int, path: *const ::c_char) -> ::c_int; + +    pub fn pthread_getattr_np(thread: ::pthread_t, attr: *mut ::pthread_attr_t) -> ::c_int; + +    pub fn euidaccess(path: *const ::c_char, amode: ::c_int) -> ::c_int; +} diff --git a/vendor/libc/src/unix/solarish/x86.rs b/vendor/libc/src/unix/solarish/x86.rs new file mode 100644 index 0000000..23f52ad --- /dev/null +++ b/vendor/libc/src/unix/solarish/x86.rs @@ -0,0 +1,29 @@ +pub type Elf32_Addr = ::c_ulong; +pub type Elf32_Half = ::c_ushort; +pub type Elf32_Off = ::c_ulong; +pub type Elf32_Sword = ::c_long; +pub type Elf32_Word = ::c_ulong; +pub type Elf32_Lword = ::c_ulonglong; +pub type Elf32_Phdr = __c_anonymous_Elf32_Phdr; + +s! { +    pub struct __c_anonymous_Elf32_Phdr { +        pub p_type: ::Elf32_Word, +        pub p_offset: ::Elf32_Off, +        pub p_vaddr: ::Elf32_Addr, +        pub p_paddr: ::Elf32_Addr, +        pub p_filesz: ::Elf32_Word, +        pub p_memsz: ::Elf32_Word, +        pub p_flags: ::Elf32_Word, +        pub p_align: ::Elf32_Word, +    } + +    pub struct dl_phdr_info { +        pub dlpi_addr: ::Elf32_Addr, +        pub dlpi_name: *const ::c_char, +        pub dlpi_phdr: *const ::Elf32_Phdr, +        pub dlpi_phnum: ::Elf32_Half, +        pub dlpi_adds: ::c_ulonglong, +        pub dlpi_subs: ::c_ulonglong, +    } +} diff --git a/vendor/libc/src/unix/solarish/x86_64.rs b/vendor/libc/src/unix/solarish/x86_64.rs new file mode 100644 index 0000000..bca552f --- /dev/null +++ b/vendor/libc/src/unix/solarish/x86_64.rs @@ -0,0 +1,190 @@ +pub type greg_t = ::c_long; + +pub type Elf64_Addr = ::c_ulong; +pub type Elf64_Half = ::c_ushort; +pub type Elf64_Off = ::c_ulong; +pub type Elf64_Sword = ::c_int; +pub type Elf64_Sxword = ::c_long; +pub type Elf64_Word = ::c_uint; +pub type Elf64_Xword = ::c_ulong; +pub type Elf64_Lword = ::c_ulong; +pub type Elf64_Phdr = __c_anonymous_Elf64_Phdr; + +s! { +    pub struct __c_anonymous_fpchip_state { +        pub cw: u16, +        pub sw: u16, +        pub fctw: u8, +        pub __fx_rsvd: u8, +        pub fop: u16, +        pub rip: u64, +        pub rdp: u64, +        pub mxcsr: u32, +        pub mxcsr_mask: u32, +        pub st: [::upad128_t; 8], +        pub xmm: [::upad128_t; 16], +        pub __fx_ign: [::upad128_t; 6], +        pub status: u32, +        pub xstatus: u32, +    } + +    pub struct __c_anonymous_Elf64_Phdr { +        pub p_type: ::Elf64_Word, +        pub p_flags: ::Elf64_Word, +        pub p_offset: ::Elf64_Off, +        pub p_vaddr: ::Elf64_Addr, +        pub p_paddr: ::Elf64_Addr, +        pub p_filesz: ::Elf64_Xword, +        pub p_memsz: ::Elf64_Xword, +        pub p_align: ::Elf64_Xword, +    } + +    pub struct dl_phdr_info { +        pub dlpi_addr: ::Elf64_Addr, +        pub dlpi_name: *const ::c_char, +        pub dlpi_phdr: *const ::Elf64_Phdr, +        pub dlpi_phnum: ::Elf64_Half, +        pub dlpi_adds: ::c_ulonglong, +        pub dlpi_subs: ::c_ulonglong, +    } +} + +s_no_extra_traits! { +    #[cfg(libc_union)] +    pub union __c_anonymous_fp_reg_set { +        pub fpchip_state: __c_anonymous_fpchip_state, +        pub f_fpregs: [[u32; 13]; 10], +    } + +    pub struct fpregset_t { +        pub fp_reg_set: __c_anonymous_fp_reg_set, +    } + +    pub struct mcontext_t { +        pub gregs: [::greg_t; 28], +        pub fpregs: fpregset_t, +    } + +    pub struct ucontext_t { +        pub uc_flags: ::c_ulong, +        pub uc_link: *mut ucontext_t, +        pub uc_sigmask: ::sigset_t, +        pub uc_stack: ::stack_t, +        pub uc_mcontext: mcontext_t, +        pub uc_filler: [::c_long; 5], +    } +} + +cfg_if! { +    if #[cfg(feature = "extra_traits")] { +        #[cfg(libc_union)] +        impl PartialEq for __c_anonymous_fp_reg_set { +            fn eq(&self, other: &__c_anonymous_fp_reg_set) -> bool { +                unsafe { +                self.fpchip_state == other.fpchip_state || +                    self. +                    f_fpregs. +                    iter(). +                    zip(other.f_fpregs.iter()). +                    all(|(a, b)| a == b) +                } +            } +        } +        #[cfg(libc_union)] +        impl Eq for __c_anonymous_fp_reg_set {} +        #[cfg(libc_union)] +        impl ::fmt::Debug for __c_anonymous_fp_reg_set { +            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { +                unsafe { +                f.debug_struct("__c_anonymous_fp_reg_set") +                    .field("fpchip_state", &{self.fpchip_state}) +                    .field("f_fpregs", &{self.f_fpregs}) +                    .finish() +                } +            } +        } +        impl PartialEq for fpregset_t { +            fn eq(&self, other: &fpregset_t) -> bool { +                self.fp_reg_set == other.fp_reg_set +            } +        } +        impl Eq for fpregset_t {} +        impl ::fmt::Debug for fpregset_t { +            fn fmt(&self, f:&mut ::fmt::Formatter) -> ::fmt::Result { +                f.debug_struct("fpregset_t") +                    .field("fp_reg_set", &self.fp_reg_set) +                    .finish() +            } +        } +        impl PartialEq for mcontext_t { +            fn eq(&self, other: &mcontext_t) -> bool { +                self.gregs == other.gregs && +                    self.fpregs == other.fpregs +            } +        } +        impl Eq for mcontext_t {} +        impl ::fmt::Debug for mcontext_t { +            fn fmt(&self, f:&mut ::fmt::Formatter) -> ::fmt::Result { +                f.debug_struct("mcontext_t") +                    .field("gregs", &self.gregs) +                    .field("fpregs", &self.fpregs) +                    .finish() +            } +        } +        impl PartialEq for ucontext_t { +            fn eq(&self, other: &ucontext_t) -> bool { +                self.uc_flags == other.uc_flags +                    && self.uc_link == other.uc_link +                    && self.uc_sigmask == other.uc_sigmask +                    && self.uc_stack == other.uc_stack +                    && self.uc_mcontext == other.uc_mcontext +                    && self.uc_filler == other.uc_filler +            } +        } +        impl Eq for ucontext_t {} +        impl ::fmt::Debug for ucontext_t { +            fn fmt(&self, f:&mut ::fmt::Formatter) -> ::fmt::Result { +                f.debug_struct("ucontext_t") +                    .field("uc_flags", &self.uc_flags) +                    .field("uc_link", &self.uc_link) +                    .field("uc_sigmask", &self.uc_sigmask) +                    .field("uc_stack", &self.uc_stack) +                    .field("uc_mcontext", &self.uc_mcontext) +                    .field("uc_filler", &self.uc_filler) +                    .finish() +            } +        } + +    } +} + +// sys/regset.h + +pub const REG_GSBASE: ::c_int = 27; +pub const REG_FSBASE: ::c_int = 26; +pub const REG_DS: ::c_int = 25; +pub const REG_ES: ::c_int = 24; +pub const REG_GS: ::c_int = 23; +pub const REG_FS: ::c_int = 22; +pub const REG_SS: ::c_int = 21; +pub const REG_RSP: ::c_int = 20; +pub const REG_RFL: ::c_int = 19; +pub const REG_CS: ::c_int = 18; +pub const REG_RIP: ::c_int = 17; +pub const REG_ERR: ::c_int = 16; +pub const REG_TRAPNO: ::c_int = 15; +pub const REG_RAX: ::c_int = 14; +pub const REG_RCX: ::c_int = 13; +pub const REG_RDX: ::c_int = 12; +pub const REG_RBX: ::c_int = 11; +pub const REG_RBP: ::c_int = 10; +pub const REG_RSI: ::c_int = 9; +pub const REG_RDI: ::c_int = 8; +pub const REG_R8: ::c_int = 7; +pub const REG_R9: ::c_int = 6; +pub const REG_R10: ::c_int = 5; +pub const REG_R11: ::c_int = 4; +pub const REG_R12: ::c_int = 3; +pub const REG_R13: ::c_int = 2; +pub const REG_R14: ::c_int = 1; +pub const REG_R15: ::c_int = 0; diff --git a/vendor/libc/src/unix/solarish/x86_common.rs b/vendor/libc/src/unix/solarish/x86_common.rs new file mode 100644 index 0000000..515f234 --- /dev/null +++ b/vendor/libc/src/unix/solarish/x86_common.rs @@ -0,0 +1,65 @@ +// AT_SUN_HWCAP +pub const AV_386_FPU: u32 = 0x00001; +pub const AV_386_TSC: u32 = 0x00002; +pub const AV_386_CX8: u32 = 0x00004; +pub const AV_386_SEP: u32 = 0x00008; +pub const AV_386_AMD_SYSC: u32 = 0x00010; +pub const AV_386_CMOV: u32 = 0x00020; +pub const AV_386_MMX: u32 = 0x00040; +pub const AV_386_AMD_MMX: u32 = 0x00080; +pub const AV_386_AMD_3DNow: u32 = 0x00100; +pub const AV_386_AMD_3DNowx: u32 = 0x00200; +pub const AV_386_FXSR: u32 = 0x00400; +pub const AV_386_SSE: u32 = 0x00800; +pub const AV_386_SSE2: u32 = 0x01000; +pub const AV_386_CX16: u32 = 0x10000; +pub const AV_386_AHF: u32 = 0x20000; +pub const AV_386_TSCP: u32 = 0x40000; +pub const AV_386_AMD_SSE4A: u32 = 0x80000; +pub const AV_386_POPCNT: u32 = 0x100000; +pub const AV_386_AMD_LZCNT: u32 = 0x200000; +pub const AV_386_SSSE3: u32 = 0x400000; +pub const AV_386_SSE4_1: u32 = 0x800000; +pub const AV_386_SSE4_2: u32 = 0x1000000; +pub const AV_386_MOVBE: u32 = 0x2000000; +pub const AV_386_AES: u32 = 0x4000000; +pub const AV_386_PCLMULQDQ: u32 = 0x8000000; +pub const AV_386_XSAVE: u32 = 0x10000000; +pub const AV_386_AVX: u32 = 0x20000000; +pub const AV_386_VMX: u32 = 0x40000000; +pub const AV_386_AMD_SVM: u32 = 0x80000000; +// AT_SUN_HWCAP2 +pub const AV_386_2_F16C: u32 = 0x00000001; +pub const AV_386_2_RDRAND: u32 = 0x00000002; +pub const AV_386_2_BMI1: u32 = 0x00000004; +pub const AV_386_2_BMI2: u32 = 0x00000008; +pub const AV_386_2_FMA: u32 = 0x00000010; +pub const AV_386_2_AVX2: u32 = 0x00000020; +pub const AV_386_2_ADX: u32 = 0x00000040; +pub const AV_386_2_RDSEED: u32 = 0x00000080; +pub const AV_386_2_AVX512F: u32 = 0x00000100; +pub const AV_386_2_AVX512DQ: u32 = 0x00000200; +pub const AV_386_2_AVX512IFMA: u32 = 0x00000400; +pub const AV_386_2_AVX512PF: u32 = 0x00000800; +pub const AV_386_2_AVX512ER: u32 = 0x00001000; +pub const AV_386_2_AVX512CD: u32 = 0x00002000; +pub const AV_386_2_AVX512BW: u32 = 0x00004000; +pub const AV_386_2_AVX512VL: u32 = 0x00008000; +pub const AV_386_2_AVX512VBMI: u32 = 0x00010000; +pub const AV_386_2_AVX512VPOPCDQ: u32 = 0x00020000; +pub const AV_386_2_AVX512_4NNIW: u32 = 0x00040000; +pub const AV_386_2_AVX512_4FMAPS: u32 = 0x00080000; +pub const AV_386_2_SHA: u32 = 0x00100000; +pub const AV_386_2_FSGSBASE: u32 = 0x00200000; +pub const AV_386_2_CLFLUSHOPT: u32 = 0x00400000; +pub const AV_386_2_CLWB: u32 = 0x00800000; +pub const AV_386_2_MONITORX: u32 = 0x01000000; +pub const AV_386_2_CLZERO: u32 = 0x02000000; +pub const AV_386_2_AVX512_VNNI: u32 = 0x04000000; +pub const AV_386_2_VPCLMULQDQ: u32 = 0x08000000; +pub const AV_386_2_VAES: u32 = 0x10000000; +// AT_SUN_FPTYPE +pub const AT_386_FPINFO_NONE: u32 = 0; +pub const AT_386_FPINFO_FXSAVE: u32 = 1; +pub const AT_386_FPINFO_XSAVE: u32 = 2; +pub const AT_386_FPINFO_XSAVE_AMD: u32 = 3;  | 
