123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- use core::mem;
- #[cfg(target_os = "redox")]
- use syscall::data::TimeSpec as redox_timespec;
- // Use repr(u8) as LLVM expects `void*` to be the same as `i8*` to help enable
- // more optimization opportunities around it recognizing things like
- // malloc/free.
- #[repr(u8)]
- pub enum c_void {
- // Two dummy variants so the #[repr] attribute can be used.
- #[doc(hidden)]
- __variant1,
- #[doc(hidden)]
- __variant2,
- }
- pub type int8_t = i8;
- pub type int16_t = i16;
- pub type int32_t = i32;
- pub type int64_t = i64;
- pub type uint8_t = u8;
- pub type uint16_t = u16;
- pub type uint32_t = u32;
- pub type uint64_t = u64;
- pub type c_schar = i8;
- pub type c_uchar = u8;
- pub type c_short = i16;
- pub type c_ushort = u16;
- pub type c_int = i32;
- pub type c_uint = u32;
- pub type c_float = f32;
- pub type c_double = f64;
- pub type c_longlong = i64;
- pub type c_ulonglong = u64;
- pub type intmax_t = i64;
- pub type uintmax_t = u64;
- pub type size_t = usize;
- pub type ptrdiff_t = isize;
- pub type intptr_t = isize;
- pub type uintptr_t = usize;
- pub type ssize_t = isize;
- pub type c_char = i8;
- pub type c_long = i64;
- pub type c_ulong = u64;
- pub type wchar_t = i32;
- pub type wint_t = u32;
- pub type wctype_t = i64;
- pub type off_t = c_long;
- pub type mode_t = c_int;
- pub type time_t = c_long;
- pub type pid_t = c_int;
- pub type id_t = c_uint;
- pub type gid_t = c_int;
- pub type uid_t = c_int;
- pub type dev_t = c_long;
- pub type ino_t = c_ulong;
- pub type nlink_t = c_ulong;
- pub type blksize_t = c_long;
- pub type blkcnt_t = c_ulong;
- pub type useconds_t = c_uint;
- pub type suseconds_t = c_int;
- pub type clock_t = c_long;
- pub type clockid_t = c_int;
- pub type timer_t = *mut c_void;
- #[repr(C)]
- #[derive(Default)]
- pub struct timespec {
- pub tv_sec: time_t,
- pub tv_nsec: c_long,
- }
- #[repr(C)]
- #[derive(Default)]
- pub struct timeval {
- pub tv_sec: time_t,
- pub tv_usec: suseconds_t,
- }
- #[repr(C)]
- #[derive(Default)]
- pub struct timezone {
- pub tz_minuteswest: c_int,
- pub tz_dsttime: c_int,
- }
- #[repr(C)]
- #[derive(Default)]
- pub struct itimerval {
- pub it_interval: timeval,
- pub it_value: timeval,
- }
- #[cfg(target_os = "redox")]
- impl<'a> From<&'a timespec> for redox_timespec {
- fn from(tp: ×pec) -> redox_timespec {
- redox_timespec {
- tv_sec: tp.tv_sec,
- tv_nsec: tp.tv_nsec as i32,
- }
- }
- }
- #[repr(C)]
- pub struct stat {
- pub st_dev: dev_t,
- pub st_ino: ino_t,
- pub st_nlink: nlink_t,
- pub st_mode: mode_t,
- pub st_uid: uid_t,
- pub st_gid: gid_t,
- pub st_rdev: dev_t,
- pub st_size: off_t,
- pub st_blksize: blksize_t,
- pub st_blocks: blkcnt_t,
- pub st_atim: timespec,
- pub st_mtim: timespec,
- pub st_ctim: timespec,
- // Compared to glibc, our struct is for some reason 24 bytes too small.
- // Accessing atime works, so clearly the struct isn't incorrect...
- // This works.
- pub _pad: [c_char; 24],
- }
- pub const AF_INET: c_int = 2;
- pub const SOCK_STREAM: c_int = 1;
- pub const SOCK_DGRAM: c_int = 2;
- pub const SOCK_NONBLOCK: c_int = 0o4000;
- pub const SOCK_CLOEXEC: c_int = 0o2000000;
- pub const SIG_BLOCK: c_int = 0;
- pub const SIG_UNBLOCK: c_int = 1;
- pub const SIG_SETMASK: c_int = 2;
- pub type in_addr_t = [u8; 4];
- pub type in_port_t = u16;
- pub type sa_family_t = u16;
- pub type socklen_t = u32;
- #[repr(C)]
- pub struct sockaddr {
- pub sa_family: sa_family_t,
- pub data: [c_char; 14],
- }
- #[repr(C)]
- #[derive(Debug, Clone, Copy)]
- pub struct in_addr {
- pub s_addr: in_addr_t,
- }
- #[repr(C)]
- pub struct sockaddr_in {
- pub sin_family: sa_family_t,
- pub sin_port: in_port_t,
- pub sin_addr: in_addr,
- }
- #[repr(C)]
- pub struct sigaction {
- pub sa_handler: Option<extern "C" fn(c_int)>,
- pub sa_flags: c_ulong,
- pub sa_restorer: Option<unsafe extern "C" fn()>,
- pub sa_mask: sigset_t,
- }
- pub type sigset_t = c_ulong;
- const UTSLENGTH: usize = 65;
- #[repr(C)]
- pub struct utsname {
- pub sysname: [c_char; UTSLENGTH],
- pub nodename: [c_char; UTSLENGTH],
- pub release: [c_char; UTSLENGTH],
- pub version: [c_char; UTSLENGTH],
- pub machine: [c_char; UTSLENGTH],
- pub domainname: [c_char; UTSLENGTH],
- }
- #[repr(C)]
- pub struct dirent {
- pub d_ino: ino_t,
- pub d_off: off_t,
- pub d_reclen: c_ushort,
- pub d_type: c_uchar,
- pub d_name: [c_char; 256],
- }
- #[repr(C)]
- #[derive(Default)]
- pub struct winsize {
- ws_row: c_ushort,
- ws_col: c_ushort,
- ws_xpixel: c_ushort,
- ws_ypixel: c_ushort,
- }
- #[repr(C)]
- pub struct rusage {
- pub ru_utime: timeval,
- pub ru_stime: timeval,
- pub ru_maxrss: c_long,
- pub ru_ixrss: c_long,
- pub ru_idrss: c_long,
- pub ru_isrss: c_long,
- pub ru_minflt: c_long,
- pub ru_majflt: c_long,
- pub ru_nswap: c_long,
- pub ru_inblock: c_long,
- pub ru_oublock: c_long,
- pub ru_msgsnd: c_long,
- pub ru_msgrcv: c_long,
- pub ru_nsignals: c_long,
- pub ru_nvcsw: c_long,
- pub ru_nivcsw: c_long,
- }
- #[repr(C)]
- pub struct tms {
- tms_utime: clock_t,
- tms_stime: clock_t,
- tms_cutime: clock_t,
- tms_cstime: clock_t,
- }
- pub const FD_SETSIZE: usize = 1024;
- #[repr(C)]
- pub struct fd_set {
- pub fds_bits: [c_ulong; FD_SETSIZE / (8 * mem::size_of::<c_ulong>())],
- }
- 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 type cc_t = u8;
- pub type speed_t = u32;
- pub type tcflag_t = u32;
- pub const NCCS: usize = 32;
- #[repr(C)]
- pub struct termios {
- c_iflag: tcflag_t,
- c_oflag: tcflag_t,
- c_cflag: tcflag_t,
- c_lflag: tcflag_t,
- c_line: cc_t,
- c_cc: [cc_t; NCCS],
- __c_ispeed: speed_t,
- __c_ospeed: speed_t,
- }
|