1 use crate::off_t; 2 use crate::prelude::*; 3 4 pub type wchar_t = i32; 5 pub type nlink_t = u64; 6 pub type blksize_t = c_long; 7 pub type __u64 = c_ulonglong; 8 9 s! { 10 pub struct stat { 11 pub st_dev: crate::dev_t, 12 pub st_ino: crate::ino_t, 13 pub st_nlink: crate::nlink_t, 14 pub st_mode: crate::mode_t, 15 pub st_uid: crate::uid_t, 16 pub st_gid: crate::gid_t, 17 __pad0: c_int, 18 pub st_rdev: crate::dev_t, 19 pub st_size: off_t, 20 pub st_blksize: crate::blksize_t, 21 pub st_blocks: crate::blkcnt_t, 22 pub st_atime: crate::time_t, 23 pub st_atime_nsec: c_long, 24 pub st_mtime: crate::time_t, 25 pub st_mtime_nsec: c_long, 26 pub st_ctime: crate::time_t, 27 pub st_ctime_nsec: c_long, 28 __unused: [c_long; 3], 29 } 30 31 pub struct stat64 { 32 pub st_dev: crate::dev_t, 33 pub st_ino: crate::ino64_t, 34 pub st_nlink: crate::nlink_t, 35 pub st_mode: crate::mode_t, 36 pub st_uid: crate::uid_t, 37 pub st_gid: crate::gid_t, 38 __pad0: c_int, 39 pub st_rdev: crate::dev_t, 40 pub st_size: off_t, 41 pub st_blksize: crate::blksize_t, 42 pub st_blocks: crate::blkcnt64_t, 43 pub st_atime: crate::time_t, 44 pub st_atime_nsec: c_long, 45 pub st_mtime: crate::time_t, 46 pub st_mtime_nsec: c_long, 47 pub st_ctime: crate::time_t, 48 pub st_ctime_nsec: c_long, 49 __reserved: [c_long; 3], 50 } 51 52 pub struct mcontext_t { 53 __private: [u64; 32], 54 } 55 56 pub struct ipc_perm { 57 pub __ipc_perm_key: crate::key_t, 58 pub uid: crate::uid_t, 59 pub gid: crate::gid_t, 60 pub cuid: crate::uid_t, 61 pub cgid: crate::gid_t, 62 pub mode: crate::mode_t, 63 pub __seq: c_int, 64 __unused1: c_long, 65 __unused2: c_long, 66 } 67 } 68 69 s_no_extra_traits! { 70 pub struct ucontext_t { 71 pub uc_flags: c_ulong, 72 pub uc_link: *mut ucontext_t, 73 pub uc_stack: crate::stack_t, 74 pub uc_mcontext: mcontext_t, 75 pub uc_sigmask: crate::sigset_t, 76 __private: [u8; 512], 77 } 78 } 79 80 cfg_if! { 81 if #[cfg(feature = "extra_traits")] { 82 impl PartialEq for ucontext_t { 83 fn eq(&self, other: &ucontext_t) -> bool { 84 self.uc_flags == other.uc_flags 85 && self.uc_link == other.uc_link 86 && self.uc_stack == other.uc_stack 87 && self.uc_mcontext == other.uc_mcontext 88 && self.uc_sigmask == other.uc_sigmask 89 && self 90 .__private 91 .iter() 92 .zip(other.__private.iter()) 93 .all(|(a, b)| a == b) 94 } 95 } 96 impl Eq for ucontext_t {} 97 impl hash::Hash for ucontext_t { 98 fn hash<H: hash::Hasher>(&self, state: &mut H) { 99 self.uc_flags.hash(state); 100 self.uc_link.hash(state); 101 self.uc_stack.hash(state); 102 self.uc_mcontext.hash(state); 103 self.uc_sigmask.hash(state); 104 self.__private.hash(state); 105 } 106 } 107 } 108 } 109 110 // offsets in user_regs_structs, from sys/reg.h 111 pub const R15: c_int = 0; 112 pub const R14: c_int = 1; 113 pub const R13: c_int = 2; 114 pub const R12: c_int = 3; 115 pub const RBP: c_int = 4; 116 pub const RBX: c_int = 5; 117 pub const R11: c_int = 6; 118 pub const R10: c_int = 7; 119 pub const R9: c_int = 8; 120 pub const R8: c_int = 9; 121 pub const RAX: c_int = 10; 122 pub const RCX: c_int = 11; 123 pub const RDX: c_int = 12; 124 pub const RSI: c_int = 13; 125 pub const RDI: c_int = 14; 126 pub const ORIG_RAX: c_int = 15; 127 pub const RIP: c_int = 16; 128 pub const CS: c_int = 17; 129 pub const EFLAGS: c_int = 18; 130 pub const RSP: c_int = 19; 131 pub const SS: c_int = 20; 132 pub const FS_BASE: c_int = 21; 133 pub const GS_BASE: c_int = 22; 134 pub const DS: c_int = 23; 135 pub const ES: c_int = 24; 136 pub const FS: c_int = 25; 137 pub const GS: c_int = 26; 138 139 pub const MAP_32BIT: c_int = 0x0040; 140 141 pub const SIGSTKSZ: size_t = 8192; 142 pub const MINSIGSTKSZ: size_t = 2048; 143