libc/new/apple/libpthread/sys/_pthread/
_pthread_types.rs

1//! Header: `sys/_pthread/_pthread_types.h`
2//!
3//! <https://github.com/apple-oss-distributions/libpthread/blob/main/include/sys/_pthread/_pthread_types.h>
4//!
5//! Note that the actual header defines `_opaque_pthread_*` structs which are typedefed to
6//! `__darwin_pthread*` structs, and typedefed again in separate `_pthread_*.h` files to their final
7//! `pthread_` name. This isn't useful for us so we simplify a bit and just define everything here.
8
9use crate::prelude::*;
10
11cfg_if! {
12    if #[cfg(target_pointer_width = "64")] {
13        pub const __PTHREAD_SIZE__: usize = 8176;
14        pub const __PTHREAD_ATTR_SIZE__: usize = 56;
15        pub const __PTHREAD_MUTEXATTR_SIZE__: usize = 8;
16        pub const __PTHREAD_MUTEX_SIZE__: usize = 56;
17        pub const __PTHREAD_CONDATTR_SIZE__: usize = 8;
18        pub const __PTHREAD_COND_SIZE__: usize = 40;
19        pub const __PTHREAD_ONCE_SIZE__: usize = 8;
20        pub const __PTHREAD_RWLOCK_SIZE__: usize = 192;
21        pub const __PTHREAD_RWLOCKATTR_SIZE__: usize = 16;
22    } else {
23        pub const __PTHREAD_SIZE__: usize = 4088;
24        pub const __PTHREAD_ATTR_SIZE__: usize = 36;
25        pub const __PTHREAD_MUTEXATTR_SIZE__: usize = 8;
26        pub const __PTHREAD_MUTEX_SIZE__: usize = 40;
27        pub const __PTHREAD_CONDATTR_SIZE__: usize = 4;
28        pub const __PTHREAD_COND_SIZE__: usize = 24;
29        pub const __PTHREAD_ONCE_SIZE__: usize = 4;
30        pub const __PTHREAD_RWLOCK_SIZE__: usize = 124;
31        pub const __PTHREAD_RWLOCKATTR_SIZE__: usize = 12;
32    }
33}
34
35s! {
36    pub struct pthread_attr_t {
37        pub(crate) __sig: c_long,
38        pub(crate) __opaque: [c_char; __PTHREAD_ATTR_SIZE__],
39    }
40
41    pub struct pthread_cond_t {
42        pub(crate) __sig: c_long,
43        pub(crate) __opaque: [u8; __PTHREAD_COND_SIZE__],
44    }
45
46    pub struct pthread_condattr_t {
47        pub(crate) __sig: c_long,
48        pub(crate) __opaque: [u8; __PTHREAD_CONDATTR_SIZE__],
49    }
50
51    pub struct pthread_mutex_t {
52        pub(crate) __sig: c_long,
53        pub(crate) __opaque: [u8; __PTHREAD_MUTEX_SIZE__],
54    }
55
56    pub struct pthread_mutexattr_t {
57        pub(crate) __sig: c_long,
58        pub(crate) __opaque: [u8; __PTHREAD_MUTEXATTR_SIZE__],
59    }
60
61    pub struct pthread_once_t {
62        pub(crate) __sig: c_long,
63        pub(crate) __opaque: [c_char; __PTHREAD_ONCE_SIZE__],
64    }
65
66    pub struct pthread_rwlock_t {
67        pub(crate) __sig: c_long,
68        pub(crate) __opaque: [u8; __PTHREAD_RWLOCK_SIZE__],
69    }
70
71    pub struct pthread_rwlockattr_t {
72        pub(crate) __sig: c_long,
73        pub(crate) __opaque: [u8; __PTHREAD_RWLOCKATTR_SIZE__],
74    }
75}
76
77pub type pthread_key_t = c_ulong;
78
79pub use crate::pthread_t;