1 macro_rules! expand_align { 2 () => { 3 s! { 4 #[allow(missing_debug_implementations)] 5 #[repr(align(4))] 6 pub struct pthread_mutex_t { 7 size: [u8; ::__SIZEOF_PTHREAD_MUTEX_T], 8 } 9 10 #[repr(align(4))] 11 pub struct pthread_rwlock_t { 12 size: [u8; ::__SIZEOF_PTHREAD_RWLOCK_T], 13 } 14 15 #[repr(align(4))] 16 pub struct pthread_mutexattr_t { 17 size: [u8; ::__SIZEOF_PTHREAD_MUTEXATTR_T], 18 } 19 20 #[repr(align(4))] 21 pub struct pthread_rwlockattr_t { 22 size: [u8; ::__SIZEOF_PTHREAD_RWLOCKATTR_T], 23 } 24 25 #[repr(align(4))] 26 pub struct pthread_condattr_t { 27 size: [u8; ::__SIZEOF_PTHREAD_CONDATTR_T], 28 } 29 } 30 31 s_no_extra_traits! { 32 #[cfg_attr(target_pointer_width = "32", 33 repr(align(4)))] 34 #[cfg_attr(target_pointer_width = "64", 35 repr(align(8)))] 36 pub struct pthread_cond_t { 37 size: [u8; ::__SIZEOF_PTHREAD_COND_T], 38 } 39 40 #[allow(missing_debug_implementations)] 41 #[repr(align(8))] 42 pub struct max_align_t { 43 priv_: [f64; 2] 44 } 45 46 } 47 48 cfg_if! { 49 if #[cfg(feature = "extra_traits")] { 50 impl PartialEq for pthread_cond_t { 51 fn eq(&self, other: &pthread_cond_t) -> bool { 52 self.size 53 .iter() 54 .zip(other.size.iter()) 55 .all(|(a,b)| a == b) 56 } 57 } 58 impl Eq for pthread_cond_t {} 59 impl ::fmt::Debug for pthread_cond_t { 60 fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { 61 f.debug_struct("pthread_cond_t") 62 // FIXME: .field("size", &self.size) 63 .finish() 64 } 65 } 66 impl ::hash::Hash for pthread_cond_t { 67 fn hash<H: ::hash::Hasher>(&self, state: &mut H) { 68 self.size.hash(state); 69 } 70 } 71 } 72 } 73 }; 74 } 75