1//! Apple (ios/darwin)-specific definitions
2//!
3//! This covers *-apple-* triples currently
4pub type c_char = i8;
5pub type wchar_t = i32;
6pub type clock_t = c_ulong;
7pub type time_t = c_long;
8pub type suseconds_t = i32;
9pub type dev_t = i32;
10pub type ino_t = u64;
11pub type mode_t = u16;
12pub type nlink_t = u16;
13pub type blksize_t = i32;
14pub type rlim_t = u64;
15pub type pthread_key_t = c_ulong;
16pub type sigset_t = u32;
17pub type clockid_t = ::c_uint;
18pub type fsblkcnt_t = ::c_uint;
19pub type fsfilcnt_t = ::c_uint;
20pub type speed_t = ::c_ulong;
21pub type tcflag_t = ::c_ulong;
22pub type nl_item = ::c_int;
23pub type id_t = ::c_uint;
24pub type sem_t = ::c_int;
25pub type idtype_t = ::c_uint;
26pub type integer_t = ::c_int;
27pub type cpu_type_t = integer_t;
28pub type cpu_subtype_t = integer_t;
29pub type natural_t = u32;
30pub type mach_msg_type_number_t = natural_t;
31pub type kern_return_t = ::c_int;
32pub type uuid_t = [u8; 16];
33pub type task_info_t = *mut integer_t;
34pub type host_info_t = *mut integer_t;
35pub type task_flavor_t = natural_t;
36pub type rusage_info_t = *mut ::c_void;
37pub type vm_offset_t = ::uintptr_t;
38pub type vm_size_t = ::uintptr_t;
39pub type vm_address_t = vm_offset_t;
40
41pub type posix_spawnattr_t = *mut ::c_void;
42pub type posix_spawn_file_actions_t = *mut ::c_void;
43pub type key_t = ::c_int;
44pub type shmatt_t = ::c_ushort;
45
46pub type sae_associd_t = u32;
47pub type sae_connid_t = u32;
48
49pub type mach_port_t = ::c_uint;
50pub type host_t = ::c_uint;
51pub type host_flavor_t = integer_t;
52pub type host_info64_t = *mut integer_t;
53pub type processor_flavor_t = ::c_int;
54pub type thread_flavor_t = natural_t;
55pub type thread_inspect_t = ::mach_port_t;
56pub type thread_act_t = ::mach_port_t;
57pub type thread_act_array_t = *mut ::thread_act_t;
58pub type policy_t = ::c_int;
59pub type mach_vm_address_t = u64;
60pub type mach_vm_offset_t = u64;
61pub type mach_vm_size_t = u64;
62pub type vm_map_t = ::mach_port_t;
63pub type mem_entry_name_port_t = ::mach_port_t;
64pub type memory_object_t = ::mach_port_t;
65pub type memory_object_offset_t = ::c_ulonglong;
66pub type vm_inherit_t = ::c_uint;
67pub type vm_prot_t = ::c_int;
68
69pub type ledger_t = ::mach_port_t;
70pub type ledger_array_t = *mut ::ledger_t;
71
72pub type iconv_t = *mut ::c_void;
73
74pub type processor_cpu_load_info_t = *mut processor_cpu_load_info;
75pub type processor_cpu_load_info_data_t = processor_cpu_load_info;
76pub type processor_basic_info_t = *mut processor_basic_info;
77pub type processor_basic_info_data_t = processor_basic_info;
78pub type processor_set_basic_info_data_t = processor_set_basic_info;
79pub type processor_set_basic_info_t = *mut processor_set_basic_info;
80pub type processor_set_load_info_data_t = processor_set_load_info;
81pub type processor_set_load_info_t = *mut processor_set_load_info;
82pub type processor_info_t = *mut integer_t;
83pub type processor_info_array_t = *mut integer_t;
84
85pub type mach_task_basic_info_data_t = mach_task_basic_info;
86pub type mach_task_basic_info_t = *mut mach_task_basic_info;
87pub type task_thread_times_info_data_t = task_thread_times_info;
88pub type task_thread_times_info_t = *mut task_thread_times_info;
89
90pub type thread_info_t = *mut integer_t;
91pub type thread_basic_info_t = *mut thread_basic_info;
92pub type thread_basic_info_data_t = thread_basic_info;
93pub type thread_identifier_info_t = *mut thread_identifier_info;
94pub type thread_identifier_info_data_t = thread_identifier_info;
95pub type thread_extended_info_t = *mut thread_extended_info;
96pub type thread_extended_info_data_t = thread_extended_info;
97
98pub type thread_t = ::mach_port_t;
99pub type thread_policy_flavor_t = natural_t;
100pub type thread_policy_t = *mut integer_t;
101pub type thread_latency_qos_t = integer_t;
102pub type thread_throughput_qos_t = integer_t;
103pub type thread_standard_policy_data_t = thread_standard_policy;
104pub type thread_standard_policy_t = *mut thread_standard_policy;
105pub type thread_extended_policy_data_t = thread_extended_policy;
106pub type thread_extended_policy_t = *mut thread_extended_policy;
107pub type thread_time_constraint_policy_data_t = thread_time_constraint_policy;
108pub type thread_time_constraint_policy_t = *mut thread_time_constraint_policy;
109pub type thread_precedence_policy_data_t = thread_precedence_policy;
110pub type thread_precedence_policy_t = *mut thread_precedence_policy;
111pub type thread_affinity_policy_data_t = thread_affinity_policy;
112pub type thread_affinity_policy_t = *mut thread_affinity_policy;
113pub type thread_background_policy_data_t = thread_background_policy;
114pub type thread_background_policy_t = *mut thread_background_policy;
115pub type thread_latency_qos_policy_data_t = thread_latency_qos_policy;
116pub type thread_latency_qos_policy_t = *mut thread_latency_qos_policy;
117pub type thread_throughput_qos_policy_data_t = thread_throughput_qos_policy;
118pub type thread_throughput_qos_policy_t = *mut thread_throughput_qos_policy;
119
120pub type pthread_introspection_hook_t =
121    extern "C" fn(event: ::c_uint, thread: ::pthread_t, addr: *mut ::c_void, size: ::size_t);
122pub type pthread_jit_write_callback_t = ::Option<extern "C" fn(ctx: *mut ::c_void) -> ::c_int>;
123
124pub type os_unfair_lock = os_unfair_lock_s;
125pub type os_unfair_lock_t = *mut os_unfair_lock;
126
127pub type os_log_t = *mut ::c_void;
128pub type os_log_type_t = u8;
129pub type os_signpost_id_t = u64;
130pub type os_signpost_type_t = u8;
131
132pub type vm_statistics_t = *mut vm_statistics;
133pub type vm_statistics_data_t = vm_statistics;
134pub type vm_statistics64_t = *mut vm_statistics64;
135pub type vm_statistics64_data_t = vm_statistics64;
136
137pub type task_t = ::mach_port_t;
138pub type task_inspect_t = ::mach_port_t;
139
140pub type sysdir_search_path_enumeration_state = ::c_uint;
141
142pub type CCStatus = i32;
143pub type CCCryptorStatus = i32;
144pub type CCRNGStatus = ::CCCryptorStatus;
145
146pub type copyfile_state_t = *mut ::c_void;
147pub type copyfile_flags_t = u32;
148
149pub type attrgroup_t = u32;
150pub type vol_capabilities_set_t = [u32; 4];
151
152deprecated_mach! {
153    pub type mach_timebase_info_data_t = mach_timebase_info;
154}
155
156#[cfg_attr(feature = "extra_traits", derive(Debug))]
157pub enum timezone {}
158impl ::Copy for timezone {}
159impl ::Clone for timezone {
160    fn clone(&self) -> timezone {
161        *self
162    }
163}
164
165#[cfg_attr(feature = "extra_traits", derive(Debug))]
166#[repr(u32)]
167pub enum qos_class_t {
168    QOS_CLASS_USER_INTERACTIVE = 0x21,
169    QOS_CLASS_USER_INITIATED = 0x19,
170    QOS_CLASS_DEFAULT = 0x15,
171    QOS_CLASS_UTILITY = 0x11,
172    QOS_CLASS_BACKGROUND = 0x09,
173    QOS_CLASS_UNSPECIFIED = 0x00,
174}
175impl ::Copy for qos_class_t {}
176impl ::Clone for qos_class_t {
177    fn clone(&self) -> qos_class_t {
178        *self
179    }
180}
181
182#[cfg_attr(feature = "extra_traits", derive(Debug))]
183#[repr(u32)]
184pub enum sysdir_search_path_directory_t {
185    SYSDIR_DIRECTORY_APPLICATION = 1,
186    SYSDIR_DIRECTORY_DEMO_APPLICATION = 2,
187    SYSDIR_DIRECTORY_DEVELOPER_APPLICATION = 3,
188    SYSDIR_DIRECTORY_ADMIN_APPLICATION = 4,
189    SYSDIR_DIRECTORY_LIBRARY = 5,
190    SYSDIR_DIRECTORY_DEVELOPER = 6,
191    SYSDIR_DIRECTORY_USER = 7,
192    SYSDIR_DIRECTORY_DOCUMENTATION = 8,
193    SYSDIR_DIRECTORY_DOCUMENT = 9,
194    SYSDIR_DIRECTORY_CORESERVICE = 10,
195    SYSDIR_DIRECTORY_AUTOSAVED_INFORMATION = 11,
196    SYSDIR_DIRECTORY_DESKTOP = 12,
197    SYSDIR_DIRECTORY_CACHES = 13,
198    SYSDIR_DIRECTORY_APPLICATION_SUPPORT = 14,
199    SYSDIR_DIRECTORY_DOWNLOADS = 15,
200    SYSDIR_DIRECTORY_INPUT_METHODS = 16,
201    SYSDIR_DIRECTORY_MOVIES = 17,
202    SYSDIR_DIRECTORY_MUSIC = 18,
203    SYSDIR_DIRECTORY_PICTURES = 19,
204    SYSDIR_DIRECTORY_PRINTER_DESCRIPTION = 20,
205    SYSDIR_DIRECTORY_SHARED_PUBLIC = 21,
206    SYSDIR_DIRECTORY_PREFERENCE_PANES = 22,
207    SYSDIR_DIRECTORY_ALL_APPLICATIONS = 100,
208    SYSDIR_DIRECTORY_ALL_LIBRARIES = 101,
209}
210impl ::Copy for sysdir_search_path_directory_t {}
211impl ::Clone for sysdir_search_path_directory_t {
212    fn clone(&self) -> sysdir_search_path_directory_t {
213        *self
214    }
215}
216
217#[cfg_attr(feature = "extra_traits", derive(Debug))]
218#[repr(u32)]
219pub enum sysdir_search_path_domain_mask_t {
220    SYSDIR_DOMAIN_MASK_USER = (1 << 0),
221    SYSDIR_DOMAIN_MASK_LOCAL = (1 << 1),
222    SYSDIR_DOMAIN_MASK_NETWORK = (1 << 2),
223    SYSDIR_DOMAIN_MASK_SYSTEM = (1 << 3),
224    SYSDIR_DOMAIN_MASK_ALL = 0x0ffff,
225}
226impl ::Copy for sysdir_search_path_domain_mask_t {}
227impl ::Clone for sysdir_search_path_domain_mask_t {
228    fn clone(&self) -> sysdir_search_path_domain_mask_t {
229        *self
230    }
231}
232
233s! {
234    pub struct ip_mreq {
235        pub imr_multiaddr: in_addr,
236        pub imr_interface: in_addr,
237    }
238
239    pub struct ip_mreqn {
240        pub imr_multiaddr: in_addr,
241        pub imr_address: in_addr,
242        pub imr_ifindex: ::c_int,
243    }
244
245    pub struct ip_mreq_source {
246        pub imr_multiaddr: in_addr,
247        pub imr_sourceaddr: in_addr,
248        pub imr_interface: in_addr,
249    }
250
251    pub struct aiocb {
252        pub aio_fildes: ::c_int,
253        pub aio_offset: ::off_t,
254        pub aio_buf: *mut ::c_void,
255        pub aio_nbytes: ::size_t,
256        pub aio_reqprio: ::c_int,
257        pub aio_sigevent: sigevent,
258        pub aio_lio_opcode: ::c_int
259    }
260
261    pub struct glob_t {
262        pub gl_pathc:  ::size_t,
263        __unused1: ::c_int,
264        pub gl_offs:   ::size_t,
265        __unused2: ::c_int,
266        pub gl_pathv:  *mut *mut ::c_char,
267
268        __unused3: *mut ::c_void,
269
270        __unused4: *mut ::c_void,
271        __unused5: *mut ::c_void,
272        __unused6: *mut ::c_void,
273        __unused7: *mut ::c_void,
274        __unused8: *mut ::c_void,
275    }
276
277    pub struct addrinfo {
278        pub ai_flags: ::c_int,
279        pub ai_family: ::c_int,
280        pub ai_socktype: ::c_int,
281        pub ai_protocol: ::c_int,
282        pub ai_addrlen: ::socklen_t,
283        pub ai_canonname: *mut ::c_char,
284        pub ai_addr: *mut ::sockaddr,
285        pub ai_next: *mut addrinfo,
286    }
287
288    #[deprecated(
289        since = "0.2.55",
290        note = "Use the `mach2` crate instead",
291    )]
292    pub struct mach_timebase_info {
293        pub numer: u32,
294        pub denom: u32,
295    }
296
297    pub struct stat {
298        pub st_dev: dev_t,
299        pub st_mode: mode_t,
300        pub st_nlink: nlink_t,
301        pub st_ino: ino_t,
302        pub st_uid: ::uid_t,
303        pub st_gid: ::gid_t,
304        pub st_rdev: dev_t,
305        pub st_atime: time_t,
306        pub st_atime_nsec: c_long,
307        pub st_mtime: time_t,
308        pub st_mtime_nsec: c_long,
309        pub st_ctime: time_t,
310        pub st_ctime_nsec: c_long,
311        pub st_birthtime: time_t,
312        pub st_birthtime_nsec: c_long,
313        pub st_size: ::off_t,
314        pub st_blocks: ::blkcnt_t,
315        pub st_blksize: blksize_t,
316        pub st_flags: u32,
317        pub st_gen: u32,
318        pub st_lspare: i32,
319        pub st_qspare: [i64; 2],
320    }
321
322    pub struct pthread_mutexattr_t {
323        __sig: ::c_long,
324        __opaque: [u8; 8],
325    }
326
327    pub struct pthread_condattr_t {
328        __sig: ::c_long,
329        __opaque: [u8; __PTHREAD_CONDATTR_SIZE__],
330    }
331
332    pub struct pthread_rwlockattr_t {
333        __sig: ::c_long,
334        __opaque: [u8; __PTHREAD_RWLOCKATTR_SIZE__],
335    }
336
337    pub struct siginfo_t {
338        pub si_signo: ::c_int,
339        pub si_errno: ::c_int,
340        pub si_code: ::c_int,
341        pub si_pid: ::pid_t,
342        pub si_uid: ::uid_t,
343        pub si_status: ::c_int,
344        pub si_addr: *mut ::c_void,
345        //Requires it to be union for tests
346        //pub si_value: ::sigval,
347        _pad: [usize; 9],
348    }
349
350    pub struct sigaction {
351        // FIXME: this field is actually a union
352        pub sa_sigaction: ::sighandler_t,
353        pub sa_mask: sigset_t,
354        pub sa_flags: ::c_int,
355    }
356
357    pub struct stack_t {
358        pub ss_sp: *mut ::c_void,
359        pub ss_size: ::size_t,
360        pub ss_flags: ::c_int,
361    }
362
363    pub struct fstore_t {
364        pub fst_flags: ::c_uint,
365        pub fst_posmode: ::c_int,
366        pub fst_offset: ::off_t,
367        pub fst_length: ::off_t,
368        pub fst_bytesalloc: ::off_t,
369    }
370
371    pub struct radvisory {
372        pub ra_offset: ::off_t,
373        pub ra_count: ::c_int,
374    }
375
376    pub struct statvfs {
377        pub f_bsize: ::c_ulong,
378        pub f_frsize: ::c_ulong,
379        pub f_blocks: ::fsblkcnt_t,
380        pub f_bfree: ::fsblkcnt_t,
381        pub f_bavail: ::fsblkcnt_t,
382        pub f_files: ::fsfilcnt_t,
383        pub f_ffree: ::fsfilcnt_t,
384        pub f_favail: ::fsfilcnt_t,
385        pub f_fsid: ::c_ulong,
386        pub f_flag: ::c_ulong,
387        pub f_namemax: ::c_ulong,
388    }
389
390    pub struct Dl_info {
391        pub dli_fname: *const ::c_char,
392        pub dli_fbase: *mut ::c_void,
393        pub dli_sname: *const ::c_char,
394        pub dli_saddr: *mut ::c_void,
395    }
396
397    pub struct sockaddr_in {
398        pub sin_len: u8,
399        pub sin_family: ::sa_family_t,
400        pub sin_port: ::in_port_t,
401        pub sin_addr: ::in_addr,
402        pub sin_zero: [::c_char; 8],
403    }
404
405    pub struct kevent64_s {
406        pub ident: u64,
407        pub filter: i16,
408        pub flags: u16,
409        pub fflags: u32,
410        pub data: i64,
411        pub udata: u64,
412        pub ext: [u64; 2],
413    }
414
415    pub struct dqblk {
416        pub dqb_bhardlimit: u64,
417        pub dqb_bsoftlimit: u64,
418        pub dqb_curbytes: u64,
419        pub dqb_ihardlimit: u32,
420        pub dqb_isoftlimit: u32,
421        pub dqb_curinodes: u32,
422        pub dqb_btime: u32,
423        pub dqb_itime: u32,
424        pub dqb_id: u32,
425        pub dqb_spare: [u32; 4],
426    }
427
428    pub struct if_msghdr {
429        pub ifm_msglen: ::c_ushort,
430        pub ifm_version: ::c_uchar,
431        pub ifm_type: ::c_uchar,
432        pub ifm_addrs: ::c_int,
433        pub ifm_flags: ::c_int,
434        pub ifm_index: ::c_ushort,
435        pub ifm_data: if_data,
436    }
437
438    pub struct termios {
439        pub c_iflag: ::tcflag_t,
440        pub c_oflag: ::tcflag_t,
441        pub c_cflag: ::tcflag_t,
442        pub c_lflag: ::tcflag_t,
443        pub c_cc: [::cc_t; ::NCCS],
444        pub c_ispeed: ::speed_t,
445        pub c_ospeed: ::speed_t,
446    }
447
448    pub struct flock {
449        pub l_start: ::off_t,
450        pub l_len: ::off_t,
451        pub l_pid: ::pid_t,
452        pub l_type: ::c_short,
453        pub l_whence: ::c_short,
454    }
455
456    pub struct sf_hdtr {
457        pub headers: *mut ::iovec,
458        pub hdr_cnt: ::c_int,
459        pub trailers: *mut ::iovec,
460        pub trl_cnt: ::c_int,
461    }
462
463    pub struct lconv {
464        pub decimal_point: *mut ::c_char,
465        pub thousands_sep: *mut ::c_char,
466        pub grouping: *mut ::c_char,
467        pub int_curr_symbol: *mut ::c_char,
468        pub currency_symbol: *mut ::c_char,
469        pub mon_decimal_point: *mut ::c_char,
470        pub mon_thousands_sep: *mut ::c_char,
471        pub mon_grouping: *mut ::c_char,
472        pub positive_sign: *mut ::c_char,
473        pub negative_sign: *mut ::c_char,
474        pub int_frac_digits: ::c_char,
475        pub frac_digits: ::c_char,
476        pub p_cs_precedes: ::c_char,
477        pub p_sep_by_space: ::c_char,
478        pub n_cs_precedes: ::c_char,
479        pub n_sep_by_space: ::c_char,
480        pub p_sign_posn: ::c_char,
481        pub n_sign_posn: ::c_char,
482        pub int_p_cs_precedes: ::c_char,
483        pub int_n_cs_precedes: ::c_char,
484        pub int_p_sep_by_space: ::c_char,
485        pub int_n_sep_by_space: ::c_char,
486        pub int_p_sign_posn: ::c_char,
487        pub int_n_sign_posn: ::c_char,
488    }
489
490    pub struct proc_taskinfo {
491        pub pti_virtual_size: u64,
492        pub pti_resident_size: u64,
493        pub pti_total_user: u64,
494        pub pti_total_system: u64,
495        pub pti_threads_user: u64,
496        pub pti_threads_system: u64,
497        pub pti_policy: i32,
498        pub pti_faults: i32,
499        pub pti_pageins: i32,
500        pub pti_cow_faults: i32,
501        pub pti_messages_sent: i32,
502        pub pti_messages_received: i32,
503        pub pti_syscalls_mach: i32,
504        pub pti_syscalls_unix: i32,
505        pub pti_csw: i32,
506        pub pti_threadnum: i32,
507        pub pti_numrunning: i32,
508        pub pti_priority: i32,
509    }
510
511    pub struct proc_bsdinfo {
512        pub pbi_flags: u32,
513        pub pbi_status: u32,
514        pub pbi_xstatus: u32,
515        pub pbi_pid: u32,
516        pub pbi_ppid: u32,
517        pub pbi_uid: ::uid_t,
518        pub pbi_gid: ::gid_t,
519        pub pbi_ruid: ::uid_t,
520        pub pbi_rgid: ::gid_t,
521        pub pbi_svuid: ::uid_t,
522        pub pbi_svgid: ::gid_t,
523        pub rfu_1: u32,
524        pub pbi_comm: [::c_char; MAXCOMLEN],
525        pub pbi_name: [::c_char; 32], // MAXCOMLEN * 2, but macro isn't happy...
526        pub pbi_nfiles: u32,
527        pub pbi_pgid: u32,
528        pub pbi_pjobc: u32,
529        pub e_tdev: u32,
530        pub e_tpgid: u32,
531        pub pbi_nice: i32,
532        pub pbi_start_tvsec: u64,
533        pub pbi_start_tvusec: u64,
534    }
535
536    pub struct proc_taskallinfo {
537        pub pbsd: proc_bsdinfo,
538        pub ptinfo: proc_taskinfo,
539    }
540
541    pub struct xsw_usage {
542        pub xsu_total: u64,
543        pub xsu_avail: u64,
544        pub xsu_used: u64,
545        pub xsu_pagesize: u32,
546        pub xsu_encrypted: ::boolean_t,
547    }
548
549    pub struct xucred {
550        pub cr_version: ::c_uint,
551        pub cr_uid: ::uid_t,
552        pub cr_ngroups: ::c_short,
553        pub cr_groups: [::gid_t;16]
554    }
555
556    #[deprecated(
557        since = "0.2.55",
558        note = "Use the `mach2` crate instead",
559    )]
560    pub struct mach_header {
561        pub magic: u32,
562        pub cputype: cpu_type_t,
563        pub cpusubtype: cpu_subtype_t,
564        pub filetype: u32,
565        pub ncmds: u32,
566        pub sizeofcmds: u32,
567        pub flags: u32,
568    }
569
570    #[deprecated(
571        since = "0.2.55",
572        note = "Use the `mach2` crate instead",
573    )]
574    pub struct mach_header_64 {
575        pub magic: u32,
576        pub cputype: cpu_type_t,
577        pub cpusubtype: cpu_subtype_t,
578        pub filetype: u32,
579        pub ncmds: u32,
580        pub sizeofcmds: u32,
581        pub flags: u32,
582        pub reserved: u32,
583    }
584
585    pub struct segment_command {
586        pub cmd: u32,
587        pub cmdsize: u32,
588        pub segname: [::c_char; 16],
589        pub vmaddr: u32,
590        pub vmsize: u32,
591        pub fileoff: u32,
592        pub filesize: u32,
593        pub maxprot: vm_prot_t,
594        pub initprot: vm_prot_t,
595        pub nsects: u32,
596        pub flags: u32,
597    }
598
599    pub struct segment_command_64 {
600        pub cmd: u32,
601        pub cmdsize: u32,
602        pub segname: [::c_char; 16],
603        pub vmaddr: u64,
604        pub vmsize: u64,
605        pub fileoff: u64,
606        pub filesize: u64,
607        pub maxprot: vm_prot_t,
608        pub initprot: vm_prot_t,
609        pub nsects: u32,
610        pub flags: u32,
611    }
612
613    pub struct load_command {
614        pub cmd: u32,
615        pub cmdsize: u32,
616    }
617
618    pub struct sockaddr_dl {
619        pub sdl_len: ::c_uchar,
620        pub sdl_family: ::c_uchar,
621        pub sdl_index: ::c_ushort,
622        pub sdl_type: ::c_uchar,
623        pub sdl_nlen: ::c_uchar,
624        pub sdl_alen: ::c_uchar,
625        pub sdl_slen: ::c_uchar,
626        pub sdl_data: [::c_char; 12],
627    }
628
629    pub struct sockaddr_inarp {
630        pub sin_len: ::c_uchar,
631        pub sin_family: ::c_uchar,
632        pub sin_port: ::c_ushort,
633        pub sin_addr: ::in_addr,
634        pub sin_srcaddr: ::in_addr,
635        pub sin_tos: ::c_ushort,
636        pub sin_other: ::c_ushort,
637    }
638
639    pub struct sockaddr_ctl {
640        pub sc_len: ::c_uchar,
641        pub sc_family: ::c_uchar,
642        pub ss_sysaddr: u16,
643        pub sc_id: u32,
644        pub sc_unit: u32,
645        pub sc_reserved: [u32; 5],
646    }
647
648    pub struct in_pktinfo {
649        pub ipi_ifindex: ::c_uint,
650        pub ipi_spec_dst: ::in_addr,
651        pub ipi_addr: ::in_addr,
652    }
653
654    pub struct in6_pktinfo {
655        pub ipi6_addr: ::in6_addr,
656        pub ipi6_ifindex: ::c_uint,
657    }
658
659    // sys/ipc.h:
660
661    pub struct ipc_perm {
662        pub uid: ::uid_t,
663        pub gid: ::gid_t,
664        pub cuid: ::uid_t,
665        pub cgid: ::gid_t,
666        pub mode: ::mode_t,
667        pub _seq: ::c_ushort,
668        pub _key: ::key_t,
669    }
670
671    // sys/sem.h
672
673    pub struct sembuf {
674        pub sem_num: ::c_ushort,
675        pub sem_op: ::c_short,
676        pub sem_flg: ::c_short,
677    }
678
679    // sys/shm.h
680
681    pub struct arphdr {
682        pub ar_hrd: u16,
683        pub ar_pro: u16,
684        pub ar_hln: u8,
685        pub ar_pln: u8,
686        pub ar_op: u16,
687    }
688
689    pub struct in_addr {
690        pub s_addr: ::in_addr_t,
691    }
692
693    // net/ndrv.h
694    pub struct sockaddr_ndrv {
695        pub snd_len: ::c_uchar,
696        pub snd_family: ::c_uchar,
697        pub snd_name: [::c_uchar; 16]      // IFNAMSIZ from if.h
698    }
699
700    // sys/socket.h
701
702    pub struct sa_endpoints_t {
703        pub sae_srcif: ::c_uint, // optional source interface
704        pub sae_srcaddr: *const ::sockaddr, // optional source address
705        pub sae_srcaddrlen: ::socklen_t, // size of source address
706        pub sae_dstaddr: *const ::sockaddr, // destination address
707        pub sae_dstaddrlen: ::socklen_t, // size of destination address
708    }
709
710    pub struct timex {
711        pub modes: ::c_uint,
712        pub offset: ::c_long,
713        pub freq: ::c_long,
714        pub maxerror: ::c_long,
715        pub esterror: ::c_long,
716        pub status: ::c_int,
717        pub constant: ::c_long,
718        pub precision: ::c_long,
719        pub tolerance: ::c_long,
720        pub ppsfreq: ::c_long,
721        pub jitter: ::c_long,
722        pub shift: ::c_int,
723        pub stabil: ::c_long,
724        pub jitcnt: ::c_long,
725        pub calcnt: ::c_long,
726        pub errcnt: ::c_long,
727        pub stbcnt: ::c_long,
728    }
729
730    pub struct ntptimeval {
731        pub time: ::timespec,
732        pub maxerror: ::c_long,
733        pub esterror: ::c_long,
734        pub tai: ::c_long,
735        pub time_state: ::c_int,
736    }
737
738    pub struct thread_standard_policy {
739        pub no_data: natural_t,
740    }
741
742    pub struct thread_extended_policy {
743        pub timeshare: boolean_t,
744    }
745
746    pub struct thread_time_constraint_policy {
747        pub period: u32,
748        pub computation: u32,
749        pub constraint: u32,
750        pub preemptible: boolean_t,
751    }
752
753    pub struct thread_precedence_policy {
754        pub importance: integer_t,
755    }
756
757    pub struct thread_affinity_policy {
758        pub affinity_tag: integer_t,
759    }
760
761    pub struct thread_background_policy {
762        pub priority: integer_t,
763    }
764
765    pub struct thread_latency_qos_policy {
766        pub thread_latency_qos_tier: thread_latency_qos_t,
767    }
768
769    pub struct thread_throughput_qos_policy {
770        pub thread_throughput_qos_tier: thread_throughput_qos_t,
771    }
772
773    // malloc/malloc.h
774    pub struct malloc_statistics_t {
775        pub blocks_in_use: ::c_uint,
776        pub size_in_use: ::size_t,
777        pub max_size_in_use: ::size_t,
778        pub size_allocated: ::size_t,
779    }
780
781    pub struct mstats {
782        pub bytes_total: ::size_t,
783        pub chunks_used: ::size_t,
784        pub bytes_used: ::size_t,
785        pub chunks_free: ::size_t,
786        pub bytes_free: ::size_t,
787    }
788
789    pub struct vm_range_t {
790        pub address: ::vm_address_t,
791        pub size: ::vm_size_t,
792    }
793
794    // sched.h
795    pub struct sched_param {
796        pub sched_priority: ::c_int,
797        __opaque: [::c_char; 4],
798    }
799
800    pub struct vinfo_stat {
801        pub vst_dev: u32,
802        pub vst_mode: u16,
803        pub vst_nlink: u16,
804        pub vst_ino: u64,
805        pub vst_uid: ::uid_t,
806        pub vst_gid: ::gid_t,
807        pub vst_atime: i64,
808        pub vst_atimensec: i64,
809        pub vst_mtime: i64,
810        pub vst_mtimensec: i64,
811        pub vst_ctime: i64,
812        pub vst_ctimensec: i64,
813        pub vst_birthtime: i64,
814        pub vst_birthtimensec: i64,
815        pub vst_size: ::off_t,
816        pub vst_blocks: i64,
817        pub vst_blksize: i32,
818        pub vst_flags: u32,
819        pub vst_gen: u32,
820        pub vst_rdev: u32,
821        pub vst_qspare: [i64; 2],
822    }
823
824    pub struct vnode_info {
825        pub vi_stat: vinfo_stat,
826        pub vi_type: ::c_int,
827        pub vi_pad: ::c_int,
828        pub vi_fsid: ::fsid_t,
829    }
830
831    pub struct vnode_info_path {
832        pub vip_vi: vnode_info,
833        // Normally it's `vip_path: [::c_char; MAXPATHLEN]` but because libc supports an old rustc
834        // version, we go around this limitation like this.
835        pub vip_path: [[::c_char; 32]; 32],
836    }
837
838    pub struct proc_vnodepathinfo {
839        pub pvi_cdir: vnode_info_path,
840        pub pvi_rdir: vnode_info_path,
841    }
842
843    pub struct vm_statistics {
844        pub free_count: natural_t,
845        pub active_count: natural_t,
846        pub inactive_count: natural_t,
847        pub wire_count: natural_t,
848        pub zero_fill_count: natural_t,
849        pub reactivations: natural_t,
850        pub pageins: natural_t,
851        pub pageouts: natural_t,
852        pub faults: natural_t,
853        pub cow_faults: natural_t,
854        pub lookups: natural_t,
855        pub hits: natural_t,
856        pub purgeable_count: natural_t,
857        pub purges: natural_t,
858        pub speculative_count: natural_t,
859    }
860
861    pub struct task_thread_times_info {
862        pub user_time: time_value_t,
863        pub system_time: time_value_t,
864    }
865
866    pub struct rusage_info_v0 {
867        pub ri_uuid: [u8; 16],
868        pub ri_user_time: u64,
869        pub ri_system_time: u64,
870        pub ri_pkg_idle_wkups: u64,
871        pub ri_interrupt_wkups: u64,
872        pub ri_pageins: u64,
873        pub ri_wired_size: u64,
874        pub ri_resident_size: u64,
875        pub ri_phys_footprint: u64,
876        pub ri_proc_start_abstime: u64,
877        pub ri_proc_exit_abstime: u64,
878    }
879
880    pub struct rusage_info_v1 {
881        pub ri_uuid: [u8; 16],
882        pub ri_user_time: u64,
883        pub ri_system_time: u64,
884        pub ri_pkg_idle_wkups: u64,
885        pub ri_interrupt_wkups: u64,
886        pub ri_pageins: u64,
887        pub ri_wired_size: u64,
888        pub ri_resident_size: u64,
889        pub ri_phys_footprint: u64,
890        pub ri_proc_start_abstime: u64,
891        pub ri_proc_exit_abstime: u64,
892        pub ri_child_user_time: u64,
893        pub ri_child_system_time: u64,
894        pub ri_child_pkg_idle_wkups: u64,
895        pub ri_child_interrupt_wkups: u64,
896        pub ri_child_pageins: u64,
897        pub ri_child_elapsed_abstime: u64,
898    }
899
900    pub struct rusage_info_v2 {
901        pub ri_uuid: [u8; 16],
902        pub ri_user_time: u64,
903        pub ri_system_time: u64,
904        pub ri_pkg_idle_wkups: u64,
905        pub ri_interrupt_wkups: u64,
906        pub ri_pageins: u64,
907        pub ri_wired_size: u64,
908        pub ri_resident_size: u64,
909        pub ri_phys_footprint: u64,
910        pub ri_proc_start_abstime: u64,
911        pub ri_proc_exit_abstime: u64,
912        pub ri_child_user_time: u64,
913        pub ri_child_system_time: u64,
914        pub ri_child_pkg_idle_wkups: u64,
915        pub ri_child_interrupt_wkups: u64,
916        pub ri_child_pageins: u64,
917        pub ri_child_elapsed_abstime: u64,
918        pub ri_diskio_bytesread: u64,
919        pub ri_diskio_byteswritten: u64,
920    }
921
922    pub struct rusage_info_v3 {
923        pub ri_uuid: [u8; 16],
924        pub ri_user_time: u64,
925        pub ri_system_time: u64,
926        pub ri_pkg_idle_wkups: u64,
927        pub ri_interrupt_wkups: u64,
928        pub ri_pageins: u64,
929        pub ri_wired_size: u64,
930        pub ri_resident_size: u64,
931        pub ri_phys_footprint: u64,
932        pub ri_proc_start_abstime: u64,
933        pub ri_proc_exit_abstime: u64,
934        pub ri_child_user_time: u64,
935        pub ri_child_system_time: u64,
936        pub ri_child_pkg_idle_wkups: u64,
937        pub ri_child_interrupt_wkups: u64,
938        pub ri_child_pageins: u64,
939        pub ri_child_elapsed_abstime: u64,
940        pub ri_diskio_bytesread: u64,
941        pub ri_diskio_byteswritten: u64,
942        pub ri_cpu_time_qos_default: u64,
943        pub ri_cpu_time_qos_maintenance: u64,
944        pub ri_cpu_time_qos_background: u64,
945        pub ri_cpu_time_qos_utility: u64,
946        pub ri_cpu_time_qos_legacy: u64,
947        pub ri_cpu_time_qos_user_initiated: u64,
948        pub ri_cpu_time_qos_user_interactive: u64,
949        pub ri_billed_system_time: u64,
950        pub ri_serviced_system_time: u64,
951    }
952
953    pub struct rusage_info_v4 {
954        pub ri_uuid: [u8; 16],
955        pub ri_user_time: u64,
956        pub ri_system_time: u64,
957        pub ri_pkg_idle_wkups: u64,
958        pub ri_interrupt_wkups: u64,
959        pub ri_pageins: u64,
960        pub ri_wired_size: u64,
961        pub ri_resident_size: u64,
962        pub ri_phys_footprint: u64,
963        pub ri_proc_start_abstime: u64,
964        pub ri_proc_exit_abstime: u64,
965        pub ri_child_user_time: u64,
966        pub ri_child_system_time: u64,
967        pub ri_child_pkg_idle_wkups: u64,
968        pub ri_child_interrupt_wkups: u64,
969        pub ri_child_pageins: u64,
970        pub ri_child_elapsed_abstime: u64,
971        pub ri_diskio_bytesread: u64,
972        pub ri_diskio_byteswritten: u64,
973        pub ri_cpu_time_qos_default: u64,
974        pub ri_cpu_time_qos_maintenance: u64,
975        pub ri_cpu_time_qos_background: u64,
976        pub ri_cpu_time_qos_utility: u64,
977        pub ri_cpu_time_qos_legacy: u64,
978        pub ri_cpu_time_qos_user_initiated: u64,
979        pub ri_cpu_time_qos_user_interactive: u64,
980        pub ri_billed_system_time: u64,
981        pub ri_serviced_system_time: u64,
982        pub ri_logical_writes: u64,
983        pub ri_lifetime_max_phys_footprint: u64,
984        pub ri_instructions: u64,
985        pub ri_cycles: u64,
986        pub ri_billed_energy: u64,
987        pub ri_serviced_energy: u64,
988        pub ri_interval_max_phys_footprint: u64,
989        pub ri_runnable_time: u64,
990    }
991
992    pub struct image_offset {
993        pub uuid: ::uuid_t,
994        pub offset: u32,
995    }
996
997    pub struct attrlist {
998        pub bitmapcount: ::c_ushort,
999        pub reserved: u16,
1000        pub commonattr: attrgroup_t,
1001        pub volattr: attrgroup_t,
1002        pub dirattr: attrgroup_t,
1003        pub fileattr: attrgroup_t,
1004        pub forkattr: attrgroup_t,
1005    }
1006
1007    pub struct attrreference_t {
1008        pub attr_dataoffset: i32,
1009        pub attr_length: u32,
1010    }
1011
1012    pub struct vol_capabilities_attr_t {
1013        pub capabilities: vol_capabilities_set_t,
1014        pub valid: vol_capabilities_set_t,
1015    }
1016
1017    pub struct attribute_set_t {
1018        pub commonattr: attrgroup_t,
1019        pub volattr: attrgroup_t,
1020        pub dirattr: attrgroup_t,
1021        pub fileattr: attrgroup_t,
1022        pub forkattr: attrgroup_t,
1023    }
1024
1025    pub struct vol_attributes_attr_t {
1026        pub validattr: attribute_set_t,
1027        pub nativeattr: attribute_set_t,
1028    }
1029}
1030
1031s_no_extra_traits! {
1032    #[cfg_attr(libc_packedN, repr(packed(4)))]
1033    pub struct kevent {
1034        pub ident: ::uintptr_t,
1035        pub filter: i16,
1036        pub flags: u16,
1037        pub fflags: u32,
1038        pub data: ::intptr_t,
1039        pub udata: *mut ::c_void,
1040    }
1041
1042    #[cfg_attr(libc_packedN, repr(packed(4)))]
1043    pub struct semid_ds {
1044        // Note the manpage shows different types than the system header.
1045        pub sem_perm: ipc_perm,
1046        pub sem_base: i32,
1047        pub sem_nsems: ::c_ushort,
1048        pub sem_otime: ::time_t,
1049        pub sem_pad1: i32,
1050        pub sem_ctime: ::time_t,
1051        pub sem_pad2: i32,
1052        pub sem_pad3: [i32; 4],
1053    }
1054
1055    #[cfg_attr(libc_packedN, repr(packed(4)))]
1056    pub struct shmid_ds {
1057        pub shm_perm: ipc_perm,
1058        pub shm_segsz: ::size_t,
1059        pub shm_lpid: ::pid_t,
1060        pub shm_cpid: ::pid_t,
1061        pub shm_nattch: ::shmatt_t,
1062        pub shm_atime: ::time_t,  // FIXME: 64-bit wrong align => wrong offset
1063        pub shm_dtime: ::time_t,  // FIXME: 64-bit wrong align => wrong offset
1064        pub shm_ctime: ::time_t,  // FIXME: 64-bit wrong align => wrong offset
1065        // FIXME: 64-bit wrong align => wrong offset:
1066        pub shm_internal: *mut ::c_void,
1067    }
1068
1069    pub struct proc_threadinfo {
1070        pub pth_user_time: u64,
1071        pub pth_system_time: u64,
1072        pub pth_cpu_usage: i32,
1073        pub pth_policy: i32,
1074        pub pth_run_state: i32,
1075        pub pth_flags: i32,
1076        pub pth_sleep_time: i32,
1077        pub pth_curpri: i32,
1078        pub pth_priority: i32,
1079        pub pth_maxpriority: i32,
1080        pub pth_name: [::c_char; MAXTHREADNAMESIZE],
1081    }
1082
1083    pub struct statfs {
1084        pub f_bsize: u32,
1085        pub f_iosize: i32,
1086        pub f_blocks: u64,
1087        pub f_bfree: u64,
1088        pub f_bavail: u64,
1089        pub f_files: u64,
1090        pub f_ffree: u64,
1091        pub f_fsid: ::fsid_t,
1092        pub f_owner: ::uid_t,
1093        pub f_type: u32,
1094        pub f_flags: u32,
1095        pub f_fssubtype: u32,
1096        pub f_fstypename: [::c_char; 16],
1097        pub f_mntonname: [::c_char; 1024],
1098        pub f_mntfromname: [::c_char; 1024],
1099        pub f_flags_ext: u32,
1100        pub f_reserved: [u32; 7],
1101    }
1102
1103    pub struct dirent {
1104        pub d_ino: u64,
1105        pub d_seekoff: u64,
1106        pub d_reclen: u16,
1107        pub d_namlen: u16,
1108        pub d_type: u8,
1109        pub d_name: [::c_char; 1024],
1110    }
1111
1112    pub struct pthread_rwlock_t {
1113        __sig: ::c_long,
1114        __opaque: [u8; __PTHREAD_RWLOCK_SIZE__],
1115    }
1116
1117    pub struct pthread_mutex_t {
1118        __sig: ::c_long,
1119        __opaque: [u8; __PTHREAD_MUTEX_SIZE__],
1120    }
1121
1122    pub struct pthread_cond_t {
1123        __sig: ::c_long,
1124        __opaque: [u8; __PTHREAD_COND_SIZE__],
1125    }
1126
1127    pub struct sockaddr_storage {
1128        pub ss_len: u8,
1129        pub ss_family: ::sa_family_t,
1130        __ss_pad1: [u8; 6],
1131        __ss_align: i64,
1132        __ss_pad2: [u8; 112],
1133    }
1134
1135    pub struct utmpx {
1136        pub ut_user: [::c_char; _UTX_USERSIZE],
1137        pub ut_id: [::c_char; _UTX_IDSIZE],
1138        pub ut_line: [::c_char; _UTX_LINESIZE],
1139        pub ut_pid: ::pid_t,
1140        pub ut_type: ::c_short,
1141        pub ut_tv: ::timeval,
1142        pub ut_host: [::c_char; _UTX_HOSTSIZE],
1143        ut_pad: [u32; 16],
1144    }
1145
1146    pub struct sigevent {
1147        pub sigev_notify: ::c_int,
1148        pub sigev_signo: ::c_int,
1149        pub sigev_value: ::sigval,
1150        __unused1: *mut ::c_void,       //actually a function pointer
1151        pub sigev_notify_attributes: *mut ::pthread_attr_t
1152    }
1153
1154    pub struct processor_cpu_load_info {
1155        pub cpu_ticks: [::c_uint; CPU_STATE_MAX as usize],
1156    }
1157
1158    pub struct processor_basic_info {
1159        pub cpu_type: cpu_type_t,
1160        pub cpu_subtype: cpu_subtype_t,
1161        pub running: ::boolean_t,
1162        pub slot_num: ::c_int,
1163        pub is_master: ::boolean_t,
1164    }
1165
1166    pub struct processor_set_basic_info {
1167        pub processor_count: ::c_int,
1168        pub default_policy: ::c_int,
1169    }
1170
1171    pub struct processor_set_load_info {
1172        pub task_count: ::c_int,
1173        pub thread_count: ::c_int,
1174        pub load_average: integer_t,
1175        pub mach_factor: integer_t,
1176    }
1177
1178    pub struct time_value_t {
1179        pub seconds: integer_t,
1180        pub microseconds: integer_t,
1181    }
1182
1183    pub struct thread_basic_info {
1184        pub user_time: time_value_t,
1185        pub system_time: time_value_t,
1186        pub cpu_usage: ::integer_t,
1187        pub policy: ::policy_t,
1188        pub run_state: ::integer_t,
1189        pub flags: ::integer_t,
1190        pub suspend_count: ::integer_t,
1191        pub sleep_time: ::integer_t,
1192    }
1193
1194    pub struct thread_identifier_info {
1195        pub thread_id: u64,
1196        pub thread_handle: u64,
1197        pub dispatch_qaddr: u64,
1198    }
1199
1200    pub struct thread_extended_info {
1201        pub pth_user_time: u64,
1202        pub pth_system_time: u64,
1203        pub pth_cpu_usage: i32,
1204        pub pth_policy: i32,
1205        pub pth_run_state: i32,
1206        pub pth_flags: i32,
1207        pub pth_sleep_time: i32,
1208        pub pth_curpri: i32,
1209        pub pth_priority: i32,
1210        pub pth_maxpriority: i32,
1211        pub pth_name: [::c_char; MAXTHREADNAMESIZE],
1212    }
1213
1214    #[cfg_attr(libc_packedN, repr(packed(4)))]
1215    pub struct if_data64 {
1216        pub ifi_type: ::c_uchar,
1217        pub ifi_typelen: ::c_uchar,
1218        pub ifi_physical: ::c_uchar,
1219        pub ifi_addrlen: ::c_uchar,
1220        pub ifi_hdrlen: ::c_uchar,
1221        pub ifi_recvquota: ::c_uchar,
1222        pub ifi_xmitquota: ::c_uchar,
1223        pub ifi_unused1: ::c_uchar,
1224        pub ifi_mtu: u32,
1225        pub ifi_metric: u32,
1226        pub ifi_baudrate: u64,
1227        pub ifi_ipackets: u64,
1228        pub ifi_ierrors: u64,
1229        pub ifi_opackets: u64,
1230        pub ifi_oerrors: u64,
1231        pub ifi_collisions: u64,
1232        pub ifi_ibytes: u64,
1233        pub ifi_obytes: u64,
1234        pub ifi_imcasts: u64,
1235        pub ifi_omcasts: u64,
1236        pub ifi_iqdrops: u64,
1237        pub ifi_noproto: u64,
1238        pub ifi_recvtiming: u32,
1239        pub ifi_xmittiming: u32,
1240        #[cfg(target_pointer_width = "32")]
1241        pub ifi_lastchange: ::timeval,
1242        #[cfg(not(target_pointer_width = "32"))]
1243        pub ifi_lastchange: timeval32,
1244    }
1245
1246    #[cfg_attr(libc_packedN, repr(packed(4)))]
1247    pub struct if_msghdr2 {
1248        pub ifm_msglen: ::c_ushort,
1249        pub ifm_version: ::c_uchar,
1250        pub ifm_type: ::c_uchar,
1251        pub ifm_addrs: ::c_int,
1252        pub ifm_flags: ::c_int,
1253        pub ifm_index: ::c_ushort,
1254        pub ifm_snd_len: ::c_int,
1255        pub ifm_snd_maxlen: ::c_int,
1256        pub ifm_snd_drops: ::c_int,
1257        pub ifm_timer: ::c_int,
1258        pub ifm_data: if_data64,
1259    }
1260
1261    #[cfg_attr(libc_packedN, repr(packed(8)))]
1262    pub struct vm_statistics64 {
1263        pub free_count: natural_t,
1264        pub active_count: natural_t,
1265        pub inactive_count: natural_t,
1266        pub wire_count: natural_t,
1267        pub zero_fill_count: u64,
1268        pub reactivations: u64,
1269        pub pageins: u64,
1270        pub pageouts: u64,
1271        pub faults: u64,
1272        pub cow_faults: u64,
1273        pub lookups: u64,
1274        pub hits: u64,
1275        pub purges: u64,
1276        pub purgeable_count: natural_t,
1277        pub speculative_count: natural_t,
1278        pub decompressions: u64,
1279        pub compressions: u64,
1280        pub swapins: u64,
1281        pub swapouts: u64,
1282        pub compressor_page_count: natural_t,
1283        pub throttled_count: natural_t,
1284        pub external_page_count: natural_t,
1285        pub internal_page_count: natural_t,
1286        pub total_uncompressed_pages_in_compressor: u64,
1287    }
1288
1289    #[cfg_attr(libc_packedN, repr(packed(4)))]
1290    pub struct mach_task_basic_info {
1291        pub virtual_size: mach_vm_size_t,
1292        pub resident_size: mach_vm_size_t,
1293        pub resident_size_max: mach_vm_size_t,
1294        pub user_time: time_value_t,
1295        pub system_time: time_value_t,
1296        pub policy: ::policy_t,
1297        pub suspend_count: integer_t,
1298    }
1299
1300    #[cfg_attr(libc_packedN, repr(packed(4)))]
1301    pub struct log2phys {
1302        pub l2p_flags: ::c_uint,
1303        pub l2p_contigbytes: ::off_t,
1304        pub l2p_devoffset: ::off_t,
1305    }
1306
1307    pub struct os_unfair_lock_s {
1308        _os_unfair_lock_opaque: u32,
1309    }
1310}
1311
1312impl siginfo_t {
1313    pub unsafe fn si_addr(&self) -> *mut ::c_void {
1314        self.si_addr
1315    }
1316
1317    pub unsafe fn si_value(&self) -> ::sigval {
1318        #[repr(C)]
1319        struct siginfo_timer {
1320            _si_signo: ::c_int,
1321            _si_errno: ::c_int,
1322            _si_code: ::c_int,
1323            _si_pid: ::pid_t,
1324            _si_uid: ::uid_t,
1325            _si_status: ::c_int,
1326            _si_addr: *mut ::c_void,
1327            si_value: ::sigval,
1328        }
1329
1330        (*(self as *const siginfo_t as *const siginfo_timer)).si_value
1331    }
1332
1333    pub unsafe fn si_pid(&self) -> ::pid_t {
1334        self.si_pid
1335    }
1336
1337    pub unsafe fn si_uid(&self) -> ::uid_t {
1338        self.si_uid
1339    }
1340
1341    pub unsafe fn si_status(&self) -> ::c_int {
1342        self.si_status
1343    }
1344}
1345
1346cfg_if! {
1347    if #[cfg(libc_union)] {
1348        s_no_extra_traits! {
1349            pub union semun {
1350                pub val: ::c_int,
1351                pub buf: *mut semid_ds,
1352                pub array: *mut ::c_ushort,
1353            }
1354        }
1355
1356        cfg_if! {
1357            if #[cfg(feature = "extra_traits")] {
1358                impl PartialEq for semun {
1359                    fn eq(&self, other: &semun) -> bool {
1360                        unsafe { self.val == other.val }
1361                    }
1362                }
1363                impl Eq for semun {}
1364                impl ::fmt::Debug for semun {
1365                    fn fmt(&self, f: &mut ::fmt::Formatter)
1366                           -> ::fmt::Result {
1367                        f.debug_struct("semun")
1368                            .field("val", unsafe { &self.val })
1369                            .finish()
1370                    }
1371                }
1372                impl ::hash::Hash for semun {
1373                    fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1374                        unsafe { self.val.hash(state) };
1375                    }
1376                }
1377            }
1378        }
1379    }
1380}
1381
1382cfg_if! {
1383    if #[cfg(feature = "extra_traits")] {
1384        impl PartialEq for kevent {
1385            fn eq(&self, other: &kevent) -> bool {
1386                self.ident == other.ident
1387                    && self.filter == other.filter
1388                    && self.flags == other.flags
1389                    && self.fflags == other.fflags
1390                    && self.data == other.data
1391                    && self.udata == other.udata
1392            }
1393        }
1394        impl Eq for kevent {}
1395        impl ::fmt::Debug for kevent {
1396            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1397                let ident = self.ident;
1398                let filter = self.filter;
1399                let flags = self.flags;
1400                let fflags = self.fflags;
1401                let data = self.data;
1402                let udata = self.udata;
1403                f.debug_struct("kevent")
1404                    .field("ident", &ident)
1405                    .field("filter", &filter)
1406                    .field("flags", &flags)
1407                    .field("fflags", &fflags)
1408                    .field("data", &data)
1409                    .field("udata", &udata)
1410                    .finish()
1411            }
1412        }
1413        impl ::hash::Hash for kevent {
1414            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1415                let ident = self.ident;
1416                let filter = self.filter;
1417                let flags = self.flags;
1418                let fflags = self.fflags;
1419                let data = self.data;
1420                let udata = self.udata;
1421                ident.hash(state);
1422                filter.hash(state);
1423                flags.hash(state);
1424                fflags.hash(state);
1425                data.hash(state);
1426                udata.hash(state);
1427            }
1428        }
1429
1430        impl PartialEq for semid_ds {
1431            fn eq(&self, other: &semid_ds) -> bool {
1432                let sem_perm = self.sem_perm;
1433                let sem_pad3 = self.sem_pad3;
1434                let other_sem_perm = other.sem_perm;
1435                let other_sem_pad3 = other.sem_pad3;
1436                sem_perm == other_sem_perm
1437                    && self.sem_base == other.sem_base
1438                    && self.sem_nsems == other.sem_nsems
1439                    && self.sem_otime == other.sem_otime
1440                    && self.sem_pad1 == other.sem_pad1
1441                    && self.sem_ctime == other.sem_ctime
1442                    && self.sem_pad2 == other.sem_pad2
1443                    && sem_pad3 == other_sem_pad3
1444            }
1445        }
1446        impl Eq for semid_ds {}
1447        impl ::fmt::Debug for semid_ds {
1448            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1449                let sem_perm = self.sem_perm;
1450                let sem_base = self.sem_base;
1451                let sem_nsems = self.sem_nsems;
1452                let sem_otime = self.sem_otime;
1453                let sem_pad1 = self.sem_pad1;
1454                let sem_ctime = self.sem_ctime;
1455                let sem_pad2 = self.sem_pad2;
1456                let sem_pad3 = self.sem_pad3;
1457                f.debug_struct("semid_ds")
1458                    .field("sem_perm", &sem_perm)
1459                    .field("sem_base", &sem_base)
1460                    .field("sem_nsems", &sem_nsems)
1461                    .field("sem_otime", &sem_otime)
1462                    .field("sem_pad1", &sem_pad1)
1463                    .field("sem_ctime", &sem_ctime)
1464                    .field("sem_pad2", &sem_pad2)
1465                    .field("sem_pad3", &sem_pad3)
1466                    .finish()
1467            }
1468        }
1469        impl ::hash::Hash for semid_ds {
1470            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1471                let sem_perm = self.sem_perm;
1472                let sem_base = self.sem_base;
1473                let sem_nsems = self.sem_nsems;
1474                let sem_otime = self.sem_otime;
1475                let sem_pad1 = self.sem_pad1;
1476                let sem_ctime = self.sem_ctime;
1477                let sem_pad2 = self.sem_pad2;
1478                let sem_pad3 = self.sem_pad3;
1479                sem_perm.hash(state);
1480                sem_base.hash(state);
1481                sem_nsems.hash(state);
1482                sem_otime.hash(state);
1483                sem_pad1.hash(state);
1484                sem_ctime.hash(state);
1485                sem_pad2.hash(state);
1486                sem_pad3.hash(state);
1487            }
1488        }
1489
1490        impl PartialEq for shmid_ds {
1491            fn eq(&self, other: &shmid_ds) -> bool {
1492                let shm_perm = self.shm_perm;
1493                let other_shm_perm = other.shm_perm;
1494                shm_perm == other_shm_perm
1495                    && self.shm_segsz == other.shm_segsz
1496                    && self.shm_lpid == other.shm_lpid
1497                    && self.shm_cpid == other.shm_cpid
1498                    && self.shm_nattch == other.shm_nattch
1499                    && self.shm_atime == other.shm_atime
1500                    && self.shm_dtime == other.shm_dtime
1501                    && self.shm_ctime == other.shm_ctime
1502                    && self.shm_internal == other.shm_internal
1503            }
1504        }
1505        impl Eq for shmid_ds {}
1506        impl ::fmt::Debug for shmid_ds {
1507            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1508                let shm_perm = self.shm_perm;
1509                let shm_segsz = self.shm_segsz;
1510                let shm_lpid = self.shm_lpid;
1511                let shm_cpid = self.shm_cpid;
1512                let shm_nattch = self.shm_nattch;
1513                let shm_atime = self.shm_atime;
1514                let shm_dtime = self.shm_dtime;
1515                let shm_ctime = self.shm_ctime;
1516                let shm_internal = self.shm_internal;
1517                f.debug_struct("shmid_ds")
1518                    .field("shm_perm", &shm_perm)
1519                    .field("shm_segsz", &shm_segsz)
1520                    .field("shm_lpid", &shm_lpid)
1521                    .field("shm_cpid", &shm_cpid)
1522                    .field("shm_nattch", &shm_nattch)
1523                    .field("shm_atime", &shm_atime)
1524                    .field("shm_dtime", &shm_dtime)
1525                    .field("shm_ctime", &shm_ctime)
1526                    .field("shm_internal", &shm_internal)
1527                    .finish()
1528            }
1529        }
1530        impl ::hash::Hash for shmid_ds {
1531            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1532                let shm_perm = self.shm_perm;
1533                let shm_segsz = self.shm_segsz;
1534                let shm_lpid = self.shm_lpid;
1535                let shm_cpid = self.shm_cpid;
1536                let shm_nattch = self.shm_nattch;
1537                let shm_atime = self.shm_atime;
1538                let shm_dtime = self.shm_dtime;
1539                let shm_ctime = self.shm_ctime;
1540                let shm_internal = self.shm_internal;
1541                shm_perm.hash(state);
1542                shm_segsz.hash(state);
1543                shm_lpid.hash(state);
1544                shm_cpid.hash(state);
1545                shm_nattch.hash(state);
1546                shm_atime.hash(state);
1547                shm_dtime.hash(state);
1548                shm_ctime.hash(state);
1549                shm_internal.hash(state);
1550            }
1551        }
1552
1553        impl PartialEq for proc_threadinfo {
1554            fn eq(&self, other: &proc_threadinfo) -> bool {
1555                self.pth_user_time == other.pth_user_time
1556                    && self.pth_system_time == other.pth_system_time
1557                    && self.pth_cpu_usage == other.pth_cpu_usage
1558                    && self.pth_policy == other.pth_policy
1559                    && self.pth_run_state == other.pth_run_state
1560                    && self.pth_flags == other.pth_flags
1561                    && self.pth_sleep_time == other.pth_sleep_time
1562                    && self.pth_curpri == other.pth_curpri
1563                    && self.pth_priority == other.pth_priority
1564                    && self.pth_maxpriority == other.pth_maxpriority
1565                    && self.pth_name
1566                           .iter()
1567                           .zip(other.pth_name.iter())
1568                           .all(|(a,b)| a == b)
1569            }
1570        }
1571        impl Eq for proc_threadinfo {}
1572        impl ::fmt::Debug for proc_threadinfo {
1573            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1574                f.debug_struct("proc_threadinfo")
1575                    .field("pth_user_time", &self.pth_user_time)
1576                    .field("pth_system_time", &self.pth_system_time)
1577                    .field("pth_cpu_usage", &self.pth_cpu_usage)
1578                    .field("pth_policy", &self.pth_policy)
1579                    .field("pth_run_state", &self.pth_run_state)
1580                    .field("pth_flags", &self.pth_flags)
1581                    .field("pth_sleep_time", &self.pth_sleep_time)
1582                    .field("pth_curpri", &self.pth_curpri)
1583                    .field("pth_priority", &self.pth_priority)
1584                    .field("pth_maxpriority", &self.pth_maxpriority)
1585                      // FIXME: .field("pth_name", &self.pth_name)
1586                    .finish()
1587            }
1588        }
1589        impl ::hash::Hash for proc_threadinfo {
1590            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1591                self.pth_user_time.hash(state);
1592                self.pth_system_time.hash(state);
1593                self.pth_cpu_usage.hash(state);
1594                self.pth_policy.hash(state);
1595                self.pth_run_state.hash(state);
1596                self.pth_flags.hash(state);
1597                self.pth_sleep_time.hash(state);
1598                self.pth_curpri.hash(state);
1599                self.pth_priority.hash(state);
1600                self.pth_maxpriority.hash(state);
1601                self.pth_name.hash(state);
1602            }
1603        }
1604
1605        impl PartialEq for statfs {
1606            fn eq(&self, other: &statfs) -> bool {
1607                self.f_bsize == other.f_bsize
1608                    && self.f_iosize == other.f_iosize
1609                    && self.f_blocks == other.f_blocks
1610                    && self.f_bfree == other.f_bfree
1611                    && self.f_bavail == other.f_bavail
1612                    && self.f_files == other.f_files
1613                    && self.f_ffree == other.f_ffree
1614                    && self.f_fsid == other.f_fsid
1615                    && self.f_owner == other.f_owner
1616                    && self.f_flags == other.f_flags
1617                    && self.f_fssubtype == other.f_fssubtype
1618                    && self.f_fstypename == other.f_fstypename
1619                    && self.f_type == other.f_type
1620                    && self
1621                    .f_mntonname
1622                    .iter()
1623                    .zip(other.f_mntonname.iter())
1624                    .all(|(a,b)| a == b)
1625                    && self
1626                    .f_mntfromname
1627                    .iter()
1628                    .zip(other.f_mntfromname.iter())
1629                    .all(|(a,b)| a == b)
1630                    && self.f_reserved == other.f_reserved
1631            }
1632        }
1633
1634        impl Eq for statfs {}
1635        impl ::fmt::Debug for statfs {
1636            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1637                f.debug_struct("statfs")
1638                    .field("f_bsize", &self.f_bsize)
1639                    .field("f_iosize", &self.f_iosize)
1640                    .field("f_blocks", &self.f_blocks)
1641                    .field("f_bfree", &self.f_bfree)
1642                    .field("f_bavail", &self.f_bavail)
1643                    .field("f_files", &self.f_files)
1644                    .field("f_ffree", &self.f_ffree)
1645                    .field("f_fsid", &self.f_fsid)
1646                    .field("f_owner", &self.f_owner)
1647                    .field("f_flags", &self.f_flags)
1648                    .field("f_fssubtype", &self.f_fssubtype)
1649                    .field("f_fstypename", &self.f_fstypename)
1650                    .field("f_type", &self.f_type)
1651                // FIXME: .field("f_mntonname", &self.f_mntonname)
1652                // FIXME: .field("f_mntfromname", &self.f_mntfromname)
1653                    .field("f_reserved", &self.f_reserved)
1654                    .finish()
1655            }
1656        }
1657
1658        impl ::hash::Hash for statfs {
1659            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1660                self.f_bsize.hash(state);
1661                self.f_iosize.hash(state);
1662                self.f_blocks.hash(state);
1663                self.f_bfree.hash(state);
1664                self.f_bavail.hash(state);
1665                self.f_files.hash(state);
1666                self.f_ffree.hash(state);
1667                self.f_fsid.hash(state);
1668                self.f_owner.hash(state);
1669                self.f_flags.hash(state);
1670                self.f_fssubtype.hash(state);
1671                self.f_fstypename.hash(state);
1672                self.f_type.hash(state);
1673                self.f_mntonname.hash(state);
1674                self.f_mntfromname.hash(state);
1675                self.f_reserved.hash(state);
1676            }
1677        }
1678
1679        impl PartialEq for dirent {
1680            fn eq(&self, other: &dirent) -> bool {
1681                self.d_ino == other.d_ino
1682                    && self.d_seekoff == other.d_seekoff
1683                    && self.d_reclen == other.d_reclen
1684                    && self.d_namlen == other.d_namlen
1685                    && self.d_type == other.d_type
1686                    && self
1687                    .d_name
1688                    .iter()
1689                    .zip(other.d_name.iter())
1690                    .all(|(a,b)| a == b)
1691            }
1692        }
1693        impl Eq for dirent {}
1694        impl ::fmt::Debug for dirent {
1695            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1696                f.debug_struct("dirent")
1697                    .field("d_ino", &self.d_ino)
1698                    .field("d_seekoff", &self.d_seekoff)
1699                    .field("d_reclen", &self.d_reclen)
1700                    .field("d_namlen", &self.d_namlen)
1701                    .field("d_type", &self.d_type)
1702                    // FIXME: .field("d_name", &self.d_name)
1703                    .finish()
1704            }
1705        }
1706        impl ::hash::Hash for dirent {
1707            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1708                self.d_ino.hash(state);
1709                self.d_seekoff.hash(state);
1710                self.d_reclen.hash(state);
1711                self.d_namlen.hash(state);
1712                self.d_type.hash(state);
1713                self.d_name.hash(state);
1714            }
1715        }
1716        impl PartialEq for pthread_rwlock_t {
1717            fn eq(&self, other: &pthread_rwlock_t) -> bool {
1718                self.__sig == other.__sig
1719                    && self.
1720                    __opaque
1721                    .iter()
1722                    .zip(other.__opaque.iter())
1723                    .all(|(a,b)| a == b)
1724            }
1725        }
1726        impl Eq for pthread_rwlock_t {}
1727        impl ::fmt::Debug for pthread_rwlock_t {
1728            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1729                f.debug_struct("pthread_rwlock_t")
1730                    .field("__sig", &self.__sig)
1731                    // FIXME: .field("__opaque", &self.__opaque)
1732                    .finish()
1733            }
1734        }
1735        impl ::hash::Hash for pthread_rwlock_t {
1736            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1737                self.__sig.hash(state);
1738                self.__opaque.hash(state);
1739            }
1740        }
1741
1742        impl PartialEq for pthread_mutex_t {
1743            fn eq(&self, other: &pthread_mutex_t) -> bool {
1744                self.__sig == other.__sig
1745                    && self.
1746                    __opaque
1747                    .iter()
1748                    .zip(other.__opaque.iter())
1749                    .all(|(a,b)| a == b)
1750            }
1751        }
1752
1753        impl Eq for pthread_mutex_t {}
1754
1755        impl ::fmt::Debug for pthread_mutex_t {
1756            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1757                f.debug_struct("pthread_mutex_t")
1758                    .field("__sig", &self.__sig)
1759                    // FIXME: .field("__opaque", &self.__opaque)
1760                    .finish()
1761            }
1762        }
1763
1764        impl ::hash::Hash for pthread_mutex_t {
1765            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1766                self.__sig.hash(state);
1767                self.__opaque.hash(state);
1768            }
1769        }
1770
1771        impl PartialEq for pthread_cond_t {
1772            fn eq(&self, other: &pthread_cond_t) -> bool {
1773                self.__sig == other.__sig
1774                    && self.
1775                    __opaque
1776                    .iter()
1777                    .zip(other.__opaque.iter())
1778                    .all(|(a,b)| a == b)
1779            }
1780        }
1781
1782        impl Eq for pthread_cond_t {}
1783
1784        impl ::fmt::Debug for pthread_cond_t {
1785            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1786                f.debug_struct("pthread_cond_t")
1787                    .field("__sig", &self.__sig)
1788                    // FIXME: .field("__opaque", &self.__opaque)
1789                    .finish()
1790            }
1791        }
1792
1793        impl ::hash::Hash for pthread_cond_t {
1794            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1795                self.__sig.hash(state);
1796                self.__opaque.hash(state);
1797            }
1798        }
1799
1800        impl PartialEq for sockaddr_storage {
1801            fn eq(&self, other: &sockaddr_storage) -> bool {
1802                self.ss_len == other.ss_len
1803                    && self.ss_family == other.ss_family
1804                    && self
1805                    .__ss_pad1
1806                    .iter()
1807                    .zip(other.__ss_pad1.iter())
1808                    .all(|(a, b)| a == b)
1809                    && self.__ss_align == other.__ss_align
1810                    && self
1811                    .__ss_pad2
1812                    .iter()
1813                    .zip(other.__ss_pad2.iter())
1814                    .all(|(a, b)| a == b)
1815            }
1816        }
1817
1818        impl Eq for sockaddr_storage {}
1819
1820        impl ::fmt::Debug for sockaddr_storage {
1821            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1822                f.debug_struct("sockaddr_storage")
1823                    .field("ss_len", &self.ss_len)
1824                    .field("ss_family", &self.ss_family)
1825                    .field("__ss_pad1", &self.__ss_pad1)
1826                    .field("__ss_align", &self.__ss_align)
1827                    // FIXME: .field("__ss_pad2", &self.__ss_pad2)
1828                    .finish()
1829            }
1830        }
1831
1832        impl ::hash::Hash for sockaddr_storage {
1833            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1834                self.ss_len.hash(state);
1835                self.ss_family.hash(state);
1836                self.__ss_pad1.hash(state);
1837                self.__ss_align.hash(state);
1838                self.__ss_pad2.hash(state);
1839            }
1840        }
1841
1842        impl PartialEq for utmpx {
1843            fn eq(&self, other: &utmpx) -> bool {
1844                self.ut_user
1845                    .iter()
1846                    .zip(other.ut_user.iter())
1847                    .all(|(a,b)| a == b)
1848                    && self.ut_id == other.ut_id
1849                    && self.ut_line == other.ut_line
1850                    && self.ut_pid == other.ut_pid
1851                    && self.ut_type == other.ut_type
1852                    && self.ut_tv == other.ut_tv
1853                    && self
1854                    .ut_host
1855                    .iter()
1856                    .zip(other.ut_host.iter())
1857                    .all(|(a,b)| a == b)
1858                    && self.ut_pad == other.ut_pad
1859            }
1860        }
1861
1862        impl Eq for utmpx {}
1863
1864        impl ::fmt::Debug for utmpx {
1865            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1866                f.debug_struct("utmpx")
1867                    // FIXME: .field("ut_user", &self.ut_user)
1868                    .field("ut_id", &self.ut_id)
1869                    .field("ut_line", &self.ut_line)
1870                    .field("ut_pid", &self.ut_pid)
1871                    .field("ut_type", &self.ut_type)
1872                    .field("ut_tv", &self.ut_tv)
1873                    // FIXME: .field("ut_host", &self.ut_host)
1874                    .field("ut_pad", &self.ut_pad)
1875                    .finish()
1876            }
1877        }
1878
1879        impl ::hash::Hash for utmpx {
1880            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1881                self.ut_user.hash(state);
1882                self.ut_id.hash(state);
1883                self.ut_line.hash(state);
1884                self.ut_pid.hash(state);
1885                self.ut_type.hash(state);
1886                self.ut_tv.hash(state);
1887                self.ut_host.hash(state);
1888                self.ut_pad.hash(state);
1889            }
1890        }
1891
1892        impl PartialEq for sigevent {
1893            fn eq(&self, other: &sigevent) -> bool {
1894                self.sigev_notify == other.sigev_notify
1895                    && self.sigev_signo == other.sigev_signo
1896                    && self.sigev_value == other.sigev_value
1897                    && self.sigev_notify_attributes
1898                        == other.sigev_notify_attributes
1899            }
1900        }
1901
1902        impl Eq for sigevent {}
1903
1904        impl ::fmt::Debug for sigevent {
1905            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1906                f.debug_struct("sigevent")
1907                    .field("sigev_notify", &self.sigev_notify)
1908                    .field("sigev_signo", &self.sigev_signo)
1909                    .field("sigev_value", &self.sigev_value)
1910                    .field("sigev_notify_attributes",
1911                           &self.sigev_notify_attributes)
1912                    .finish()
1913            }
1914        }
1915
1916        impl ::hash::Hash for sigevent {
1917            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1918                self.sigev_notify.hash(state);
1919                self.sigev_signo.hash(state);
1920                self.sigev_value.hash(state);
1921                self.sigev_notify_attributes.hash(state);
1922            }
1923        }
1924
1925        impl PartialEq for processor_cpu_load_info {
1926            fn eq(&self, other: &processor_cpu_load_info) -> bool {
1927                self.cpu_ticks == other.cpu_ticks
1928            }
1929        }
1930        impl Eq for processor_cpu_load_info {}
1931        impl ::fmt::Debug for processor_cpu_load_info {
1932            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1933                f.debug_struct("processor_cpu_load_info")
1934                    .field("cpu_ticks", &self.cpu_ticks)
1935                    .finish()
1936            }
1937        }
1938        impl ::hash::Hash for processor_cpu_load_info {
1939            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1940                self.cpu_ticks.hash(state);
1941            }
1942        }
1943
1944        impl PartialEq for processor_basic_info {
1945            fn eq(&self, other: &processor_basic_info) -> bool {
1946                self.cpu_type == other.cpu_type
1947                    && self.cpu_subtype == other.cpu_subtype
1948                    && self.running == other.running
1949                    && self.slot_num == other.slot_num
1950                    && self.is_master == other.is_master
1951            }
1952        }
1953        impl Eq for processor_basic_info {}
1954        impl ::fmt::Debug for processor_basic_info {
1955            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1956                f.debug_struct("processor_basic_info")
1957                    .field("cpu_type", &self.cpu_type)
1958                    .field("cpu_subtype", &self.cpu_subtype)
1959                    .field("running", &self.running)
1960                    .field("slot_num", &self.slot_num)
1961                    .field("is_master", &self.is_master)
1962                    .finish()
1963            }
1964        }
1965        impl ::hash::Hash for processor_basic_info {
1966            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1967                self.cpu_type.hash(state);
1968                self.cpu_subtype.hash(state);
1969                self.running.hash(state);
1970                self.slot_num.hash(state);
1971                self.is_master.hash(state);
1972            }
1973        }
1974
1975        impl PartialEq for processor_set_basic_info {
1976            fn eq(&self, other: &processor_set_basic_info) -> bool {
1977                self.processor_count == other.processor_count
1978                    && self.default_policy == other.default_policy
1979            }
1980        }
1981        impl Eq for processor_set_basic_info {}
1982        impl ::fmt::Debug for processor_set_basic_info {
1983            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
1984                f.debug_struct("processor_set_basic_info")
1985                    .field("processor_count", &self.processor_count)
1986                    .field("default_policy", &self.default_policy)
1987                    .finish()
1988            }
1989        }
1990        impl ::hash::Hash for processor_set_basic_info {
1991            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
1992                self.processor_count.hash(state);
1993                self.default_policy.hash(state);
1994            }
1995        }
1996
1997        impl PartialEq for processor_set_load_info {
1998            fn eq(&self, other: &processor_set_load_info) -> bool {
1999                self.task_count == other.task_count
2000                    && self.thread_count == other.thread_count
2001                    && self.load_average == other.load_average
2002                    && self.mach_factor == other.mach_factor
2003            }
2004        }
2005        impl Eq for processor_set_load_info {}
2006        impl ::fmt::Debug for processor_set_load_info {
2007            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2008                f.debug_struct("processor_set_load_info")
2009                    .field("task_count", &self.task_count)
2010                    .field("thread_count", &self.thread_count)
2011                    .field("load_average", &self.load_average)
2012                    .field("mach_factor", &self.mach_factor)
2013                    .finish()
2014            }
2015        }
2016        impl ::hash::Hash for processor_set_load_info {
2017            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
2018                self.task_count.hash(state);
2019                self.thread_count.hash(state);
2020                self.load_average.hash(state);
2021                self.mach_factor.hash(state);
2022            }
2023        }
2024
2025        impl PartialEq for time_value_t {
2026            fn eq(&self, other: &time_value_t) -> bool {
2027                self.seconds == other.seconds
2028                    && self.microseconds == other.microseconds
2029            }
2030        }
2031        impl Eq for time_value_t {}
2032        impl ::fmt::Debug for time_value_t {
2033            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2034                f.debug_struct("time_value_t")
2035                    .field("seconds", &self.seconds)
2036                    .field("microseconds", &self.microseconds)
2037                    .finish()
2038            }
2039        }
2040        impl ::hash::Hash for time_value_t {
2041            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
2042                self.seconds.hash(state);
2043                self.microseconds.hash(state);
2044            }
2045        }
2046        impl PartialEq for thread_basic_info {
2047            fn eq(&self, other: &thread_basic_info) -> bool {
2048                self.user_time == other.user_time
2049                    && self.system_time == other.system_time
2050                    && self.cpu_usage == other.cpu_usage
2051                    && self.policy == other.policy
2052                    && self.run_state == other.run_state
2053                    && self.flags == other.flags
2054                    && self.suspend_count == other.suspend_count
2055                    && self.sleep_time == other.sleep_time
2056            }
2057        }
2058        impl Eq for thread_basic_info {}
2059        impl ::fmt::Debug for thread_basic_info {
2060            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2061                f.debug_struct("thread_basic_info")
2062                    .field("user_time", &self.user_time)
2063                    .field("system_time", &self.system_time)
2064                    .field("cpu_usage", &self.cpu_usage)
2065                    .field("policy", &self.policy)
2066                    .field("run_state", &self.run_state)
2067                    .field("flags", &self.flags)
2068                    .field("suspend_count", &self.suspend_count)
2069                    .field("sleep_time", &self.sleep_time)
2070                    .finish()
2071            }
2072        }
2073        impl ::hash::Hash for thread_basic_info {
2074            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
2075                self.user_time.hash(state);
2076                self.system_time.hash(state);
2077                self.cpu_usage.hash(state);
2078                self.policy.hash(state);
2079                self.run_state.hash(state);
2080                self.flags.hash(state);
2081                self.suspend_count.hash(state);
2082                self.sleep_time.hash(state);
2083            }
2084        }
2085        impl PartialEq for thread_extended_info {
2086            fn eq(&self, other: &thread_extended_info) -> bool {
2087                self.pth_user_time == other.pth_user_time
2088                    && self.pth_system_time == other.pth_system_time
2089                    && self.pth_cpu_usage == other.pth_cpu_usage
2090                    && self.pth_policy == other.pth_policy
2091                    && self.pth_run_state == other.pth_run_state
2092                    && self.pth_flags == other.pth_flags
2093                    && self.pth_sleep_time == other.pth_sleep_time
2094                    && self.pth_curpri == other.pth_curpri
2095                    && self.pth_priority == other.pth_priority
2096                    && self.pth_maxpriority == other.pth_maxpriority
2097                    && self.pth_name
2098                           .iter()
2099                           .zip(other.pth_name.iter())
2100                           .all(|(a,b)| a == b)
2101            }
2102        }
2103        impl Eq for thread_extended_info {}
2104        impl ::fmt::Debug for thread_extended_info {
2105            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2106                f.debug_struct("proc_threadinfo")
2107                    .field("pth_user_time", &self.pth_user_time)
2108                    .field("pth_system_time", &self.pth_system_time)
2109                    .field("pth_cpu_usage", &self.pth_cpu_usage)
2110                    .field("pth_policy", &self.pth_policy)
2111                    .field("pth_run_state", &self.pth_run_state)
2112                    .field("pth_flags", &self.pth_flags)
2113                    .field("pth_sleep_time", &self.pth_sleep_time)
2114                    .field("pth_curpri", &self.pth_curpri)
2115                    .field("pth_priority", &self.pth_priority)
2116                    .field("pth_maxpriority", &self.pth_maxpriority)
2117                      // FIXME: .field("pth_name", &self.pth_name)
2118                    .finish()
2119            }
2120        }
2121        impl ::hash::Hash for thread_extended_info {
2122            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
2123                self.pth_user_time.hash(state);
2124                self.pth_system_time.hash(state);
2125                self.pth_cpu_usage.hash(state);
2126                self.pth_policy.hash(state);
2127                self.pth_run_state.hash(state);
2128                self.pth_flags.hash(state);
2129                self.pth_sleep_time.hash(state);
2130                self.pth_curpri.hash(state);
2131                self.pth_priority.hash(state);
2132                self.pth_maxpriority.hash(state);
2133                self.pth_name.hash(state);
2134            }
2135        }
2136        impl PartialEq for thread_identifier_info {
2137            fn eq(&self, other: &thread_identifier_info) -> bool {
2138                self.thread_id == other.thread_id
2139                    && self.thread_handle == other.thread_handle
2140                    && self.dispatch_qaddr == other.dispatch_qaddr
2141            }
2142        }
2143        impl Eq for thread_identifier_info {}
2144        impl ::fmt::Debug for thread_identifier_info {
2145            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2146                f.debug_struct("thread_identifier_info")
2147                    .field("thread_id", &self.thread_id)
2148                    .field("thread_handle", &self.thread_handle)
2149                    .field("dispatch_qaddr", &self.dispatch_qaddr)
2150                    .finish()
2151            }
2152        }
2153        impl ::hash::Hash for thread_identifier_info {
2154            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
2155                self.thread_id.hash(state);
2156                self.thread_handle.hash(state);
2157                self.dispatch_qaddr.hash(state);
2158            }
2159        }
2160        impl PartialEq for if_data64 {
2161            fn eq(&self, other: &if_data64) -> bool {
2162                self.ifi_type == other.ifi_type &&
2163                self.ifi_typelen == other.ifi_typelen &&
2164                self.ifi_physical == other.ifi_physical &&
2165                self.ifi_addrlen == other.ifi_addrlen &&
2166                self.ifi_hdrlen == other.ifi_hdrlen &&
2167                self.ifi_recvquota == other.ifi_recvquota &&
2168                self.ifi_xmitquota == other.ifi_xmitquota &&
2169                self.ifi_unused1 == other.ifi_unused1 &&
2170                self.ifi_mtu == other.ifi_mtu &&
2171                self.ifi_metric == other.ifi_metric &&
2172                self.ifi_baudrate == other.ifi_baudrate &&
2173                self.ifi_ipackets == other.ifi_ipackets &&
2174                self.ifi_ierrors == other.ifi_ierrors &&
2175                self.ifi_opackets == other.ifi_opackets &&
2176                self.ifi_oerrors == other.ifi_oerrors &&
2177                self.ifi_collisions == other.ifi_collisions &&
2178                self.ifi_ibytes == other.ifi_ibytes &&
2179                self.ifi_obytes == other.ifi_obytes &&
2180                self.ifi_imcasts == other.ifi_imcasts &&
2181                self.ifi_omcasts == other.ifi_omcasts &&
2182                self.ifi_iqdrops == other.ifi_iqdrops &&
2183                self.ifi_noproto == other.ifi_noproto &&
2184                self.ifi_recvtiming == other.ifi_recvtiming &&
2185                self.ifi_xmittiming == other.ifi_xmittiming &&
2186                self.ifi_lastchange == other.ifi_lastchange
2187            }
2188        }
2189        impl Eq for if_data64 {}
2190        impl ::fmt::Debug for if_data64 {
2191            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2192                let ifi_type = self.ifi_type;
2193                let ifi_typelen = self.ifi_typelen;
2194                let ifi_physical = self.ifi_physical;
2195                let ifi_addrlen = self.ifi_addrlen;
2196                let ifi_hdrlen = self.ifi_hdrlen;
2197                let ifi_recvquota = self.ifi_recvquota;
2198                let ifi_xmitquota = self.ifi_xmitquota;
2199                let ifi_unused1 = self.ifi_unused1;
2200                let ifi_mtu = self.ifi_mtu;
2201                let ifi_metric = self.ifi_metric;
2202                let ifi_baudrate = self.ifi_baudrate;
2203                let ifi_ipackets = self.ifi_ipackets;
2204                let ifi_ierrors = self.ifi_ierrors;
2205                let ifi_opackets = self.ifi_opackets;
2206                let ifi_oerrors = self.ifi_oerrors;
2207                let ifi_collisions = self.ifi_collisions;
2208                let ifi_ibytes = self.ifi_ibytes;
2209                let ifi_obytes = self.ifi_obytes;
2210                let ifi_imcasts = self.ifi_imcasts;
2211                let ifi_omcasts = self.ifi_omcasts;
2212                let ifi_iqdrops = self.ifi_iqdrops;
2213                let ifi_noproto = self.ifi_noproto;
2214                let ifi_recvtiming = self.ifi_recvtiming;
2215                let ifi_xmittiming = self.ifi_xmittiming;
2216                let ifi_lastchange = self.ifi_lastchange;
2217                f.debug_struct("if_data64")
2218                    .field("ifi_type", &ifi_type)
2219                    .field("ifi_typelen", &ifi_typelen)
2220                    .field("ifi_physical", &ifi_physical)
2221                    .field("ifi_addrlen", &ifi_addrlen)
2222                    .field("ifi_hdrlen", &ifi_hdrlen)
2223                    .field("ifi_recvquota", &ifi_recvquota)
2224                    .field("ifi_xmitquota", &ifi_xmitquota)
2225                    .field("ifi_unused1", &ifi_unused1)
2226                    .field("ifi_mtu", &ifi_mtu)
2227                    .field("ifi_metric", &ifi_metric)
2228                    .field("ifi_baudrate", &ifi_baudrate)
2229                    .field("ifi_ipackets", &ifi_ipackets)
2230                    .field("ifi_ierrors", &ifi_ierrors)
2231                    .field("ifi_opackets", &ifi_opackets)
2232                    .field("ifi_oerrors", &ifi_oerrors)
2233                    .field("ifi_collisions", &ifi_collisions)
2234                    .field("ifi_ibytes", &ifi_ibytes)
2235                    .field("ifi_obytes", &ifi_obytes)
2236                    .field("ifi_imcasts", &ifi_imcasts)
2237                    .field("ifi_omcasts", &ifi_omcasts)
2238                    .field("ifi_iqdrops", &ifi_iqdrops)
2239                    .field("ifi_noproto", &ifi_noproto)
2240                    .field("ifi_recvtiming", &ifi_recvtiming)
2241                    .field("ifi_xmittiming", &ifi_xmittiming)
2242                    .field("ifi_lastchange", &ifi_lastchange)
2243                    .finish()
2244            }
2245        }
2246        impl ::hash::Hash for if_data64 {
2247            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
2248                let ifi_type = self.ifi_type;
2249                let ifi_typelen = self.ifi_typelen;
2250                let ifi_physical = self.ifi_physical;
2251                let ifi_addrlen = self.ifi_addrlen;
2252                let ifi_hdrlen = self.ifi_hdrlen;
2253                let ifi_recvquota = self.ifi_recvquota;
2254                let ifi_xmitquota = self.ifi_xmitquota;
2255                let ifi_unused1 = self.ifi_unused1;
2256                let ifi_mtu = self.ifi_mtu;
2257                let ifi_metric = self.ifi_metric;
2258                let ifi_baudrate = self.ifi_baudrate;
2259                let ifi_ipackets = self.ifi_ipackets;
2260                let ifi_ierrors = self.ifi_ierrors;
2261                let ifi_opackets = self.ifi_opackets;
2262                let ifi_oerrors = self.ifi_oerrors;
2263                let ifi_collisions = self.ifi_collisions;
2264                let ifi_ibytes = self.ifi_ibytes;
2265                let ifi_obytes = self.ifi_obytes;
2266                let ifi_imcasts = self.ifi_imcasts;
2267                let ifi_omcasts = self.ifi_omcasts;
2268                let ifi_iqdrops = self.ifi_iqdrops;
2269                let ifi_noproto = self.ifi_noproto;
2270                let ifi_recvtiming = self.ifi_recvtiming;
2271                let ifi_xmittiming = self.ifi_xmittiming;
2272                let ifi_lastchange = self.ifi_lastchange;
2273                ifi_type.hash(state);
2274                ifi_typelen.hash(state);
2275                ifi_physical.hash(state);
2276                ifi_addrlen.hash(state);
2277                ifi_hdrlen.hash(state);
2278                ifi_recvquota.hash(state);
2279                ifi_xmitquota.hash(state);
2280                ifi_unused1.hash(state);
2281                ifi_mtu.hash(state);
2282                ifi_metric.hash(state);
2283                ifi_baudrate.hash(state);
2284                ifi_ipackets.hash(state);
2285                ifi_ierrors.hash(state);
2286                ifi_opackets.hash(state);
2287                ifi_oerrors.hash(state);
2288                ifi_collisions.hash(state);
2289                ifi_ibytes.hash(state);
2290                ifi_obytes.hash(state);
2291                ifi_imcasts.hash(state);
2292                ifi_omcasts.hash(state);
2293                ifi_iqdrops.hash(state);
2294                ifi_noproto.hash(state);
2295                ifi_recvtiming.hash(state);
2296                ifi_xmittiming.hash(state);
2297                ifi_lastchange.hash(state);
2298            }
2299        }
2300        impl PartialEq for if_msghdr2 {
2301            fn eq(&self, other: &if_msghdr2) -> bool {
2302                self.ifm_msglen == other.ifm_msglen &&
2303                self.ifm_version == other.ifm_version &&
2304                self.ifm_type == other.ifm_type &&
2305                self.ifm_addrs == other.ifm_addrs &&
2306                self.ifm_flags == other.ifm_flags &&
2307                self.ifm_index == other.ifm_index &&
2308                self.ifm_snd_len == other.ifm_snd_len &&
2309                self.ifm_snd_maxlen == other.ifm_snd_maxlen &&
2310                self.ifm_snd_drops == other.ifm_snd_drops &&
2311                self.ifm_timer == other.ifm_timer &&
2312                self.ifm_data == other.ifm_data
2313            }
2314        }
2315        impl Eq for if_msghdr2 {}
2316        impl ::fmt::Debug for if_msghdr2 {
2317            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2318                let ifm_msglen = self.ifm_msglen;
2319                let ifm_version = self.ifm_version;
2320                let ifm_type = self.ifm_type;
2321                let ifm_addrs = self.ifm_addrs;
2322                let ifm_flags = self.ifm_flags;
2323                let ifm_index = self.ifm_index;
2324                let ifm_snd_len = self.ifm_snd_len;
2325                let ifm_snd_maxlen = self.ifm_snd_maxlen;
2326                let ifm_snd_drops = self.ifm_snd_drops;
2327                let ifm_timer = self.ifm_timer;
2328                let ifm_data = self.ifm_data;
2329                f.debug_struct("if_msghdr2")
2330                    .field("ifm_msglen", &ifm_msglen)
2331                    .field("ifm_version", &ifm_version)
2332                    .field("ifm_type", &ifm_type)
2333                    .field("ifm_addrs", &ifm_addrs)
2334                    .field("ifm_flags", &ifm_flags)
2335                    .field("ifm_index", &ifm_index)
2336                    .field("ifm_snd_len", &ifm_snd_len)
2337                    .field("ifm_snd_maxlen", &ifm_snd_maxlen)
2338                    .field("ifm_snd_drops", &ifm_snd_drops)
2339                    .field("ifm_timer", &ifm_timer)
2340                    .field("ifm_data", &ifm_data)
2341                    .finish()
2342            }
2343        }
2344        impl ::hash::Hash for if_msghdr2 {
2345            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
2346                let ifm_msglen = self.ifm_msglen;
2347                let ifm_version = self.ifm_version;
2348                let ifm_type = self.ifm_type;
2349                let ifm_addrs = self.ifm_addrs;
2350                let ifm_flags = self.ifm_flags;
2351                let ifm_index = self.ifm_index;
2352                let ifm_snd_len = self.ifm_snd_len;
2353                let ifm_snd_maxlen = self.ifm_snd_maxlen;
2354                let ifm_snd_drops = self.ifm_snd_drops;
2355                let ifm_timer = self.ifm_timer;
2356                let ifm_data = self.ifm_data;
2357                ifm_msglen.hash(state);
2358                ifm_version.hash(state);
2359                ifm_type.hash(state);
2360                ifm_addrs.hash(state);
2361                ifm_flags.hash(state);
2362                ifm_index.hash(state);
2363                ifm_snd_len.hash(state);
2364                ifm_snd_maxlen.hash(state);
2365                ifm_snd_drops.hash(state);
2366                ifm_timer.hash(state);
2367                ifm_data.hash(state);
2368            }
2369        }
2370        impl PartialEq for vm_statistics64 {
2371            fn eq(&self, other: &vm_statistics64) -> bool {
2372                // Otherwise rustfmt crashes...
2373                let total_uncompressed = self.total_uncompressed_pages_in_compressor;
2374                self.free_count == other.free_count &&
2375                self.active_count == other.active_count &&
2376                self.inactive_count == other.inactive_count &&
2377                self.wire_count == other.wire_count &&
2378                self.zero_fill_count == other.zero_fill_count &&
2379                self.reactivations == other.reactivations &&
2380                self.pageins == other.pageins &&
2381                self.pageouts == other.pageouts &&
2382                self.faults == other.faults &&
2383                self.cow_faults == other.cow_faults &&
2384                self.lookups == other.lookups &&
2385                self.hits == other.hits &&
2386                self.purges == other.purges &&
2387                self.purgeable_count == other.purgeable_count &&
2388                self.speculative_count == other.speculative_count &&
2389                self.decompressions == other.decompressions &&
2390                self.compressions == other.compressions &&
2391                self.swapins == other.swapins &&
2392                self.swapouts == other.swapouts &&
2393                self.compressor_page_count == other.compressor_page_count &&
2394                self.throttled_count == other.throttled_count &&
2395                self.external_page_count == other.external_page_count &&
2396                self.internal_page_count == other.internal_page_count &&
2397                total_uncompressed == other.total_uncompressed_pages_in_compressor
2398            }
2399        }
2400        impl Eq for vm_statistics64 {}
2401        impl ::fmt::Debug for vm_statistics64 {
2402            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2403                let free_count = self.free_count;
2404                let active_count = self.active_count;
2405                let inactive_count = self.inactive_count;
2406                let wire_count = self.wire_count;
2407                let zero_fill_count = self.zero_fill_count;
2408                let reactivations = self.reactivations;
2409                let pageins = self.pageins;
2410                let pageouts = self.pageouts;
2411                let faults = self.faults;
2412                let cow_faults = self.cow_faults;
2413                let lookups = self.lookups;
2414                let hits = self.hits;
2415                let purges = self.purges;
2416                let purgeable_count = self.purgeable_count;
2417                let speculative_count = self.speculative_count;
2418                let decompressions = self.decompressions;
2419                let compressions = self.compressions;
2420                let swapins = self.swapins;
2421                let swapouts = self.swapouts;
2422                let compressor_page_count = self.compressor_page_count;
2423                let throttled_count = self.throttled_count;
2424                let external_page_count = self.external_page_count;
2425                let internal_page_count = self.internal_page_count;
2426                // Otherwise rustfmt crashes...
2427                let total_uncompressed = self.total_uncompressed_pages_in_compressor;
2428                f.debug_struct("vm_statistics64")
2429                    .field("free_count", &free_count)
2430                    .field("active_count", &active_count)
2431                    .field("inactive_count", &inactive_count)
2432                    .field("wire_count", &wire_count)
2433                    .field("zero_fill_count", &zero_fill_count)
2434                    .field("reactivations", &reactivations)
2435                    .field("pageins", &pageins)
2436                    .field("pageouts", &pageouts)
2437                    .field("faults", &faults)
2438                    .field("cow_faults", &cow_faults)
2439                    .field("lookups", &lookups)
2440                    .field("hits", &hits)
2441                    .field("purges", &purges)
2442                    .field("purgeable_count", &purgeable_count)
2443                    .field("speculative_count", &speculative_count)
2444                    .field("decompressions", &decompressions)
2445                    .field("compressions", &compressions)
2446                    .field("swapins", &swapins)
2447                    .field("swapouts", &swapouts)
2448                    .field("compressor_page_count", &compressor_page_count)
2449                    .field("throttled_count", &throttled_count)
2450                    .field("external_page_count", &external_page_count)
2451                    .field("internal_page_count", &internal_page_count)
2452                    .field("total_uncompressed_pages_in_compressor", &total_uncompressed)
2453                    .finish()
2454            }
2455        }
2456        impl ::hash::Hash for vm_statistics64 {
2457            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
2458                let free_count = self.free_count;
2459                let active_count = self.active_count;
2460                let inactive_count = self.inactive_count;
2461                let wire_count = self.wire_count;
2462                let zero_fill_count = self.zero_fill_count;
2463                let reactivations = self.reactivations;
2464                let pageins = self.pageins;
2465                let pageouts = self.pageouts;
2466                let faults = self.faults;
2467                let cow_faults = self.cow_faults;
2468                let lookups = self.lookups;
2469                let hits = self.hits;
2470                let purges = self.purges;
2471                let purgeable_count = self.purgeable_count;
2472                let speculative_count = self.speculative_count;
2473                let decompressions = self.decompressions;
2474                let compressions = self.compressions;
2475                let swapins = self.swapins;
2476                let swapouts = self.swapouts;
2477                let compressor_page_count = self.compressor_page_count;
2478                let throttled_count = self.throttled_count;
2479                let external_page_count = self.external_page_count;
2480                let internal_page_count = self.internal_page_count;
2481                // Otherwise rustfmt crashes...
2482                let total_uncompressed = self.total_uncompressed_pages_in_compressor;
2483                free_count.hash(state);
2484                active_count.hash(state);
2485                inactive_count.hash(state);
2486                wire_count.hash(state);
2487                zero_fill_count.hash(state);
2488                reactivations.hash(state);
2489                pageins.hash(state);
2490                pageouts.hash(state);
2491                faults.hash(state);
2492                cow_faults.hash(state);
2493                lookups.hash(state);
2494                hits.hash(state);
2495                purges.hash(state);
2496                purgeable_count.hash(state);
2497                speculative_count.hash(state);
2498                decompressions.hash(state);
2499                compressions.hash(state);
2500                swapins.hash(state);
2501                swapouts.hash(state);
2502                compressor_page_count.hash(state);
2503                throttled_count.hash(state);
2504                external_page_count.hash(state);
2505                internal_page_count.hash(state);
2506                total_uncompressed.hash(state);
2507            }
2508        }
2509
2510        impl PartialEq for mach_task_basic_info {
2511            fn eq(&self, other: &mach_task_basic_info) -> bool {
2512                self.virtual_size == other.virtual_size
2513                    && self.resident_size == other.resident_size
2514                    && self.resident_size_max == other.resident_size_max
2515                    && self.user_time == other.user_time
2516                    && self.system_time == other.system_time
2517                    && self.policy == other.policy
2518                    && self.suspend_count == other.suspend_count
2519            }
2520        }
2521        impl Eq for mach_task_basic_info {}
2522        impl ::fmt::Debug for mach_task_basic_info {
2523            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2524                let virtual_size = self.virtual_size;
2525                let resident_size = self.resident_size;
2526                let resident_size_max = self.resident_size_max;
2527                let user_time = self.user_time;
2528                let system_time = self.system_time;
2529                let policy = self.policy;
2530                let suspend_count = self.suspend_count;
2531                f.debug_struct("mach_task_basic_info")
2532                    .field("virtual_size", &virtual_size)
2533                    .field("resident_size", &resident_size)
2534                    .field("resident_size_max", &resident_size_max)
2535                    .field("user_time", &user_time)
2536                    .field("system_time", &system_time)
2537                    .field("policy", &policy)
2538                    .field("suspend_count", &suspend_count)
2539                    .finish()
2540            }
2541        }
2542        impl ::hash::Hash for mach_task_basic_info {
2543            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
2544                let virtual_size = self.virtual_size;
2545                let resident_size = self.resident_size;
2546                let resident_size_max = self.resident_size_max;
2547                let user_time = self.user_time;
2548                let system_time = self.system_time;
2549                let policy = self.policy;
2550                let suspend_count = self.suspend_count;
2551                virtual_size.hash(state);
2552                resident_size.hash(state);
2553                resident_size_max.hash(state);
2554                user_time.hash(state);
2555                system_time.hash(state);
2556                policy.hash(state);
2557                suspend_count.hash(state);
2558            }
2559        }
2560
2561        impl PartialEq for log2phys {
2562            fn eq(&self, other: &log2phys) -> bool {
2563                self.l2p_flags == other.l2p_flags
2564                    && self.l2p_contigbytes == other.l2p_contigbytes
2565                    && self.l2p_devoffset == other.l2p_devoffset
2566            }
2567        }
2568        impl Eq for log2phys {}
2569        impl ::fmt::Debug for log2phys {
2570            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2571                let l2p_flags = self.l2p_flags;
2572                let l2p_contigbytes = self.l2p_contigbytes;
2573                let l2p_devoffset = self.l2p_devoffset;
2574                f.debug_struct("log2phys")
2575                    .field("l2p_flags", &l2p_flags)
2576                    .field("l2p_contigbytes", &l2p_contigbytes)
2577                    .field("l2p_devoffset", &l2p_devoffset)
2578                    .finish()
2579            }
2580        }
2581        impl ::hash::Hash for log2phys {
2582            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
2583                let l2p_flags = self.l2p_flags;
2584                let l2p_contigbytes = self.l2p_contigbytes;
2585                let l2p_devoffset = self.l2p_devoffset;
2586                l2p_flags.hash(state);
2587                l2p_contigbytes.hash(state);
2588                l2p_devoffset.hash(state);
2589            }
2590        }
2591        impl PartialEq for os_unfair_lock {
2592            fn eq(&self, other: &os_unfair_lock) -> bool {
2593                self._os_unfair_lock_opaque == other._os_unfair_lock_opaque
2594            }
2595        }
2596
2597        impl Eq for os_unfair_lock {}
2598
2599        impl ::fmt::Debug for os_unfair_lock {
2600            fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
2601                f.debug_struct("os_unfair_lock")
2602                    .field("_os_unfair_lock_opaque", &self._os_unfair_lock_opaque)
2603                    .finish()
2604            }
2605        }
2606
2607        impl ::hash::Hash for os_unfair_lock {
2608            fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
2609                self._os_unfair_lock_opaque.hash(state);
2610            }
2611        }
2612    }
2613}
2614
2615pub const _UTX_USERSIZE: usize = 256;
2616pub const _UTX_LINESIZE: usize = 32;
2617pub const _UTX_IDSIZE: usize = 4;
2618pub const _UTX_HOSTSIZE: usize = 256;
2619
2620pub const EMPTY: ::c_short = 0;
2621pub const RUN_LVL: ::c_short = 1;
2622pub const BOOT_TIME: ::c_short = 2;
2623pub const OLD_TIME: ::c_short = 3;
2624pub const NEW_TIME: ::c_short = 4;
2625pub const INIT_PROCESS: ::c_short = 5;
2626pub const LOGIN_PROCESS: ::c_short = 6;
2627pub const USER_PROCESS: ::c_short = 7;
2628pub const DEAD_PROCESS: ::c_short = 8;
2629pub const ACCOUNTING: ::c_short = 9;
2630pub const SIGNATURE: ::c_short = 10;
2631pub const SHUTDOWN_TIME: ::c_short = 11;
2632
2633pub const LC_COLLATE_MASK: ::c_int = 1 << 0;
2634pub const LC_CTYPE_MASK: ::c_int = 1 << 1;
2635pub const LC_MESSAGES_MASK: ::c_int = 1 << 2;
2636pub const LC_MONETARY_MASK: ::c_int = 1 << 3;
2637pub const LC_NUMERIC_MASK: ::c_int = 1 << 4;
2638pub const LC_TIME_MASK: ::c_int = 1 << 5;
2639pub const LC_ALL_MASK: ::c_int = LC_COLLATE_MASK
2640    | LC_CTYPE_MASK
2641    | LC_MESSAGES_MASK
2642    | LC_MONETARY_MASK
2643    | LC_NUMERIC_MASK
2644    | LC_TIME_MASK;
2645
2646pub const CODESET: ::nl_item = 0;
2647pub const D_T_FMT: ::nl_item = 1;
2648pub const D_FMT: ::nl_item = 2;
2649pub const T_FMT: ::nl_item = 3;
2650pub const T_FMT_AMPM: ::nl_item = 4;
2651pub const AM_STR: ::nl_item = 5;
2652pub const PM_STR: ::nl_item = 6;
2653
2654pub const DAY_1: ::nl_item = 7;
2655pub const DAY_2: ::nl_item = 8;
2656pub const DAY_3: ::nl_item = 9;
2657pub const DAY_4: ::nl_item = 10;
2658pub const DAY_5: ::nl_item = 11;
2659pub const DAY_6: ::nl_item = 12;
2660pub const DAY_7: ::nl_item = 13;
2661
2662pub const ABDAY_1: ::nl_item = 14;
2663pub const ABDAY_2: ::nl_item = 15;
2664pub const ABDAY_3: ::nl_item = 16;
2665pub const ABDAY_4: ::nl_item = 17;
2666pub const ABDAY_5: ::nl_item = 18;
2667pub const ABDAY_6: ::nl_item = 19;
2668pub const ABDAY_7: ::nl_item = 20;
2669
2670pub const MON_1: ::nl_item = 21;
2671pub const MON_2: ::nl_item = 22;
2672pub const MON_3: ::nl_item = 23;
2673pub const MON_4: ::nl_item = 24;
2674pub const MON_5: ::nl_item = 25;
2675pub const MON_6: ::nl_item = 26;
2676pub const MON_7: ::nl_item = 27;
2677pub const MON_8: ::nl_item = 28;
2678pub const MON_9: ::nl_item = 29;
2679pub const MON_10: ::nl_item = 30;
2680pub const MON_11: ::nl_item = 31;
2681pub const MON_12: ::nl_item = 32;
2682
2683pub const ABMON_1: ::nl_item = 33;
2684pub const ABMON_2: ::nl_item = 34;
2685pub const ABMON_3: ::nl_item = 35;
2686pub const ABMON_4: ::nl_item = 36;
2687pub const ABMON_5: ::nl_item = 37;
2688pub const ABMON_6: ::nl_item = 38;
2689pub const ABMON_7: ::nl_item = 39;
2690pub const ABMON_8: ::nl_item = 40;
2691pub const ABMON_9: ::nl_item = 41;
2692pub const ABMON_10: ::nl_item = 42;
2693pub const ABMON_11: ::nl_item = 43;
2694pub const ABMON_12: ::nl_item = 44;
2695
2696pub const CLOCK_REALTIME: ::clockid_t = 0;
2697pub const CLOCK_MONOTONIC_RAW: ::clockid_t = 4;
2698pub const CLOCK_MONOTONIC_RAW_APPROX: ::clockid_t = 5;
2699pub const CLOCK_MONOTONIC: ::clockid_t = 6;
2700pub const CLOCK_UPTIME_RAW: ::clockid_t = 8;
2701pub const CLOCK_UPTIME_RAW_APPROX: ::clockid_t = 9;
2702pub const CLOCK_PROCESS_CPUTIME_ID: ::clockid_t = 12;
2703pub const CLOCK_THREAD_CPUTIME_ID: ::clockid_t = 16;
2704
2705pub const ERA: ::nl_item = 45;
2706pub const ERA_D_FMT: ::nl_item = 46;
2707pub const ERA_D_T_FMT: ::nl_item = 47;
2708pub const ERA_T_FMT: ::nl_item = 48;
2709pub const ALT_DIGITS: ::nl_item = 49;
2710
2711pub const RADIXCHAR: ::nl_item = 50;
2712pub const THOUSEP: ::nl_item = 51;
2713
2714pub const YESEXPR: ::nl_item = 52;
2715pub const NOEXPR: ::nl_item = 53;
2716
2717pub const YESSTR: ::nl_item = 54;
2718pub const NOSTR: ::nl_item = 55;
2719
2720pub const CRNCYSTR: ::nl_item = 56;
2721
2722pub const D_MD_ORDER: ::nl_item = 57;
2723
2724pub const EXIT_FAILURE: ::c_int = 1;
2725pub const EXIT_SUCCESS: ::c_int = 0;
2726pub const RAND_MAX: ::c_int = 2147483647;
2727pub const EOF: ::c_int = -1;
2728pub const SEEK_SET: ::c_int = 0;
2729pub const SEEK_CUR: ::c_int = 1;
2730pub const SEEK_END: ::c_int = 2;
2731pub const SEEK_HOLE: ::c_int = 3;
2732pub const SEEK_DATA: ::c_int = 4;
2733pub const _IOFBF: ::c_int = 0;
2734pub const _IONBF: ::c_int = 2;
2735pub const _IOLBF: ::c_int = 1;
2736pub const BUFSIZ: ::c_uint = 1024;
2737pub const FOPEN_MAX: ::c_uint = 20;
2738pub const FILENAME_MAX: ::c_uint = 1024;
2739pub const L_tmpnam: ::c_uint = 1024;
2740pub const TMP_MAX: ::c_uint = 308915776;
2741pub const _PC_LINK_MAX: ::c_int = 1;
2742pub const _PC_MAX_CANON: ::c_int = 2;
2743pub const _PC_MAX_INPUT: ::c_int = 3;
2744pub const _PC_NAME_MAX: ::c_int = 4;
2745pub const _PC_PATH_MAX: ::c_int = 5;
2746pub const _PC_PIPE_BUF: ::c_int = 6;
2747pub const _PC_CHOWN_RESTRICTED: ::c_int = 7;
2748pub const _PC_NO_TRUNC: ::c_int = 8;
2749pub const _PC_VDISABLE: ::c_int = 9;
2750pub const O_EVTONLY: ::c_int = 0x00008000;
2751pub const O_NOCTTY: ::c_int = 0x00020000;
2752pub const O_DIRECTORY: ::c_int = 0x00100000;
2753pub const O_SYMLINK: ::c_int = 0x00200000;
2754pub const O_DSYNC: ::c_int = 0x00400000;
2755pub const O_CLOEXEC: ::c_int = 0x01000000;
2756pub const O_NOFOLLOW_ANY: ::c_int = 0x20000000;
2757pub const S_IFIFO: mode_t = 4096;
2758pub const S_IFCHR: mode_t = 8192;
2759pub const S_IFBLK: mode_t = 24576;
2760pub const S_IFDIR: mode_t = 16384;
2761pub const S_IFREG: mode_t = 32768;
2762pub const S_IFLNK: mode_t = 40960;
2763pub const S_IFSOCK: mode_t = 49152;
2764pub const S_IFMT: mode_t = 61440;
2765pub const S_IEXEC: mode_t = 64;
2766pub const S_IWRITE: mode_t = 128;
2767pub const S_IREAD: mode_t = 256;
2768pub const S_IRWXU: mode_t = 448;
2769pub const S_IXUSR: mode_t = 64;
2770pub const S_IWUSR: mode_t = 128;
2771pub const S_IRUSR: mode_t = 256;
2772pub const S_IRWXG: mode_t = 56;
2773pub const S_IXGRP: mode_t = 8;
2774pub const S_IWGRP: mode_t = 16;
2775pub const S_IRGRP: mode_t = 32;
2776pub const S_IRWXO: mode_t = 7;
2777pub const S_IXOTH: mode_t = 1;
2778pub const S_IWOTH: mode_t = 2;
2779pub const S_IROTH: mode_t = 4;
2780pub const F_OK: ::c_int = 0;
2781pub const R_OK: ::c_int = 4;
2782pub const W_OK: ::c_int = 2;
2783pub const X_OK: ::c_int = 1;
2784pub const STDIN_FILENO: ::c_int = 0;
2785pub const STDOUT_FILENO: ::c_int = 1;
2786pub const STDERR_FILENO: ::c_int = 2;
2787pub const F_LOCK: ::c_int = 1;
2788pub const F_TEST: ::c_int = 3;
2789pub const F_TLOCK: ::c_int = 2;
2790pub const F_ULOCK: ::c_int = 0;
2791pub const F_GETLK: ::c_int = 7;
2792pub const F_SETLK: ::c_int = 8;
2793pub const F_SETLKW: ::c_int = 9;
2794pub const SIGHUP: ::c_int = 1;
2795pub const SIGINT: ::c_int = 2;
2796pub const SIGQUIT: ::c_int = 3;
2797pub const SIGILL: ::c_int = 4;
2798pub const SIGABRT: ::c_int = 6;
2799pub const SIGEMT: ::c_int = 7;
2800pub const SIGFPE: ::c_int = 8;
2801pub const SIGKILL: ::c_int = 9;
2802pub const SIGSEGV: ::c_int = 11;
2803pub const SIGPIPE: ::c_int = 13;
2804pub const SIGALRM: ::c_int = 14;
2805pub const SIGTERM: ::c_int = 15;
2806
2807pub const PROT_NONE: ::c_int = 0;
2808pub const PROT_READ: ::c_int = 1;
2809pub const PROT_WRITE: ::c_int = 2;
2810pub const PROT_EXEC: ::c_int = 4;
2811
2812pub const PT_TRACE_ME: ::c_int = 0;
2813pub const PT_READ_I: ::c_int = 1;
2814pub const PT_READ_D: ::c_int = 2;
2815pub const PT_READ_U: ::c_int = 3;
2816pub const PT_WRITE_I: ::c_int = 4;
2817pub const PT_WRITE_D: ::c_int = 5;
2818pub const PT_WRITE_U: ::c_int = 6;
2819pub const PT_CONTINUE: ::c_int = 7;
2820pub const PT_KILL: ::c_int = 8;
2821pub const PT_STEP: ::c_int = 9;
2822pub const PT_ATTACH: ::c_int = 10;
2823pub const PT_DETACH: ::c_int = 11;
2824pub const PT_SIGEXC: ::c_int = 12;
2825pub const PT_THUPDATE: ::c_int = 13;
2826pub const PT_ATTACHEXC: ::c_int = 14;
2827
2828pub const PT_FORCEQUOTA: ::c_int = 30;
2829pub const PT_DENY_ATTACH: ::c_int = 31;
2830pub const PT_FIRSTMACH: ::c_int = 32;
2831
2832pub const MAP_FILE: ::c_int = 0x0000;
2833pub const MAP_SHARED: ::c_int = 0x0001;
2834pub const MAP_PRIVATE: ::c_int = 0x0002;
2835pub const MAP_FIXED: ::c_int = 0x0010;
2836pub const MAP_ANON: ::c_int = 0x1000;
2837pub const MAP_ANONYMOUS: ::c_int = MAP_ANON;
2838
2839pub const CPU_STATE_USER: ::c_int = 0;
2840pub const CPU_STATE_SYSTEM: ::c_int = 1;
2841pub const CPU_STATE_IDLE: ::c_int = 2;
2842pub const CPU_STATE_NICE: ::c_int = 3;
2843pub const CPU_STATE_MAX: ::c_int = 4;
2844
2845pub const PROCESSOR_BASIC_INFO: ::c_int = 1;
2846pub const PROCESSOR_CPU_LOAD_INFO: ::c_int = 2;
2847pub const PROCESSOR_PM_REGS_INFO: ::c_int = 0x10000001;
2848pub const PROCESSOR_TEMPERATURE: ::c_int = 0x10000002;
2849pub const PROCESSOR_SET_LOAD_INFO: ::c_int = 4;
2850pub const PROCESSOR_SET_BASIC_INFO: ::c_int = 5;
2851
2852deprecated_mach! {
2853    pub const VM_FLAGS_FIXED: ::c_int = 0x0000;
2854    pub const VM_FLAGS_ANYWHERE: ::c_int = 0x0001;
2855    pub const VM_FLAGS_PURGABLE: ::c_int = 0x0002;
2856    pub const VM_FLAGS_RANDOM_ADDR: ::c_int = 0x0008;
2857    pub const VM_FLAGS_NO_CACHE: ::c_int = 0x0010;
2858    pub const VM_FLAGS_RESILIENT_CODESIGN: ::c_int = 0x0020;
2859    pub const VM_FLAGS_RESILIENT_MEDIA: ::c_int = 0x0040;
2860    pub const VM_FLAGS_OVERWRITE: ::c_int = 0x4000;
2861    pub const VM_FLAGS_SUPERPAGE_MASK: ::c_int = 0x70000;
2862    pub const VM_FLAGS_RETURN_DATA_ADDR: ::c_int = 0x100000;
2863    pub const VM_FLAGS_RETURN_4K_DATA_ADDR: ::c_int = 0x800000;
2864    pub const VM_FLAGS_ALIAS_MASK: ::c_int = 0xFF000000;
2865    pub const VM_FLAGS_USER_ALLOCATE: ::c_int = 0xff07401f;
2866    pub const VM_FLAGS_USER_MAP: ::c_int = 0xff97401f;
2867    pub const VM_FLAGS_USER_REMAP: ::c_int = VM_FLAGS_FIXED |
2868                                             VM_FLAGS_ANYWHERE |
2869                                             VM_FLAGS_RANDOM_ADDR |
2870                                             VM_FLAGS_OVERWRITE |
2871                                             VM_FLAGS_RETURN_DATA_ADDR |
2872                                             VM_FLAGS_RESILIENT_CODESIGN;
2873
2874    pub const VM_FLAGS_SUPERPAGE_SHIFT: ::c_int = 16;
2875    pub const SUPERPAGE_NONE: ::c_int = 0;
2876    pub const SUPERPAGE_SIZE_ANY: ::c_int = 1;
2877    pub const VM_FLAGS_SUPERPAGE_NONE: ::c_int = SUPERPAGE_NONE <<
2878                                                 VM_FLAGS_SUPERPAGE_SHIFT;
2879    pub const VM_FLAGS_SUPERPAGE_SIZE_ANY: ::c_int = SUPERPAGE_SIZE_ANY <<
2880                                                     VM_FLAGS_SUPERPAGE_SHIFT;
2881    pub const SUPERPAGE_SIZE_2MB: ::c_int = 2;
2882    pub const VM_FLAGS_SUPERPAGE_SIZE_2MB: ::c_int = SUPERPAGE_SIZE_2MB <<
2883                                                     VM_FLAGS_SUPERPAGE_SHIFT;
2884
2885    pub const VM_MEMORY_MALLOC: ::c_int = 1;
2886    pub const VM_MEMORY_MALLOC_SMALL: ::c_int = 2;
2887    pub const VM_MEMORY_MALLOC_LARGE: ::c_int = 3;
2888    pub const VM_MEMORY_MALLOC_HUGE: ::c_int = 4;
2889    pub const VM_MEMORY_SBRK: ::c_int = 5;
2890    pub const VM_MEMORY_REALLOC: ::c_int = 6;
2891    pub const VM_MEMORY_MALLOC_TINY: ::c_int = 7;
2892    pub const VM_MEMORY_MALLOC_LARGE_REUSABLE: ::c_int = 8;
2893    pub const VM_MEMORY_MALLOC_LARGE_REUSED: ::c_int = 9;
2894    pub const VM_MEMORY_ANALYSIS_TOOL: ::c_int = 10;
2895    pub const VM_MEMORY_MALLOC_NANO: ::c_int = 11;
2896    pub const VM_MEMORY_MACH_MSG: ::c_int = 20;
2897    pub const VM_MEMORY_IOKIT: ::c_int = 21;
2898    pub const VM_MEMORY_STACK: ::c_int = 30;
2899    pub const VM_MEMORY_GUARD: ::c_int = 31;
2900    pub const VM_MEMORY_SHARED_PMAP: ::c_int = 32;
2901    pub const VM_MEMORY_DYLIB: ::c_int = 33;
2902    pub const VM_MEMORY_OBJC_DISPATCHERS: ::c_int = 34;
2903    pub const VM_MEMORY_UNSHARED_PMAP: ::c_int = 35;
2904    pub const VM_MEMORY_APPKIT: ::c_int = 40;
2905    pub const VM_MEMORY_FOUNDATION: ::c_int = 41;
2906    pub const VM_MEMORY_COREGRAPHICS: ::c_int = 42;
2907    pub const VM_MEMORY_CORESERVICES: ::c_int = 43;
2908    pub const VM_MEMORY_CARBON: ::c_int = VM_MEMORY_CORESERVICES;
2909    pub const VM_MEMORY_JAVA: ::c_int = 44;
2910    pub const VM_MEMORY_COREDATA: ::c_int = 45;
2911    pub const VM_MEMORY_COREDATA_OBJECTIDS: ::c_int = 46;
2912    pub const VM_MEMORY_ATS: ::c_int = 50;
2913    pub const VM_MEMORY_LAYERKIT: ::c_int = 51;
2914    pub const VM_MEMORY_CGIMAGE: ::c_int = 52;
2915    pub const VM_MEMORY_TCMALLOC: ::c_int = 53;
2916    pub const VM_MEMORY_COREGRAPHICS_DATA: ::c_int = 54;
2917    pub const VM_MEMORY_COREGRAPHICS_SHARED: ::c_int = 55;
2918    pub const VM_MEMORY_COREGRAPHICS_FRAMEBUFFERS: ::c_int = 56;
2919    pub const VM_MEMORY_COREGRAPHICS_BACKINGSTORES: ::c_int = 57;
2920    pub const VM_MEMORY_COREGRAPHICS_XALLOC: ::c_int = 58;
2921    pub const VM_MEMORY_COREGRAPHICS_MISC: ::c_int = VM_MEMORY_COREGRAPHICS;
2922    pub const VM_MEMORY_DYLD: ::c_int = 60;
2923    pub const VM_MEMORY_DYLD_MALLOC: ::c_int = 61;
2924    pub const VM_MEMORY_SQLITE: ::c_int = 62;
2925    pub const VM_MEMORY_JAVASCRIPT_CORE: ::c_int = 63;
2926    pub const VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR: ::c_int = 64;
2927    pub const VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE: ::c_int = 65;
2928    pub const VM_MEMORY_GLSL: ::c_int = 66;
2929    pub const VM_MEMORY_OPENCL: ::c_int = 67;
2930    pub const VM_MEMORY_COREIMAGE: ::c_int = 68;
2931    pub const VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS: ::c_int = 69;
2932    pub const VM_MEMORY_IMAGEIO: ::c_int = 70;
2933    pub const VM_MEMORY_COREPROFILE: ::c_int = 71;
2934    pub const VM_MEMORY_ASSETSD: ::c_int = 72;
2935    pub const VM_MEMORY_OS_ALLOC_ONCE: ::c_int = 73;
2936    pub const VM_MEMORY_LIBDISPATCH: ::c_int = 74;
2937    pub const VM_MEMORY_ACCELERATE: ::c_int = 75;
2938    pub const VM_MEMORY_COREUI: ::c_int = 76;
2939    pub const VM_MEMORY_COREUIFILE: ::c_int = 77;
2940    pub const VM_MEMORY_GENEALOGY: ::c_int = 78;
2941    pub const VM_MEMORY_RAWCAMERA: ::c_int = 79;
2942    pub const VM_MEMORY_CORPSEINFO: ::c_int = 80;
2943    pub const VM_MEMORY_ASL: ::c_int = 81;
2944    pub const VM_MEMORY_SWIFT_RUNTIME: ::c_int = 82;
2945    pub const VM_MEMORY_SWIFT_METADATA: ::c_int = 83;
2946    pub const VM_MEMORY_DHMM: ::c_int = 84;
2947    pub const VM_MEMORY_SCENEKIT: ::c_int = 86;
2948    pub const VM_MEMORY_SKYWALK: ::c_int = 87;
2949    pub const VM_MEMORY_APPLICATION_SPECIFIC_1: ::c_int = 240;
2950    pub const VM_MEMORY_APPLICATION_SPECIFIC_16: ::c_int = 255;
2951}
2952
2953pub const MAP_FAILED: *mut ::c_void = !0 as *mut ::c_void;
2954
2955pub const MCL_CURRENT: ::c_int = 0x0001;
2956pub const MCL_FUTURE: ::c_int = 0x0002;
2957
2958pub const MS_ASYNC: ::c_int = 0x0001;
2959pub const MS_INVALIDATE: ::c_int = 0x0002;
2960pub const MS_SYNC: ::c_int = 0x0010;
2961
2962pub const MS_KILLPAGES: ::c_int = 0x0004;
2963pub const MS_DEACTIVATE: ::c_int = 0x0008;
2964
2965pub const EPERM: ::c_int = 1;
2966pub const ENOENT: ::c_int = 2;
2967pub const ESRCH: ::c_int = 3;
2968pub const EINTR: ::c_int = 4;
2969pub const EIO: ::c_int = 5;
2970pub const ENXIO: ::c_int = 6;
2971pub const E2BIG: ::c_int = 7;
2972pub const ENOEXEC: ::c_int = 8;
2973pub const EBADF: ::c_int = 9;
2974pub const ECHILD: ::c_int = 10;
2975pub const EDEADLK: ::c_int = 11;
2976pub const ENOMEM: ::c_int = 12;
2977pub const EACCES: ::c_int = 13;
2978pub const EFAULT: ::c_int = 14;
2979pub const ENOTBLK: ::c_int = 15;
2980pub const EBUSY: ::c_int = 16;
2981pub const EEXIST: ::c_int = 17;
2982pub const EXDEV: ::c_int = 18;
2983pub const ENODEV: ::c_int = 19;
2984pub const ENOTDIR: ::c_int = 20;
2985pub const EISDIR: ::c_int = 21;
2986pub const EINVAL: ::c_int = 22;
2987pub const ENFILE: ::c_int = 23;
2988pub const EMFILE: ::c_int = 24;
2989pub const ENOTTY: ::c_int = 25;
2990pub const ETXTBSY: ::c_int = 26;
2991pub const EFBIG: ::c_int = 27;
2992pub const ENOSPC: ::c_int = 28;
2993pub const ESPIPE: ::c_int = 29;
2994pub const EROFS: ::c_int = 30;
2995pub const EMLINK: ::c_int = 31;
2996pub const EPIPE: ::c_int = 32;
2997pub const EDOM: ::c_int = 33;
2998pub const ERANGE: ::c_int = 34;
2999pub const EAGAIN: ::c_int = 35;
3000pub const EWOULDBLOCK: ::c_int = EAGAIN;
3001pub const EINPROGRESS: ::c_int = 36;
3002pub const EALREADY: ::c_int = 37;
3003pub const ENOTSOCK: ::c_int = 38;
3004pub const EDESTADDRREQ: ::c_int = 39;
3005pub const EMSGSIZE: ::c_int = 40;
3006pub const EPROTOTYPE: ::c_int = 41;
3007pub const ENOPROTOOPT: ::c_int = 42;
3008pub const EPROTONOSUPPORT: ::c_int = 43;
3009pub const ESOCKTNOSUPPORT: ::c_int = 44;
3010pub const ENOTSUP: ::c_int = 45;
3011pub const EPFNOSUPPORT: ::c_int = 46;
3012pub const EAFNOSUPPORT: ::c_int = 47;
3013pub const EADDRINUSE: ::c_int = 48;
3014pub const EADDRNOTAVAIL: ::c_int = 49;
3015pub const ENETDOWN: ::c_int = 50;
3016pub const ENETUNREACH: ::c_int = 51;
3017pub const ENETRESET: ::c_int = 52;
3018pub const ECONNABORTED: ::c_int = 53;
3019pub const ECONNRESET: ::c_int = 54;
3020pub const ENOBUFS: ::c_int = 55;
3021pub const EISCONN: ::c_int = 56;
3022pub const ENOTCONN: ::c_int = 57;
3023pub const ESHUTDOWN: ::c_int = 58;
3024pub const ETOOMANYREFS: ::c_int = 59;
3025pub const ETIMEDOUT: ::c_int = 60;
3026pub const ECONNREFUSED: ::c_int = 61;
3027pub const ELOOP: ::c_int = 62;
3028pub const ENAMETOOLONG: ::c_int = 63;
3029pub const EHOSTDOWN: ::c_int = 64;
3030pub const EHOSTUNREACH: ::c_int = 65;
3031pub const ENOTEMPTY: ::c_int = 66;
3032pub const EPROCLIM: ::c_int = 67;
3033pub const EUSERS: ::c_int = 68;
3034pub const EDQUOT: ::c_int = 69;
3035pub const ESTALE: ::c_int = 70;
3036pub const EREMOTE: ::c_int = 71;
3037pub const EBADRPC: ::c_int = 72;
3038pub const ERPCMISMATCH: ::c_int = 73;
3039pub const EPROGUNAVAIL: ::c_int = 74;
3040pub const EPROGMISMATCH: ::c_int = 75;
3041pub const EPROCUNAVAIL: ::c_int = 76;
3042pub const ENOLCK: ::c_int = 77;
3043pub const ENOSYS: ::c_int = 78;
3044pub const EFTYPE: ::c_int = 79;
3045pub const EAUTH: ::c_int = 80;
3046pub const ENEEDAUTH: ::c_int = 81;
3047pub const EPWROFF: ::c_int = 82;
3048pub const EDEVERR: ::c_int = 83;
3049pub const EOVERFLOW: ::c_int = 84;
3050pub const EBADEXEC: ::c_int = 85;
3051pub const EBADARCH: ::c_int = 86;
3052pub const ESHLIBVERS: ::c_int = 87;
3053pub const EBADMACHO: ::c_int = 88;
3054pub const ECANCELED: ::c_int = 89;
3055pub const EIDRM: ::c_int = 90;
3056pub const ENOMSG: ::c_int = 91;
3057pub const EILSEQ: ::c_int = 92;
3058pub const ENOATTR: ::c_int = 93;
3059pub const EBADMSG: ::c_int = 94;
3060pub const EMULTIHOP: ::c_int = 95;
3061pub const ENODATA: ::c_int = 96;
3062pub const ENOLINK: ::c_int = 97;
3063pub const ENOSR: ::c_int = 98;
3064pub const ENOSTR: ::c_int = 99;
3065pub const EPROTO: ::c_int = 100;
3066pub const ETIME: ::c_int = 101;
3067pub const EOPNOTSUPP: ::c_int = 102;
3068pub const ENOPOLICY: ::c_int = 103;
3069pub const ENOTRECOVERABLE: ::c_int = 104;
3070pub const EOWNERDEAD: ::c_int = 105;
3071pub const EQFULL: ::c_int = 106;
3072pub const ELAST: ::c_int = 106;
3073
3074pub const EAI_AGAIN: ::c_int = 2;
3075pub const EAI_BADFLAGS: ::c_int = 3;
3076pub const EAI_FAIL: ::c_int = 4;
3077pub const EAI_FAMILY: ::c_int = 5;
3078pub const EAI_MEMORY: ::c_int = 6;
3079pub const EAI_NODATA: ::c_int = 7;
3080pub const EAI_NONAME: ::c_int = 8;
3081pub const EAI_SERVICE: ::c_int = 9;
3082pub const EAI_SOCKTYPE: ::c_int = 10;
3083pub const EAI_SYSTEM: ::c_int = 11;
3084pub const EAI_OVERFLOW: ::c_int = 14;
3085
3086pub const F_DUPFD: ::c_int = 0;
3087pub const F_DUPFD_CLOEXEC: ::c_int = 67;
3088pub const F_GETFD: ::c_int = 1;
3089pub const F_SETFD: ::c_int = 2;
3090pub const F_GETFL: ::c_int = 3;
3091pub const F_SETFL: ::c_int = 4;
3092pub const F_PREALLOCATE: ::c_int = 42;
3093pub const F_RDADVISE: ::c_int = 44;
3094pub const F_RDAHEAD: ::c_int = 45;
3095pub const F_NOCACHE: ::c_int = 48;
3096pub const F_LOG2PHYS: ::c_int = 49;
3097pub const F_GETPATH: ::c_int = 50;
3098pub const F_FULLFSYNC: ::c_int = 51;
3099pub const F_FREEZE_FS: ::c_int = 53;
3100pub const F_THAW_FS: ::c_int = 54;
3101pub const F_GLOBAL_NOCACHE: ::c_int = 55;
3102pub const F_NODIRECT: ::c_int = 62;
3103pub const F_LOG2PHYS_EXT: ::c_int = 65;
3104pub const F_BARRIERFSYNC: ::c_int = 85;
3105pub const F_GETPATH_NOFIRMLINK: ::c_int = 102;
3106
3107pub const F_ALLOCATECONTIG: ::c_uint = 0x02;
3108pub const F_ALLOCATEALL: ::c_uint = 0x04;
3109
3110pub const F_PEOFPOSMODE: ::c_int = 3;
3111pub const F_VOLPOSMODE: ::c_int = 4;
3112
3113pub const AT_FDCWD: ::c_int = -2;
3114pub const AT_EACCESS: ::c_int = 0x0010;
3115pub const AT_SYMLINK_NOFOLLOW: ::c_int = 0x0020;
3116pub const AT_SYMLINK_FOLLOW: ::c_int = 0x0040;
3117pub const AT_REMOVEDIR: ::c_int = 0x0080;
3118
3119pub const PTHREAD_INTROSPECTION_THREAD_CREATE: ::c_uint = 1;
3120pub const PTHREAD_INTROSPECTION_THREAD_START: ::c_uint = 2;
3121pub const PTHREAD_INTROSPECTION_THREAD_TERMINATE: ::c_uint = 3;
3122pub const PTHREAD_INTROSPECTION_THREAD_DESTROY: ::c_uint = 4;
3123
3124pub const TIOCMODG: ::c_ulong = 0x40047403;
3125pub const TIOCMODS: ::c_ulong = 0x80047404;
3126pub const TIOCM_LE: ::c_int = 0x1;
3127pub const TIOCM_DTR: ::c_int = 0x2;
3128pub const TIOCM_RTS: ::c_int = 0x4;
3129pub const TIOCM_ST: ::c_int = 0x8;
3130pub const TIOCM_SR: ::c_int = 0x10;
3131pub const TIOCM_CTS: ::c_int = 0x20;
3132pub const TIOCM_CAR: ::c_int = 0x40;
3133pub const TIOCM_CD: ::c_int = 0x40;
3134pub const TIOCM_RNG: ::c_int = 0x80;
3135pub const TIOCM_RI: ::c_int = 0x80;
3136pub const TIOCM_DSR: ::c_int = 0x100;
3137pub const TIOCEXCL: ::c_int = 0x2000740d;
3138pub const TIOCNXCL: ::c_int = 0x2000740e;
3139pub const TIOCFLUSH: ::c_ulong = 0x80047410;
3140pub const TIOCGETD: ::c_ulong = 0x4004741a;
3141pub const TIOCSETD: ::c_ulong = 0x8004741b;
3142pub const TIOCIXON: ::c_uint = 0x20007481;
3143pub const TIOCIXOFF: ::c_uint = 0x20007480;
3144pub const TIOCSDTR: ::c_uint = 0x20007479;
3145pub const TIOCCDTR: ::c_uint = 0x20007478;
3146pub const TIOCGPGRP: ::c_ulong = 0x40047477;
3147pub const TIOCSPGRP: ::c_ulong = 0x80047476;
3148pub const TIOCOUTQ: ::c_ulong = 0x40047473;
3149pub const TIOCSTI: ::c_ulong = 0x80017472;
3150pub const TIOCNOTTY: ::c_uint = 0x20007471;
3151pub const TIOCPKT: ::c_ulong = 0x80047470;
3152pub const TIOCPKT_DATA: ::c_int = 0x0;
3153pub const TIOCPKT_FLUSHREAD: ::c_int = 0x1;
3154pub const TIOCPKT_FLUSHWRITE: ::c_int = 0x2;
3155pub const TIOCPKT_STOP: ::c_int = 0x4;
3156pub const TIOCPKT_START: ::c_int = 0x8;
3157pub const TIOCPKT_NOSTOP: ::c_int = 0x10;
3158pub const TIOCPKT_DOSTOP: ::c_int = 0x20;
3159pub const TIOCPKT_IOCTL: ::c_int = 0x40;
3160pub const TIOCSTOP: ::c_uint = 0x2000746f;
3161pub const TIOCSTART: ::c_uint = 0x2000746e;
3162pub const TIOCMSET: ::c_ulong = 0x8004746d;
3163pub const TIOCMBIS: ::c_ulong = 0x8004746c;
3164pub const TIOCMBIC: ::c_ulong = 0x8004746b;
3165pub const TIOCMGET: ::c_ulong = 0x4004746a;
3166pub const TIOCREMOTE: ::c_ulong = 0x80047469;
3167pub const TIOCGWINSZ: ::c_ulong = 0x40087468;
3168pub const TIOCSWINSZ: ::c_ulong = 0x80087467;
3169pub const TIOCUCNTL: ::c_ulong = 0x80047466;
3170pub const TIOCSTAT: ::c_uint = 0x20007465;
3171pub const TIOCSCONS: ::c_uint = 0x20007463;
3172pub const TIOCCONS: ::c_ulong = 0x80047462;
3173pub const TIOCSCTTY: ::c_uint = 0x20007461;
3174pub const TIOCEXT: ::c_ulong = 0x80047460;
3175pub const TIOCSIG: ::c_uint = 0x2000745f;
3176pub const TIOCDRAIN: ::c_uint = 0x2000745e;
3177pub const TIOCMSDTRWAIT: ::c_ulong = 0x8004745b;
3178pub const TIOCMGDTRWAIT: ::c_ulong = 0x4004745a;
3179pub const TIOCSDRAINWAIT: ::c_ulong = 0x80047457;
3180pub const TIOCGDRAINWAIT: ::c_ulong = 0x40047456;
3181pub const TIOCDSIMICROCODE: ::c_uint = 0x20007455;
3182pub const TIOCPTYGRANT: ::c_uint = 0x20007454;
3183pub const TIOCPTYGNAME: ::c_uint = 0x40807453;
3184pub const TIOCPTYUNLK: ::c_uint = 0x20007452;
3185
3186pub const BIOCGRSIG: ::c_ulong = 0x40044272;
3187pub const BIOCSRSIG: ::c_ulong = 0x80044273;
3188pub const BIOCSDLT: ::c_ulong = 0x80044278;
3189pub const BIOCGSEESENT: ::c_ulong = 0x40044276;
3190pub const BIOCSSEESENT: ::c_ulong = 0x80044277;
3191pub const BIOCGDLTLIST: ::c_ulong = 0xc00c4279;
3192
3193pub const FIODTYPE: ::c_ulong = 0x4004667a;
3194
3195pub const B0: speed_t = 0;
3196pub const B50: speed_t = 50;
3197pub const B75: speed_t = 75;
3198pub const B110: speed_t = 110;
3199pub const B134: speed_t = 134;
3200pub const B150: speed_t = 150;
3201pub const B200: speed_t = 200;
3202pub const B300: speed_t = 300;
3203pub const B600: speed_t = 600;
3204pub const B1200: speed_t = 1200;
3205pub const B1800: speed_t = 1800;
3206pub const B2400: speed_t = 2400;
3207pub const B4800: speed_t = 4800;
3208pub const B9600: speed_t = 9600;
3209pub const B19200: speed_t = 19200;
3210pub const B38400: speed_t = 38400;
3211pub const B7200: speed_t = 7200;
3212pub const B14400: speed_t = 14400;
3213pub const B28800: speed_t = 28800;
3214pub const B57600: speed_t = 57600;
3215pub const B76800: speed_t = 76800;
3216pub const B115200: speed_t = 115200;
3217pub const B230400: speed_t = 230400;
3218pub const EXTA: speed_t = 19200;
3219pub const EXTB: speed_t = 38400;
3220
3221pub const SIGTRAP: ::c_int = 5;
3222
3223pub const GLOB_APPEND: ::c_int = 0x0001;
3224pub const GLOB_DOOFFS: ::c_int = 0x0002;
3225pub const GLOB_ERR: ::c_int = 0x0004;
3226pub const GLOB_MARK: ::c_int = 0x0008;
3227pub const GLOB_NOCHECK: ::c_int = 0x0010;
3228pub const GLOB_NOSORT: ::c_int = 0x0020;
3229pub const GLOB_NOESCAPE: ::c_int = 0x2000;
3230
3231pub const GLOB_NOSPACE: ::c_int = -1;
3232pub const GLOB_ABORTED: ::c_int = -2;
3233pub const GLOB_NOMATCH: ::c_int = -3;
3234
3235pub const POSIX_MADV_NORMAL: ::c_int = 0;
3236pub const POSIX_MADV_RANDOM: ::c_int = 1;
3237pub const POSIX_MADV_SEQUENTIAL: ::c_int = 2;
3238pub const POSIX_MADV_WILLNEED: ::c_int = 3;
3239pub const POSIX_MADV_DONTNEED: ::c_int = 4;
3240
3241pub const _SC_IOV_MAX: ::c_int = 56;
3242pub const _SC_GETGR_R_SIZE_MAX: ::c_int = 70;
3243pub const _SC_GETPW_R_SIZE_MAX: ::c_int = 71;
3244pub const _SC_LOGIN_NAME_MAX: ::c_int = 73;
3245pub const _SC_MQ_PRIO_MAX: ::c_int = 75;
3246pub const _SC_THREAD_ATTR_STACKADDR: ::c_int = 82;
3247pub const _SC_THREAD_ATTR_STACKSIZE: ::c_int = 83;
3248pub const _SC_THREAD_DESTRUCTOR_ITERATIONS: ::c_int = 85;
3249pub const _SC_THREAD_KEYS_MAX: ::c_int = 86;
3250pub const _SC_THREAD_PRIO_INHERIT: ::c_int = 87;
3251pub const _SC_THREAD_PRIO_PROTECT: ::c_int = 88;
3252pub const _SC_THREAD_PRIORITY_SCHEDULING: ::c_int = 89;
3253pub const _SC_THREAD_PROCESS_SHARED: ::c_int = 90;
3254pub const _SC_THREAD_SAFE_FUNCTIONS: ::c_int = 91;
3255pub const _SC_THREAD_STACK_MIN: ::c_int = 93;
3256pub const _SC_THREAD_THREADS_MAX: ::c_int = 94;
3257pub const _SC_THREADS: ::c_int = 96;
3258pub const _SC_TTY_NAME_MAX: ::c_int = 101;
3259pub const _SC_ATEXIT_MAX: ::c_int = 107;
3260pub const _SC_XOPEN_CRYPT: ::c_int = 108;
3261pub const _SC_XOPEN_ENH_I18N: ::c_int = 109;
3262pub const _SC_XOPEN_LEGACY: ::c_int = 110;
3263pub const _SC_XOPEN_REALTIME: ::c_int = 111;
3264pub const _SC_XOPEN_REALTIME_THREADS: ::c_int = 112;
3265pub const _SC_XOPEN_SHM: ::c_int = 113;
3266pub const _SC_XOPEN_UNIX: ::c_int = 115;
3267pub const _SC_XOPEN_VERSION: ::c_int = 116;
3268pub const _SC_XOPEN_XCU_VERSION: ::c_int = 121;
3269pub const _SC_PHYS_PAGES: ::c_int = 200;
3270
3271pub const PTHREAD_PROCESS_PRIVATE: ::c_int = 2;
3272pub const PTHREAD_PROCESS_SHARED: ::c_int = 1;
3273pub const PTHREAD_CREATE_JOINABLE: ::c_int = 1;
3274pub const PTHREAD_CREATE_DETACHED: ::c_int = 2;
3275#[cfg(target_arch = "aarch64")]
3276pub const PTHREAD_STACK_MIN: ::size_t = 16384;
3277#[cfg(not(target_arch = "aarch64"))]
3278pub const PTHREAD_STACK_MIN: ::size_t = 8192;
3279
3280pub const RLIMIT_CPU: ::c_int = 0;
3281pub const RLIMIT_FSIZE: ::c_int = 1;
3282pub const RLIMIT_DATA: ::c_int = 2;
3283pub const RLIMIT_STACK: ::c_int = 3;
3284pub const RLIMIT_CORE: ::c_int = 4;
3285pub const RLIMIT_AS: ::c_int = 5;
3286pub const RLIMIT_RSS: ::c_int = RLIMIT_AS;
3287pub const RLIMIT_MEMLOCK: ::c_int = 6;
3288pub const RLIMIT_NPROC: ::c_int = 7;
3289pub const RLIMIT_NOFILE: ::c_int = 8;
3290#[deprecated(since = "0.2.64", note = "Not stable across OS versions")]
3291pub const RLIM_NLIMITS: ::c_int = 9;
3292pub const _RLIMIT_POSIX_FLAG: ::c_int = 0x1000;
3293
3294pub const RLIM_INFINITY: rlim_t = 0x7fff_ffff_ffff_ffff;
3295
3296pub const RUSAGE_SELF: ::c_int = 0;
3297pub const RUSAGE_CHILDREN: ::c_int = -1;
3298
3299pub const MADV_NORMAL: ::c_int = 0;
3300pub const MADV_RANDOM: ::c_int = 1;
3301pub const MADV_SEQUENTIAL: ::c_int = 2;
3302pub const MADV_WILLNEED: ::c_int = 3;
3303pub const MADV_DONTNEED: ::c_int = 4;
3304pub const MADV_FREE: ::c_int = 5;
3305pub const MADV_ZERO_WIRED_PAGES: ::c_int = 6;
3306pub const MADV_FREE_REUSABLE: ::c_int = 7;
3307pub const MADV_FREE_REUSE: ::c_int = 8;
3308pub const MADV_CAN_REUSE: ::c_int = 9;
3309
3310pub const MINCORE_INCORE: ::c_int = 0x1;
3311pub const MINCORE_REFERENCED: ::c_int = 0x2;
3312pub const MINCORE_MODIFIED: ::c_int = 0x4;
3313pub const MINCORE_REFERENCED_OTHER: ::c_int = 0x8;
3314pub const MINCORE_MODIFIED_OTHER: ::c_int = 0x10;
3315
3316//
3317// sys/netinet/in.h
3318// Protocols (RFC 1700)
3319// NOTE: These are in addition to the constants defined in src/unix/mod.rs
3320
3321// IPPROTO_IP defined in src/unix/mod.rs
3322/// IP6 hop-by-hop options
3323pub const IPPROTO_HOPOPTS: ::c_int = 0;
3324// IPPROTO_ICMP defined in src/unix/mod.rs
3325/// group mgmt protocol
3326pub const IPPROTO_IGMP: ::c_int = 2;
3327/// gateway<sup>2</sup> (deprecated)
3328pub const IPPROTO_GGP: ::c_int = 3;
3329/// for compatibility
3330pub const IPPROTO_IPIP: ::c_int = 4;
3331// IPPROTO_TCP defined in src/unix/mod.rs
3332/// Stream protocol II.
3333pub const IPPROTO_ST: ::c_int = 7;
3334/// exterior gateway protocol
3335pub const IPPROTO_EGP: ::c_int = 8;
3336/// private interior gateway
3337pub const IPPROTO_PIGP: ::c_int = 9;
3338/// BBN RCC Monitoring
3339pub const IPPROTO_RCCMON: ::c_int = 10;
3340/// network voice protocol
3341pub const IPPROTO_NVPII: ::c_int = 11;
3342/// pup
3343pub const IPPROTO_PUP: ::c_int = 12;
3344/// Argus
3345pub const IPPROTO_ARGUS: ::c_int = 13;
3346/// EMCON
3347pub const IPPROTO_EMCON: ::c_int = 14;
3348/// Cross Net Debugger
3349pub const IPPROTO_XNET: ::c_int = 15;
3350/// Chaos
3351pub const IPPROTO_CHAOS: ::c_int = 16;
3352// IPPROTO_UDP defined in src/unix/mod.rs
3353/// Multiplexing
3354pub const IPPROTO_MUX: ::c_int = 18;
3355/// DCN Measurement Subsystems
3356pub const IPPROTO_MEAS: ::c_int = 19;
3357/// Host Monitoring
3358pub const IPPROTO_HMP: ::c_int = 20;
3359/// Packet Radio Measurement
3360pub const IPPROTO_PRM: ::c_int = 21;
3361/// xns idp
3362pub const IPPROTO_IDP: ::c_int = 22;
3363/// Trunk-1
3364pub const IPPROTO_TRUNK1: ::c_int = 23;
3365/// Trunk-2
3366pub const IPPROTO_TRUNK2: ::c_int = 24;
3367/// Leaf-1
3368pub const IPPROTO_LEAF1: ::c_int = 25;
3369/// Leaf-2
3370pub const IPPROTO_LEAF2: ::c_int = 26;
3371/// Reliable Data
3372pub const IPPROTO_RDP: ::c_int = 27;
3373/// Reliable Transaction
3374pub const IPPROTO_IRTP: ::c_int = 28;
3375/// tp-4 w/ class negotiation
3376pub const IPPROTO_TP: ::c_int = 29;
3377/// Bulk Data Transfer
3378pub const IPPROTO_BLT: ::c_int = 30;
3379/// Network Services
3380pub const IPPROTO_NSP: ::c_int = 31;
3381/// Merit Internodal
3382pub const IPPROTO_INP: ::c_int = 32;
3383/// Sequential Exchange
3384pub const IPPROTO_SEP: ::c_int = 33;
3385/// Third Party Connect
3386pub const IPPROTO_3PC: ::c_int = 34;
3387/// InterDomain Policy Routing
3388pub const IPPROTO_IDPR: ::c_int = 35;
3389/// XTP
3390pub const IPPROTO_XTP: ::c_int = 36;
3391/// Datagram Delivery
3392pub const IPPROTO_DDP: ::c_int = 37;
3393/// Control Message Transport
3394pub const IPPROTO_CMTP: ::c_int = 38;
3395/// TP++ Transport
3396pub const IPPROTO_TPXX: ::c_int = 39;
3397/// IL transport protocol
3398pub const IPPROTO_IL: ::c_int = 40;
3399// IPPROTO_IPV6 defined in src/unix/mod.rs
3400/// Source Demand Routing
3401pub const IPPROTO_SDRP: ::c_int = 42;
3402/// IP6 routing header
3403pub const IPPROTO_ROUTING: ::c_int = 43;
3404/// IP6 fragmentation header
3405pub const IPPROTO_FRAGMENT: ::c_int = 44;
3406/// InterDomain Routing
3407pub const IPPROTO_IDRP: ::c_int = 45;
3408/// resource reservation
3409pub const IPPROTO_RSVP: ::c_int = 46;
3410/// General Routing Encap.
3411pub const IPPROTO_GRE: ::c_int = 47;
3412/// Mobile Host Routing
3413pub const IPPROTO_MHRP: ::c_int = 48;
3414/// BHA
3415pub const IPPROTO_BHA: ::c_int = 49;
3416/// IP6 Encap Sec. Payload
3417pub const IPPROTO_ESP: ::c_int = 50;
3418/// IP6 Auth Header
3419pub const IPPROTO_AH: ::c_int = 51;
3420/// Integ. Net Layer Security
3421pub const IPPROTO_INLSP: ::c_int = 52;
3422/// IP with encryption
3423pub const IPPROTO_SWIPE: ::c_int = 53;
3424/// Next Hop Resolution
3425pub const IPPROTO_NHRP: ::c_int = 54;
3426/* 55-57: Unassigned */
3427// IPPROTO_ICMPV6 defined in src/unix/mod.rs
3428/// IP6 no next header
3429pub const IPPROTO_NONE: ::c_int = 59;
3430/// IP6 destination option
3431pub const IPPROTO_DSTOPTS: ::c_int = 60;
3432/// any host internal protocol
3433pub const IPPROTO_AHIP: ::c_int = 61;
3434/// CFTP
3435pub const IPPROTO_CFTP: ::c_int = 62;
3436/// "hello" routing protocol
3437pub const IPPROTO_HELLO: ::c_int = 63;
3438/// SATNET/Backroom EXPAK
3439pub const IPPROTO_SATEXPAK: ::c_int = 64;
3440/// Kryptolan
3441pub const IPPROTO_KRYPTOLAN: ::c_int = 65;
3442/// Remote Virtual Disk
3443pub const IPPROTO_RVD: ::c_int = 66;
3444/// Pluribus Packet Core
3445pub const IPPROTO_IPPC: ::c_int = 67;
3446/// Any distributed FS
3447pub const IPPROTO_ADFS: ::c_int = 68;
3448/// Satnet Monitoring
3449pub const IPPROTO_SATMON: ::c_int = 69;
3450/// VISA Protocol
3451pub const IPPROTO_VISA: ::c_int = 70;
3452/// Packet Core Utility
3453pub const IPPROTO_IPCV: ::c_int = 71;
3454/// Comp. Prot. Net. Executive
3455pub const IPPROTO_CPNX: ::c_int = 72;
3456/// Comp. Prot. HeartBeat
3457pub const IPPROTO_CPHB: ::c_int = 73;
3458/// Wang Span Network
3459pub const IPPROTO_WSN: ::c_int = 74;
3460/// Packet Video Protocol
3461pub const IPPROTO_PVP: ::c_int = 75;
3462/// BackRoom SATNET Monitoring
3463pub const IPPROTO_BRSATMON: ::c_int = 76;
3464/// Sun net disk proto (temp.)
3465pub const IPPROTO_ND: ::c_int = 77;
3466/// WIDEBAND Monitoring
3467pub const IPPROTO_WBMON: ::c_int = 78;
3468/// WIDEBAND EXPAK
3469pub const IPPROTO_WBEXPAK: ::c_int = 79;
3470/// ISO cnlp
3471pub const IPPROTO_EON: ::c_int = 80;
3472/// VMTP
3473pub const IPPROTO_VMTP: ::c_int = 81;
3474/// Secure VMTP
3475pub const IPPROTO_SVMTP: ::c_int = 82;
3476/// Banyon VINES
3477pub const IPPROTO_VINES: ::c_int = 83;
3478/// TTP
3479pub const IPPROTO_TTP: ::c_int = 84;
3480/// NSFNET-IGP
3481pub const IPPROTO_IGP: ::c_int = 85;
3482/// dissimilar gateway prot.
3483pub const IPPROTO_DGP: ::c_int = 86;
3484/// TCF
3485pub const IPPROTO_TCF: ::c_int = 87;
3486/// Cisco/GXS IGRP
3487pub const IPPROTO_IGRP: ::c_int = 88;
3488/// OSPFIGP
3489pub const IPPROTO_OSPFIGP: ::c_int = 89;
3490/// Strite RPC protocol
3491pub const IPPROTO_SRPC: ::c_int = 90;
3492/// Locus Address Resoloution
3493pub const IPPROTO_LARP: ::c_int = 91;
3494/// Multicast Transport
3495pub const IPPROTO_MTP: ::c_int = 92;
3496/// AX.25 Frames
3497pub const IPPROTO_AX25: ::c_int = 93;
3498/// IP encapsulated in IP
3499pub const IPPROTO_IPEIP: ::c_int = 94;
3500/// Mobile Int.ing control
3501pub const IPPROTO_MICP: ::c_int = 95;
3502/// Semaphore Comm. security
3503pub const IPPROTO_SCCSP: ::c_int = 96;
3504/// Ethernet IP encapsulation
3505pub const IPPROTO_ETHERIP: ::c_int = 97;
3506/// encapsulation header
3507pub const IPPROTO_ENCAP: ::c_int = 98;
3508/// any private encr. scheme
3509pub const IPPROTO_APES: ::c_int = 99;
3510/// GMTP
3511pub const IPPROTO_GMTP: ::c_int = 100;
3512
3513/* 101-254: Partly Unassigned */
3514/// Protocol Independent Mcast
3515pub const IPPROTO_PIM: ::c_int = 103;
3516/// payload compression (IPComp)
3517pub const IPPROTO_IPCOMP: ::c_int = 108;
3518/// PGM
3519pub const IPPROTO_PGM: ::c_int = 113;
3520/// SCTP
3521pub const IPPROTO_SCTP: ::c_int = 132;
3522
3523/* 255: Reserved */
3524/* BSD Private, local use, namespace incursion */
3525/// divert pseudo-protocol
3526pub const IPPROTO_DIVERT: ::c_int = 254;
3527/// raw IP packet
3528pub const IPPROTO_RAW: ::c_int = 255;
3529pub const IPPROTO_MAX: ::c_int = 256;
3530/// last return value of *_input(), meaning "all job for this pkt is done".
3531pub const IPPROTO_DONE: ::c_int = 257;
3532
3533pub const AF_UNSPEC: ::c_int = 0;
3534pub const AF_LOCAL: ::c_int = 1;
3535pub const AF_UNIX: ::c_int = AF_LOCAL;
3536pub const AF_INET: ::c_int = 2;
3537pub const AF_IMPLINK: ::c_int = 3;
3538pub const AF_PUP: ::c_int = 4;
3539pub const AF_CHAOS: ::c_int = 5;
3540pub const AF_NS: ::c_int = 6;
3541pub const AF_ISO: ::c_int = 7;
3542pub const AF_OSI: ::c_int = AF_ISO;
3543pub const AF_ECMA: ::c_int = 8;
3544pub const AF_DATAKIT: ::c_int = 9;
3545pub const AF_CCITT: ::c_int = 10;
3546pub const AF_SNA: ::c_int = 11;
3547pub const AF_DECnet: ::c_int = 12;
3548pub const AF_DLI: ::c_int = 13;
3549pub const AF_LAT: ::c_int = 14;
3550pub const AF_HYLINK: ::c_int = 15;
3551pub const AF_APPLETALK: ::c_int = 16;
3552pub const AF_ROUTE: ::c_int = 17;
3553pub const AF_LINK: ::c_int = 18;
3554pub const pseudo_AF_XTP: ::c_int = 19;
3555pub const AF_COIP: ::c_int = 20;
3556pub const AF_CNT: ::c_int = 21;
3557pub const pseudo_AF_RTIP: ::c_int = 22;
3558pub const AF_IPX: ::c_int = 23;
3559pub const AF_SIP: ::c_int = 24;
3560pub const pseudo_AF_PIP: ::c_int = 25;
3561pub const AF_NDRV: ::c_int = 27;
3562pub const AF_ISDN: ::c_int = 28;
3563pub const AF_E164: ::c_int = AF_ISDN;
3564pub const pseudo_AF_KEY: ::c_int = 29;
3565pub const AF_INET6: ::c_int = 30;
3566pub const AF_NATM: ::c_int = 31;
3567pub const AF_SYSTEM: ::c_int = 32;
3568pub const AF_NETBIOS: ::c_int = 33;
3569pub const AF_PPP: ::c_int = 34;
3570pub const pseudo_AF_HDRCMPLT: ::c_int = 35;
3571pub const AF_SYS_CONTROL: ::c_int = 2;
3572
3573pub const SYSPROTO_EVENT: ::c_int = 1;
3574pub const SYSPROTO_CONTROL: ::c_int = 2;
3575
3576pub const PF_UNSPEC: ::c_int = AF_UNSPEC;
3577pub const PF_LOCAL: ::c_int = AF_LOCAL;
3578pub const PF_UNIX: ::c_int = PF_LOCAL;
3579pub const PF_INET: ::c_int = AF_INET;
3580pub const PF_IMPLINK: ::c_int = AF_IMPLINK;
3581pub const PF_PUP: ::c_int = AF_PUP;
3582pub const PF_CHAOS: ::c_int = AF_CHAOS;
3583pub const PF_NS: ::c_int = AF_NS;
3584pub const PF_ISO: ::c_int = AF_ISO;
3585pub const PF_OSI: ::c_int = AF_ISO;
3586pub const PF_ECMA: ::c_int = AF_ECMA;
3587pub const PF_DATAKIT: ::c_int = AF_DATAKIT;
3588pub const PF_CCITT: ::c_int = AF_CCITT;
3589pub const PF_SNA: ::c_int = AF_SNA;
3590pub const PF_DECnet: ::c_int = AF_DECnet;
3591pub const PF_DLI: ::c_int = AF_DLI;
3592pub const PF_LAT: ::c_int = AF_LAT;
3593pub const PF_HYLINK: ::c_int = AF_HYLINK;
3594pub const PF_APPLETALK: ::c_int = AF_APPLETALK;
3595pub const PF_ROUTE: ::c_int = AF_ROUTE;
3596pub const PF_LINK: ::c_int = AF_LINK;
3597pub const PF_XTP: ::c_int = pseudo_AF_XTP;
3598pub const PF_COIP: ::c_int = AF_COIP;
3599pub const PF_CNT: ::c_int = AF_CNT;
3600pub const PF_SIP: ::c_int = AF_SIP;
3601pub const PF_IPX: ::c_int = AF_IPX;
3602pub const PF_RTIP: ::c_int = pseudo_AF_RTIP;
3603pub const PF_PIP: ::c_int = pseudo_AF_PIP;
3604pub const PF_NDRV: ::c_int = AF_NDRV;
3605pub const PF_ISDN: ::c_int = AF_ISDN;
3606pub const PF_KEY: ::c_int = pseudo_AF_KEY;
3607pub const PF_INET6: ::c_int = AF_INET6;
3608pub const PF_NATM: ::c_int = AF_NATM;
3609pub const PF_SYSTEM: ::c_int = AF_SYSTEM;
3610pub const PF_NETBIOS: ::c_int = AF_NETBIOS;
3611pub const PF_PPP: ::c_int = AF_PPP;
3612
3613pub const NET_RT_DUMP: ::c_int = 1;
3614pub const NET_RT_FLAGS: ::c_int = 2;
3615pub const NET_RT_IFLIST: ::c_int = 3;
3616
3617pub const SOMAXCONN: ::c_int = 128;
3618
3619pub const SOCK_MAXADDRLEN: ::c_int = 255;
3620
3621pub const SOCK_STREAM: ::c_int = 1;
3622pub const SOCK_DGRAM: ::c_int = 2;
3623pub const SOCK_RAW: ::c_int = 3;
3624pub const SOCK_RDM: ::c_int = 4;
3625pub const SOCK_SEQPACKET: ::c_int = 5;
3626pub const IP_TTL: ::c_int = 4;
3627pub const IP_HDRINCL: ::c_int = 2;
3628pub const IP_RECVDSTADDR: ::c_int = 7;
3629pub const IP_ADD_MEMBERSHIP: ::c_int = 12;
3630pub const IP_DROP_MEMBERSHIP: ::c_int = 13;
3631pub const IP_RECVIF: ::c_int = 20;
3632pub const IP_BOUND_IF: ::c_int = 25;
3633pub const IP_PKTINFO: ::c_int = 26;
3634pub const IP_RECVTOS: ::c_int = 27;
3635pub const IP_DONTFRAG: ::c_int = 28;
3636pub const IPV6_JOIN_GROUP: ::c_int = 12;
3637pub const IPV6_LEAVE_GROUP: ::c_int = 13;
3638pub const IPV6_CHECKSUM: ::c_int = 26;
3639pub const IPV6_RECVTCLASS: ::c_int = 35;
3640pub const IPV6_TCLASS: ::c_int = 36;
3641pub const IPV6_PKTINFO: ::c_int = 46;
3642pub const IPV6_HOPLIMIT: ::c_int = 47;
3643pub const IPV6_RECVPKTINFO: ::c_int = 61;
3644pub const IPV6_DONTFRAG: ::c_int = 62;
3645pub const IP_ADD_SOURCE_MEMBERSHIP: ::c_int = 70;
3646pub const IP_DROP_SOURCE_MEMBERSHIP: ::c_int = 71;
3647pub const IP_BLOCK_SOURCE: ::c_int = 72;
3648pub const IP_UNBLOCK_SOURCE: ::c_int = 73;
3649pub const IPV6_BOUND_IF: ::c_int = 125;
3650
3651pub const TCP_NOPUSH: ::c_int = 4;
3652pub const TCP_NOOPT: ::c_int = 8;
3653pub const TCP_KEEPALIVE: ::c_int = 0x10;
3654pub const TCP_KEEPINTVL: ::c_int = 0x101;
3655pub const TCP_KEEPCNT: ::c_int = 0x102;
3656/// Enable/Disable TCP Fastopen on this socket
3657pub const TCP_FASTOPEN: ::c_int = 0x105;
3658
3659pub const SOL_LOCAL: ::c_int = 0;
3660
3661pub const LOCAL_PEERCRED: ::c_int = 0x001;
3662pub const LOCAL_PEERPID: ::c_int = 0x002;
3663pub const LOCAL_PEEREPID: ::c_int = 0x003;
3664pub const LOCAL_PEERUUID: ::c_int = 0x004;
3665pub const LOCAL_PEEREUUID: ::c_int = 0x005;
3666
3667pub const SOL_SOCKET: ::c_int = 0xffff;
3668
3669pub const SO_DEBUG: ::c_int = 0x01;
3670pub const SO_ACCEPTCONN: ::c_int = 0x0002;
3671pub const SO_REUSEADDR: ::c_int = 0x0004;
3672pub const SO_KEEPALIVE: ::c_int = 0x0008;
3673pub const SO_DONTROUTE: ::c_int = 0x0010;
3674pub const SO_BROADCAST: ::c_int = 0x0020;
3675pub const SO_USELOOPBACK: ::c_int = 0x0040;
3676pub const SO_LINGER: ::c_int = 0x0080;
3677pub const SO_OOBINLINE: ::c_int = 0x0100;
3678pub const SO_REUSEPORT: ::c_int = 0x0200;
3679pub const SO_TIMESTAMP: ::c_int = 0x0400;
3680pub const SO_TIMESTAMP_MONOTONIC: ::c_int = 0x0800;
3681pub const SO_DONTTRUNC: ::c_int = 0x2000;
3682pub const SO_WANTMORE: ::c_int = 0x4000;
3683pub const SO_WANTOOBFLAG: ::c_int = 0x8000;
3684pub const SO_SNDBUF: ::c_int = 0x1001;
3685pub const SO_RCVBUF: ::c_int = 0x1002;
3686pub const SO_SNDLOWAT: ::c_int = 0x1003;
3687pub const SO_RCVLOWAT: ::c_int = 0x1004;
3688pub const SO_SNDTIMEO: ::c_int = 0x1005;
3689pub const SO_RCVTIMEO: ::c_int = 0x1006;
3690pub const SO_ERROR: ::c_int = 0x1007;
3691pub const SO_TYPE: ::c_int = 0x1008;
3692pub const SO_LABEL: ::c_int = 0x1010;
3693pub const SO_PEERLABEL: ::c_int = 0x1011;
3694pub const SO_NREAD: ::c_int = 0x1020;
3695pub const SO_NKE: ::c_int = 0x1021;
3696pub const SO_NOSIGPIPE: ::c_int = 0x1022;
3697pub const SO_NOADDRERR: ::c_int = 0x1023;
3698pub const SO_NWRITE: ::c_int = 0x1024;
3699pub const SO_REUSESHAREUID: ::c_int = 0x1025;
3700pub const SO_NOTIFYCONFLICT: ::c_int = 0x1026;
3701pub const SO_LINGER_SEC: ::c_int = 0x1080;
3702pub const SO_RANDOMPORT: ::c_int = 0x1082;
3703pub const SO_NP_EXTENSIONS: ::c_int = 0x1083;
3704
3705pub const MSG_OOB: ::c_int = 0x1;
3706pub const MSG_PEEK: ::c_int = 0x2;
3707pub const MSG_DONTROUTE: ::c_int = 0x4;
3708pub const MSG_EOR: ::c_int = 0x8;
3709pub const MSG_TRUNC: ::c_int = 0x10;
3710pub const MSG_CTRUNC: ::c_int = 0x20;
3711pub const MSG_WAITALL: ::c_int = 0x40;
3712pub const MSG_DONTWAIT: ::c_int = 0x80;
3713pub const MSG_EOF: ::c_int = 0x100;
3714pub const MSG_FLUSH: ::c_int = 0x400;
3715pub const MSG_HOLD: ::c_int = 0x800;
3716pub const MSG_SEND: ::c_int = 0x1000;
3717pub const MSG_HAVEMORE: ::c_int = 0x2000;
3718pub const MSG_RCVMORE: ::c_int = 0x4000;
3719// pub const MSG_COMPAT: ::c_int = 0x8000;
3720
3721pub const SCM_TIMESTAMP: ::c_int = 0x02;
3722pub const SCM_CREDS: ::c_int = 0x03;
3723
3724// https://github.com/aosm/xnu/blob/master/bsd/net/if.h#L140-L156
3725pub const IFF_UP: ::c_int = 0x1; // interface is up
3726pub const IFF_BROADCAST: ::c_int = 0x2; // broadcast address valid
3727pub const IFF_DEBUG: ::c_int = 0x4; // turn on debugging
3728pub const IFF_LOOPBACK: ::c_int = 0x8; // is a loopback net
3729pub const IFF_POINTOPOINT: ::c_int = 0x10; // interface is point-to-point link
3730pub const IFF_NOTRAILERS: ::c_int = 0x20; // obsolete: avoid use of trailers
3731pub const IFF_RUNNING: ::c_int = 0x40; // resources allocated
3732pub const IFF_NOARP: ::c_int = 0x80; // no address resolution protocol
3733pub const IFF_PROMISC: ::c_int = 0x100; // receive all packets
3734pub const IFF_ALLMULTI: ::c_int = 0x200; // receive all multicast packets
3735pub const IFF_OACTIVE: ::c_int = 0x400; // transmission in progress
3736pub const IFF_SIMPLEX: ::c_int = 0x800; // can't hear own transmissions
3737pub const IFF_LINK0: ::c_int = 0x1000; // per link layer defined bit
3738pub const IFF_LINK1: ::c_int = 0x2000; // per link layer defined bit
3739pub const IFF_LINK2: ::c_int = 0x4000; // per link layer defined bit
3740pub const IFF_ALTPHYS: ::c_int = IFF_LINK2; // use alternate physical connection
3741pub const IFF_MULTICAST: ::c_int = 0x8000; // supports multicast
3742
3743pub const SHUT_RD: ::c_int = 0;
3744pub const SHUT_WR: ::c_int = 1;
3745pub const SHUT_RDWR: ::c_int = 2;
3746
3747pub const SAE_ASSOCID_ANY: ::sae_associd_t = 0;
3748/// ((sae_associd_t)(-1ULL))
3749pub const SAE_ASSOCID_ALL: ::sae_associd_t = 0xffffffff;
3750
3751pub const SAE_CONNID_ANY: ::sae_connid_t = 0;
3752/// ((sae_connid_t)(-1ULL))
3753pub const SAE_CONNID_ALL: ::sae_connid_t = 0xffffffff;
3754
3755// connectx() flag parameters
3756
3757/// resume connect() on read/write
3758pub const CONNECT_RESUME_ON_READ_WRITE: ::c_uint = 0x1;
3759/// data is idempotent
3760pub const CONNECT_DATA_IDEMPOTENT: ::c_uint = 0x2;
3761/// data includes security that replaces the TFO-cookie
3762pub const CONNECT_DATA_AUTHENTICATED: ::c_uint = 0x4;
3763
3764pub const LOCK_SH: ::c_int = 1;
3765pub const LOCK_EX: ::c_int = 2;
3766pub const LOCK_NB: ::c_int = 4;
3767pub const LOCK_UN: ::c_int = 8;
3768
3769pub const MAP_COPY: ::c_int = 0x0002;
3770pub const MAP_RENAME: ::c_int = 0x0020;
3771pub const MAP_NORESERVE: ::c_int = 0x0040;
3772pub const MAP_NOEXTEND: ::c_int = 0x0100;
3773pub const MAP_HASSEMAPHORE: ::c_int = 0x0200;
3774pub const MAP_NOCACHE: ::c_int = 0x0400;
3775pub const MAP_JIT: ::c_int = 0x0800;
3776
3777pub const _SC_ARG_MAX: ::c_int = 1;
3778pub const _SC_CHILD_MAX: ::c_int = 2;
3779pub const _SC_CLK_TCK: ::c_int = 3;
3780pub const _SC_NGROUPS_MAX: ::c_int = 4;
3781pub const _SC_OPEN_MAX: ::c_int = 5;
3782pub const _SC_JOB_CONTROL: ::c_int = 6;
3783pub const _SC_SAVED_IDS: ::c_int = 7;
3784pub const _SC_VERSION: ::c_int = 8;
3785pub const _SC_BC_BASE_MAX: ::c_int = 9;
3786pub const _SC_BC_DIM_MAX: ::c_int = 10;
3787pub const _SC_BC_SCALE_MAX: ::c_int = 11;
3788pub const _SC_BC_STRING_MAX: ::c_int = 12;
3789pub const _SC_COLL_WEIGHTS_MAX: ::c_int = 13;
3790pub const _SC_EXPR_NEST_MAX: ::c_int = 14;
3791pub const _SC_LINE_MAX: ::c_int = 15;
3792pub const _SC_RE_DUP_MAX: ::c_int = 16;
3793pub const _SC_2_VERSION: ::c_int = 17;
3794pub const _SC_2_C_BIND: ::c_int = 18;
3795pub const _SC_2_C_DEV: ::c_int = 19;
3796pub const _SC_2_CHAR_TERM: ::c_int = 20;
3797pub const _SC_2_FORT_DEV: ::c_int = 21;
3798pub const _SC_2_FORT_RUN: ::c_int = 22;
3799pub const _SC_2_LOCALEDEF: ::c_int = 23;
3800pub const _SC_2_SW_DEV: ::c_int = 24;
3801pub const _SC_2_UPE: ::c_int = 25;
3802pub const _SC_STREAM_MAX: ::c_int = 26;
3803pub const _SC_TZNAME_MAX: ::c_int = 27;
3804pub const _SC_ASYNCHRONOUS_IO: ::c_int = 28;
3805pub const _SC_PAGESIZE: ::c_int = 29;
3806pub const _SC_MEMLOCK: ::c_int = 30;
3807pub const _SC_MEMLOCK_RANGE: ::c_int = 31;
3808pub const _SC_MEMORY_PROTECTION: ::c_int = 32;
3809pub const _SC_MESSAGE_PASSING: ::c_int = 33;
3810pub const _SC_PRIORITIZED_IO: ::c_int = 34;
3811pub const _SC_PRIORITY_SCHEDULING: ::c_int = 35;
3812pub const _SC_REALTIME_SIGNALS: ::c_int = 36;
3813pub const _SC_SEMAPHORES: ::c_int = 37;
3814pub const _SC_FSYNC: ::c_int = 38;
3815pub const _SC_SHARED_MEMORY_OBJECTS: ::c_int = 39;
3816pub const _SC_SYNCHRONIZED_IO: ::c_int = 40;
3817pub const _SC_TIMERS: ::c_int = 41;
3818pub const _SC_AIO_LISTIO_MAX: ::c_int = 42;
3819pub const _SC_AIO_MAX: ::c_int = 43;
3820pub const _SC_AIO_PRIO_DELTA_MAX: ::c_int = 44;
3821pub const _SC_DELAYTIMER_MAX: ::c_int = 45;
3822pub const _SC_MQ_OPEN_MAX: ::c_int = 46;
3823pub const _SC_MAPPED_FILES: ::c_int = 47;
3824pub const _SC_RTSIG_MAX: ::c_int = 48;
3825pub const _SC_SEM_NSEMS_MAX: ::c_int = 49;
3826pub const _SC_SEM_VALUE_MAX: ::c_int = 50;
3827pub const _SC_SIGQUEUE_MAX: ::c_int = 51;
3828pub const _SC_TIMER_MAX: ::c_int = 52;
3829pub const _SC_NPROCESSORS_CONF: ::c_int = 57;
3830pub const _SC_NPROCESSORS_ONLN: ::c_int = 58;
3831pub const _SC_2_PBS: ::c_int = 59;
3832pub const _SC_2_PBS_ACCOUNTING: ::c_int = 60;
3833pub const _SC_2_PBS_CHECKPOINT: ::c_int = 61;
3834pub const _SC_2_PBS_LOCATE: ::c_int = 62;
3835pub const _SC_2_PBS_MESSAGE: ::c_int = 63;
3836pub const _SC_2_PBS_TRACK: ::c_int = 64;
3837pub const _SC_ADVISORY_INFO: ::c_int = 65;
3838pub const _SC_BARRIERS: ::c_int = 66;
3839pub const _SC_CLOCK_SELECTION: ::c_int = 67;
3840pub const _SC_CPUTIME: ::c_int = 68;
3841pub const _SC_FILE_LOCKING: ::c_int = 69;
3842pub const _SC_HOST_NAME_MAX: ::c_int = 72;
3843pub const _SC_MONOTONIC_CLOCK: ::c_int = 74;
3844pub const _SC_READER_WRITER_LOCKS: ::c_int = 76;
3845pub const _SC_REGEXP: ::c_int = 77;
3846pub const _SC_SHELL: ::c_int = 78;
3847pub const _SC_SPAWN: ::c_int = 79;
3848pub const _SC_SPIN_LOCKS: ::c_int = 80;
3849pub const _SC_SPORADIC_SERVER: ::c_int = 81;
3850pub const _SC_THREAD_CPUTIME: ::c_int = 84;
3851pub const _SC_THREAD_SPORADIC_SERVER: ::c_int = 92;
3852pub const _SC_TIMEOUTS: ::c_int = 95;
3853pub const _SC_TRACE: ::c_int = 97;
3854pub const _SC_TRACE_EVENT_FILTER: ::c_int = 98;
3855pub const _SC_TRACE_INHERIT: ::c_int = 99;
3856pub const _SC_TRACE_LOG: ::c_int = 100;
3857pub const _SC_TYPED_MEMORY_OBJECTS: ::c_int = 102;
3858pub const _SC_V6_ILP32_OFF32: ::c_int = 103;
3859pub const _SC_V6_ILP32_OFFBIG: ::c_int = 104;
3860pub const _SC_V6_LP64_OFF64: ::c_int = 105;
3861pub const _SC_V6_LPBIG_OFFBIG: ::c_int = 106;
3862pub const _SC_IPV6: ::c_int = 118;
3863pub const _SC_RAW_SOCKETS: ::c_int = 119;
3864pub const _SC_SYMLOOP_MAX: ::c_int = 120;
3865pub const _SC_PAGE_SIZE: ::c_int = _SC_PAGESIZE;
3866pub const _SC_XOPEN_STREAMS: ::c_int = 114;
3867pub const _SC_XBS5_ILP32_OFF32: ::c_int = 122;
3868pub const _SC_XBS5_ILP32_OFFBIG: ::c_int = 123;
3869pub const _SC_XBS5_LP64_OFF64: ::c_int = 124;
3870pub const _SC_XBS5_LPBIG_OFFBIG: ::c_int = 125;
3871pub const _SC_SS_REPL_MAX: ::c_int = 126;
3872pub const _SC_TRACE_EVENT_NAME_MAX: ::c_int = 127;
3873pub const _SC_TRACE_NAME_MAX: ::c_int = 128;
3874pub const _SC_TRACE_SYS_MAX: ::c_int = 129;
3875pub const _SC_TRACE_USER_EVENT_MAX: ::c_int = 130;
3876pub const _SC_PASS_MAX: ::c_int = 131;
3877// `confstr` keys (only the values guaranteed by `man confstr`).
3878pub const _CS_PATH: ::c_int = 1;
3879pub const _CS_DARWIN_USER_DIR: ::c_int = 65536;
3880pub const _CS_DARWIN_USER_TEMP_DIR: ::c_int = 65537;
3881pub const _CS_DARWIN_USER_CACHE_DIR: ::c_int = 65538;
3882
3883pub const PTHREAD_MUTEX_NORMAL: ::c_int = 0;
3884pub const PTHREAD_MUTEX_ERRORCHECK: ::c_int = 1;
3885pub const PTHREAD_MUTEX_RECURSIVE: ::c_int = 2;
3886pub const PTHREAD_MUTEX_DEFAULT: ::c_int = PTHREAD_MUTEX_NORMAL;
3887pub const _PTHREAD_MUTEX_SIG_init: ::c_long = 0x32AAABA7;
3888pub const _PTHREAD_COND_SIG_init: ::c_long = 0x3CB0B1BB;
3889pub const _PTHREAD_RWLOCK_SIG_init: ::c_long = 0x2DA8B3B4;
3890pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = pthread_mutex_t {
3891    __sig: _PTHREAD_MUTEX_SIG_init,
3892    __opaque: [0; __PTHREAD_MUTEX_SIZE__],
3893};
3894pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = pthread_cond_t {
3895    __sig: _PTHREAD_COND_SIG_init,
3896    __opaque: [0; __PTHREAD_COND_SIZE__],
3897};
3898pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = pthread_rwlock_t {
3899    __sig: _PTHREAD_RWLOCK_SIG_init,
3900    __opaque: [0; __PTHREAD_RWLOCK_SIZE__],
3901};
3902
3903pub const OS_UNFAIR_LOCK_INIT: os_unfair_lock = os_unfair_lock {
3904    _os_unfair_lock_opaque: 0,
3905};
3906
3907pub const OS_LOG_TYPE_DEFAULT: ::os_log_type_t = 0x00;
3908pub const OS_LOG_TYPE_INFO: ::os_log_type_t = 0x01;
3909pub const OS_LOG_TYPE_DEBUG: ::os_log_type_t = 0x02;
3910pub const OS_LOG_TYPE_ERROR: ::os_log_type_t = 0x10;
3911pub const OS_LOG_TYPE_FAULT: ::os_log_type_t = 0x11;
3912
3913pub const OS_SIGNPOST_EVENT: ::os_signpost_type_t = 0x00;
3914pub const OS_SIGNPOST_INTERVAL_BEGIN: ::os_signpost_type_t = 0x01;
3915pub const OS_SIGNPOST_INTERVAL_END: ::os_signpost_type_t = 0x02;
3916
3917pub const MINSIGSTKSZ: ::size_t = 32768;
3918pub const SIGSTKSZ: ::size_t = 131072;
3919
3920pub const FD_SETSIZE: usize = 1024;
3921
3922pub const ST_NOSUID: ::c_ulong = 2;
3923
3924pub const SCHED_OTHER: ::c_int = 1;
3925pub const SCHED_FIFO: ::c_int = 4;
3926pub const SCHED_RR: ::c_int = 2;
3927
3928pub const EVFILT_READ: i16 = -1;
3929pub const EVFILT_WRITE: i16 = -2;
3930pub const EVFILT_AIO: i16 = -3;
3931pub const EVFILT_VNODE: i16 = -4;
3932pub const EVFILT_PROC: i16 = -5;
3933pub const EVFILT_SIGNAL: i16 = -6;
3934pub const EVFILT_TIMER: i16 = -7;
3935pub const EVFILT_MACHPORT: i16 = -8;
3936pub const EVFILT_FS: i16 = -9;
3937pub const EVFILT_USER: i16 = -10;
3938pub const EVFILT_VM: i16 = -12;
3939
3940pub const EV_ADD: u16 = 0x1;
3941pub const EV_DELETE: u16 = 0x2;
3942pub const EV_ENABLE: u16 = 0x4;
3943pub const EV_DISABLE: u16 = 0x8;
3944pub const EV_ONESHOT: u16 = 0x10;
3945pub const EV_CLEAR: u16 = 0x20;
3946pub const EV_RECEIPT: u16 = 0x40;
3947pub const EV_DISPATCH: u16 = 0x80;
3948pub const EV_FLAG0: u16 = 0x1000;
3949pub const EV_POLL: u16 = 0x1000;
3950pub const EV_FLAG1: u16 = 0x2000;
3951pub const EV_OOBAND: u16 = 0x2000;
3952pub const EV_ERROR: u16 = 0x4000;
3953pub const EV_EOF: u16 = 0x8000;
3954pub const EV_SYSFLAGS: u16 = 0xf000;
3955
3956pub const NOTE_TRIGGER: u32 = 0x01000000;
3957pub const NOTE_FFNOP: u32 = 0x00000000;
3958pub const NOTE_FFAND: u32 = 0x40000000;
3959pub const NOTE_FFOR: u32 = 0x80000000;
3960pub const NOTE_FFCOPY: u32 = 0xc0000000;
3961pub const NOTE_FFCTRLMASK: u32 = 0xc0000000;
3962pub const NOTE_FFLAGSMASK: u32 = 0x00ffffff;
3963pub const NOTE_LOWAT: u32 = 0x00000001;
3964pub const NOTE_DELETE: u32 = 0x00000001;
3965pub const NOTE_WRITE: u32 = 0x00000002;
3966pub const NOTE_EXTEND: u32 = 0x00000004;
3967pub const NOTE_ATTRIB: u32 = 0x00000008;
3968pub const NOTE_LINK: u32 = 0x00000010;
3969pub const NOTE_RENAME: u32 = 0x00000020;
3970pub const NOTE_REVOKE: u32 = 0x00000040;
3971pub const NOTE_NONE: u32 = 0x00000080;
3972pub const NOTE_EXIT: u32 = 0x80000000;
3973pub const NOTE_FORK: u32 = 0x40000000;
3974pub const NOTE_EXEC: u32 = 0x20000000;
3975#[doc(hidden)]
3976#[deprecated(since = "0.2.49", note = "Deprecated since MacOSX 10.9")]
3977pub const NOTE_REAP: u32 = 0x10000000;
3978pub const NOTE_SIGNAL: u32 = 0x08000000;
3979pub const NOTE_EXITSTATUS: u32 = 0x04000000;
3980pub const NOTE_EXIT_DETAIL: u32 = 0x02000000;
3981pub const NOTE_PDATAMASK: u32 = 0x000fffff;
3982pub const NOTE_PCTRLMASK: u32 = 0xfff00000;
3983#[doc(hidden)]
3984#[deprecated(since = "0.2.49", note = "Deprecated since MacOSX 10.9")]
3985pub const NOTE_EXIT_REPARENTED: u32 = 0x00080000;
3986pub const NOTE_EXIT_DETAIL_MASK: u32 = 0x00070000;
3987pub const NOTE_EXIT_DECRYPTFAIL: u32 = 0x00010000;
3988pub const NOTE_EXIT_MEMORY: u32 = 0x00020000;
3989pub const NOTE_EXIT_CSERROR: u32 = 0x00040000;
3990pub const NOTE_VM_PRESSURE: u32 = 0x80000000;
3991pub const NOTE_VM_PRESSURE_TERMINATE: u32 = 0x40000000;
3992pub const NOTE_VM_PRESSURE_SUDDEN_TERMINATE: u32 = 0x20000000;
3993pub const NOTE_VM_ERROR: u32 = 0x10000000;
3994pub const NOTE_SECONDS: u32 = 0x00000001;
3995pub const NOTE_USECONDS: u32 = 0x00000002;
3996pub const NOTE_NSECONDS: u32 = 0x00000004;
3997pub const NOTE_ABSOLUTE: u32 = 0x00000008;
3998pub const NOTE_LEEWAY: u32 = 0x00000010;
3999pub const NOTE_CRITICAL: u32 = 0x00000020;
4000pub const NOTE_BACKGROUND: u32 = 0x00000040;
4001pub const NOTE_TRACK: u32 = 0x00000001;
4002pub const NOTE_TRACKERR: u32 = 0x00000002;
4003pub const NOTE_CHILD: u32 = 0x00000004;
4004
4005pub const OCRNL: ::tcflag_t = 0x00000010;
4006pub const ONOCR: ::tcflag_t = 0x00000020;
4007pub const ONLRET: ::tcflag_t = 0x00000040;
4008pub const OFILL: ::tcflag_t = 0x00000080;
4009pub const NLDLY: ::tcflag_t = 0x00000300;
4010pub const TABDLY: ::tcflag_t = 0x00000c04;
4011pub const CRDLY: ::tcflag_t = 0x00003000;
4012pub const FFDLY: ::tcflag_t = 0x00004000;
4013pub const BSDLY: ::tcflag_t = 0x00008000;
4014pub const VTDLY: ::tcflag_t = 0x00010000;
4015pub const OFDEL: ::tcflag_t = 0x00020000;
4016
4017pub const NL0: ::tcflag_t = 0x00000000;
4018pub const NL1: ::tcflag_t = 0x00000100;
4019pub const TAB0: ::tcflag_t = 0x00000000;
4020pub const TAB1: ::tcflag_t = 0x00000400;
4021pub const TAB2: ::tcflag_t = 0x00000800;
4022pub const CR0: ::tcflag_t = 0x00000000;
4023pub const CR1: ::tcflag_t = 0x00001000;
4024pub const CR2: ::tcflag_t = 0x00002000;
4025pub const CR3: ::tcflag_t = 0x00003000;
4026pub const FF0: ::tcflag_t = 0x00000000;
4027pub const FF1: ::tcflag_t = 0x00004000;
4028pub const BS0: ::tcflag_t = 0x00000000;
4029pub const BS1: ::tcflag_t = 0x00008000;
4030pub const TAB3: ::tcflag_t = 0x00000004;
4031pub const VT0: ::tcflag_t = 0x00000000;
4032pub const VT1: ::tcflag_t = 0x00010000;
4033pub const IUTF8: ::tcflag_t = 0x00004000;
4034pub const CRTSCTS: ::tcflag_t = 0x00030000;
4035
4036pub const NI_MAXHOST: ::socklen_t = 1025;
4037pub const NI_MAXSERV: ::socklen_t = 32;
4038pub const NI_NOFQDN: ::c_int = 0x00000001;
4039pub const NI_NUMERICHOST: ::c_int = 0x00000002;
4040pub const NI_NAMEREQD: ::c_int = 0x00000004;
4041pub const NI_NUMERICSERV: ::c_int = 0x00000008;
4042pub const NI_NUMERICSCOPE: ::c_int = 0x00000100;
4043pub const NI_DGRAM: ::c_int = 0x00000010;
4044
4045pub const Q_GETQUOTA: ::c_int = 0x300;
4046pub const Q_SETQUOTA: ::c_int = 0x400;
4047
4048pub const RENAME_SWAP: ::c_uint = 0x00000002;
4049pub const RENAME_EXCL: ::c_uint = 0x00000004;
4050
4051pub const RTLD_LOCAL: ::c_int = 0x4;
4052pub const RTLD_FIRST: ::c_int = 0x100;
4053pub const RTLD_NODELETE: ::c_int = 0x80;
4054pub const RTLD_NOLOAD: ::c_int = 0x10;
4055pub const RTLD_GLOBAL: ::c_int = 0x8;
4056
4057pub const _WSTOPPED: ::c_int = 0o177;
4058
4059pub const LOG_NETINFO: ::c_int = 12 << 3;
4060pub const LOG_REMOTEAUTH: ::c_int = 13 << 3;
4061pub const LOG_INSTALL: ::c_int = 14 << 3;
4062pub const LOG_RAS: ::c_int = 15 << 3;
4063pub const LOG_LAUNCHD: ::c_int = 24 << 3;
4064pub const LOG_NFACILITIES: ::c_int = 25;
4065
4066pub const CTLTYPE: ::c_int = 0xf;
4067pub const CTLTYPE_NODE: ::c_int = 1;
4068pub const CTLTYPE_INT: ::c_int = 2;
4069pub const CTLTYPE_STRING: ::c_int = 3;
4070pub const CTLTYPE_QUAD: ::c_int = 4;
4071pub const CTLTYPE_OPAQUE: ::c_int = 5;
4072pub const CTLTYPE_STRUCT: ::c_int = CTLTYPE_OPAQUE;
4073pub const CTLFLAG_RD: ::c_int = 0x80000000;
4074pub const CTLFLAG_WR: ::c_int = 0x40000000;
4075pub const CTLFLAG_RW: ::c_int = CTLFLAG_RD | CTLFLAG_WR;
4076pub const CTLFLAG_NOLOCK: ::c_int = 0x20000000;
4077pub const CTLFLAG_ANYBODY: ::c_int = 0x10000000;
4078pub const CTLFLAG_SECURE: ::c_int = 0x08000000;
4079pub const CTLFLAG_MASKED: ::c_int = 0x04000000;
4080pub const CTLFLAG_NOAUTO: ::c_int = 0x02000000;
4081pub const CTLFLAG_KERN: ::c_int = 0x01000000;
4082pub const CTLFLAG_LOCKED: ::c_int = 0x00800000;
4083pub const CTLFLAG_OID2: ::c_int = 0x00400000;
4084pub const CTL_UNSPEC: ::c_int = 0;
4085pub const CTL_KERN: ::c_int = 1;
4086pub const CTL_VM: ::c_int = 2;
4087pub const CTL_VFS: ::c_int = 3;
4088pub const CTL_NET: ::c_int = 4;
4089pub const CTL_DEBUG: ::c_int = 5;
4090pub const CTL_HW: ::c_int = 6;
4091pub const CTL_MACHDEP: ::c_int = 7;
4092pub const CTL_USER: ::c_int = 8;
4093pub const CTL_MAXID: ::c_int = 9;
4094pub const KERN_OSTYPE: ::c_int = 1;
4095pub const KERN_OSRELEASE: ::c_int = 2;
4096pub const KERN_OSREV: ::c_int = 3;
4097pub const KERN_VERSION: ::c_int = 4;
4098pub const KERN_MAXVNODES: ::c_int = 5;
4099pub const KERN_MAXPROC: ::c_int = 6;
4100pub const KERN_MAXFILES: ::c_int = 7;
4101pub const KERN_ARGMAX: ::c_int = 8;
4102pub const KERN_SECURELVL: ::c_int = 9;
4103pub const KERN_HOSTNAME: ::c_int = 10;
4104pub const KERN_HOSTID: ::c_int = 11;
4105pub const KERN_CLOCKRATE: ::c_int = 12;
4106pub const KERN_VNODE: ::c_int = 13;
4107pub const KERN_PROC: ::c_int = 14;
4108pub const KERN_FILE: ::c_int = 15;
4109pub const KERN_PROF: ::c_int = 16;
4110pub const KERN_POSIX1: ::c_int = 17;
4111pub const KERN_NGROUPS: ::c_int = 18;
4112pub const KERN_JOB_CONTROL: ::c_int = 19;
4113pub const KERN_SAVED_IDS: ::c_int = 20;
4114pub const KERN_BOOTTIME: ::c_int = 21;
4115pub const KERN_NISDOMAINNAME: ::c_int = 22;
4116pub const KERN_DOMAINNAME: ::c_int = KERN_NISDOMAINNAME;
4117pub const KERN_MAXPARTITIONS: ::c_int = 23;
4118pub const KERN_KDEBUG: ::c_int = 24;
4119pub const KERN_UPDATEINTERVAL: ::c_int = 25;
4120pub const KERN_OSRELDATE: ::c_int = 26;
4121pub const KERN_NTP_PLL: ::c_int = 27;
4122pub const KERN_BOOTFILE: ::c_int = 28;
4123pub const KERN_MAXFILESPERPROC: ::c_int = 29;
4124pub const KERN_MAXPROCPERUID: ::c_int = 30;
4125pub const KERN_DUMPDEV: ::c_int = 31;
4126pub const KERN_IPC: ::c_int = 32;
4127pub const KERN_DUMMY: ::c_int = 33;
4128pub const KERN_PS_STRINGS: ::c_int = 34;
4129pub const KERN_USRSTACK32: ::c_int = 35;
4130pub const KERN_LOGSIGEXIT: ::c_int = 36;
4131pub const KERN_SYMFILE: ::c_int = 37;
4132pub const KERN_PROCARGS: ::c_int = 38;
4133pub const KERN_NETBOOT: ::c_int = 40;
4134pub const KERN_SYSV: ::c_int = 42;
4135pub const KERN_AFFINITY: ::c_int = 43;
4136pub const KERN_TRANSLATE: ::c_int = 44;
4137pub const KERN_CLASSIC: ::c_int = KERN_TRANSLATE;
4138pub const KERN_EXEC: ::c_int = 45;
4139pub const KERN_CLASSICHANDLER: ::c_int = KERN_EXEC;
4140pub const KERN_AIOMAX: ::c_int = 46;
4141pub const KERN_AIOPROCMAX: ::c_int = 47;
4142pub const KERN_AIOTHREADS: ::c_int = 48;
4143pub const KERN_COREFILE: ::c_int = 50;
4144pub const KERN_COREDUMP: ::c_int = 51;
4145pub const KERN_SUGID_COREDUMP: ::c_int = 52;
4146pub const KERN_PROCDELAYTERM: ::c_int = 53;
4147pub const KERN_SHREG_PRIVATIZABLE: ::c_int = 54;
4148pub const KERN_LOW_PRI_WINDOW: ::c_int = 56;
4149pub const KERN_LOW_PRI_DELAY: ::c_int = 57;
4150pub const KERN_POSIX: ::c_int = 58;
4151pub const KERN_USRSTACK64: ::c_int = 59;
4152pub const KERN_NX_PROTECTION: ::c_int = 60;
4153pub const KERN_TFP: ::c_int = 61;
4154pub const KERN_PROCNAME: ::c_int = 62;
4155pub const KERN_THALTSTACK: ::c_int = 63;
4156pub const KERN_SPECULATIVE_READS: ::c_int = 64;
4157pub const KERN_OSVERSION: ::c_int = 65;
4158pub const KERN_SAFEBOOT: ::c_int = 66;
4159pub const KERN_RAGEVNODE: ::c_int = 68;
4160pub const KERN_TTY: ::c_int = 69;
4161pub const KERN_CHECKOPENEVT: ::c_int = 70;
4162pub const KERN_THREADNAME: ::c_int = 71;
4163pub const KERN_MAXID: ::c_int = 72;
4164pub const KERN_RAGE_PROC: ::c_int = 1;
4165pub const KERN_RAGE_THREAD: ::c_int = 2;
4166pub const KERN_UNRAGE_PROC: ::c_int = 3;
4167pub const KERN_UNRAGE_THREAD: ::c_int = 4;
4168pub const KERN_OPENEVT_PROC: ::c_int = 1;
4169pub const KERN_UNOPENEVT_PROC: ::c_int = 2;
4170pub const KERN_TFP_POLICY: ::c_int = 1;
4171pub const KERN_TFP_POLICY_DENY: ::c_int = 0;
4172pub const KERN_TFP_POLICY_DEFAULT: ::c_int = 2;
4173pub const KERN_KDEFLAGS: ::c_int = 1;
4174pub const KERN_KDDFLAGS: ::c_int = 2;
4175pub const KERN_KDENABLE: ::c_int = 3;
4176pub const KERN_KDSETBUF: ::c_int = 4;
4177pub const KERN_KDGETBUF: ::c_int = 5;
4178pub const KERN_KDSETUP: ::c_int = 6;
4179pub const KERN_KDREMOVE: ::c_int = 7;
4180pub const KERN_KDSETREG: ::c_int = 8;
4181pub const KERN_KDGETREG: ::c_int = 9;
4182pub const KERN_KDREADTR: ::c_int = 10;
4183pub const KERN_KDPIDTR: ::c_int = 11;
4184pub const KERN_KDTHRMAP: ::c_int = 12;
4185pub const KERN_KDPIDEX: ::c_int = 14;
4186pub const KERN_KDSETRTCDEC: ::c_int = 15;
4187pub const KERN_KDGETENTROPY: ::c_int = 16;
4188pub const KERN_KDWRITETR: ::c_int = 17;
4189pub const KERN_KDWRITEMAP: ::c_int = 18;
4190#[doc(hidden)]
4191#[deprecated(since = "0.2.49", note = "Removed in MacOSX 10.12")]
4192pub const KERN_KDENABLE_BG_TRACE: ::c_int = 19;
4193#[doc(hidden)]
4194#[deprecated(since = "0.2.49", note = "Removed in MacOSX 10.12")]
4195pub const KERN_KDDISABLE_BG_TRACE: ::c_int = 20;
4196pub const KERN_KDREADCURTHRMAP: ::c_int = 21;
4197pub const KERN_KDSET_TYPEFILTER: ::c_int = 22;
4198pub const KERN_KDBUFWAIT: ::c_int = 23;
4199pub const KERN_KDCPUMAP: ::c_int = 24;
4200pub const KERN_PROC_ALL: ::c_int = 0;
4201pub const KERN_PROC_PID: ::c_int = 1;
4202pub const KERN_PROC_PGRP: ::c_int = 2;
4203pub const KERN_PROC_SESSION: ::c_int = 3;
4204pub const KERN_PROC_TTY: ::c_int = 4;
4205pub const KERN_PROC_UID: ::c_int = 5;
4206pub const KERN_PROC_RUID: ::c_int = 6;
4207pub const KERN_PROC_LCID: ::c_int = 7;
4208pub const KERN_SUCCESS: ::c_int = 0;
4209pub const KERN_INVALID_ADDRESS: ::c_int = 1;
4210pub const KERN_PROTECTION_FAILURE: ::c_int = 2;
4211pub const KERN_NO_SPACE: ::c_int = 3;
4212pub const KERN_INVALID_ARGUMENT: ::c_int = 4;
4213pub const KERN_FAILURE: ::c_int = 5;
4214pub const KERN_RESOURCE_SHORTAGE: ::c_int = 6;
4215pub const KERN_NOT_RECEIVER: ::c_int = 7;
4216pub const KERN_NO_ACCESS: ::c_int = 8;
4217pub const KERN_MEMORY_FAILURE: ::c_int = 9;
4218pub const KERN_MEMORY_ERROR: ::c_int = 10;
4219pub const KERN_ALREADY_IN_SET: ::c_int = 11;
4220pub const KERN_NOT_IN_SET: ::c_int = 12;
4221pub const KERN_NAME_EXISTS: ::c_int = 13;
4222pub const KERN_ABORTED: ::c_int = 14;
4223pub const KERN_INVALID_NAME: ::c_int = 15;
4224pub const KERN_INVALID_TASK: ::c_int = 16;
4225pub const KERN_INVALID_RIGHT: ::c_int = 17;
4226pub const KERN_INVALID_VALUE: ::c_int = 18;
4227pub const KERN_UREFS_OVERFLOW: ::c_int = 19;
4228pub const KERN_INVALID_CAPABILITY: ::c_int = 20;
4229pub const KERN_RIGHT_EXISTS: ::c_int = 21;
4230pub const KERN_INVALID_HOST: ::c_int = 22;
4231pub const KERN_MEMORY_PRESENT: ::c_int = 23;
4232pub const KERN_MEMORY_DATA_MOVED: ::c_int = 24;
4233pub const KERN_MEMORY_RESTART_COPY: ::c_int = 25;
4234pub const KERN_INVALID_PROCESSOR_SET: ::c_int = 26;
4235pub const KERN_POLICY_LIMIT: ::c_int = 27;
4236pub const KERN_INVALID_POLICY: ::c_int = 28;
4237pub const KERN_INVALID_OBJECT: ::c_int = 29;
4238pub const KERN_ALREADY_WAITING: ::c_int = 30;
4239pub const KERN_DEFAULT_SET: ::c_int = 31;
4240pub const KERN_EXCEPTION_PROTECTED: ::c_int = 32;
4241pub const KERN_INVALID_LEDGER: ::c_int = 33;
4242pub const KERN_INVALID_MEMORY_CONTROL: ::c_int = 34;
4243pub const KERN_INVALID_SECURITY: ::c_int = 35;
4244pub const KERN_NOT_DEPRESSED: ::c_int = 36;
4245pub const KERN_TERMINATED: ::c_int = 37;
4246pub const KERN_LOCK_SET_DESTROYED: ::c_int = 38;
4247pub const KERN_LOCK_UNSTABLE: ::c_int = 39;
4248pub const KERN_LOCK_OWNED: ::c_int = 40;
4249pub const KERN_LOCK_OWNED_SELF: ::c_int = 41;
4250pub const KERN_SEMAPHORE_DESTROYED: ::c_int = 42;
4251pub const KERN_RPC_SERVER_TERMINATED: ::c_int = 43;
4252pub const KERN_RPC_TERMINATE_ORPHAN: ::c_int = 44;
4253pub const KERN_RPC_CONTINUE_ORPHAN: ::c_int = 45;
4254pub const KERN_NOT_SUPPORTED: ::c_int = 46;
4255pub const KERN_NODE_DOWN: ::c_int = 47;
4256pub const KERN_NOT_WAITING: ::c_int = 48;
4257pub const KERN_OPERATION_TIMED_OUT: ::c_int = 49;
4258pub const KERN_CODESIGN_ERROR: ::c_int = 50;
4259pub const KERN_POLICY_STATIC: ::c_int = 51;
4260pub const KERN_INSUFFICIENT_BUFFER_SIZE: ::c_int = 52;
4261pub const KIPC_MAXSOCKBUF: ::c_int = 1;
4262pub const KIPC_SOCKBUF_WASTE: ::c_int = 2;
4263pub const KIPC_SOMAXCONN: ::c_int = 3;
4264pub const KIPC_MAX_LINKHDR: ::c_int = 4;
4265pub const KIPC_MAX_PROTOHDR: ::c_int = 5;
4266pub const KIPC_MAX_HDR: ::c_int = 6;
4267pub const KIPC_MAX_DATALEN: ::c_int = 7;
4268pub const KIPC_MBSTAT: ::c_int = 8;
4269pub const KIPC_NMBCLUSTERS: ::c_int = 9;
4270pub const KIPC_SOQLIMITCOMPAT: ::c_int = 10;
4271pub const VM_METER: ::c_int = 1;
4272pub const VM_LOADAVG: ::c_int = 2;
4273pub const VM_MACHFACTOR: ::c_int = 4;
4274pub const VM_SWAPUSAGE: ::c_int = 5;
4275pub const VM_MAXID: ::c_int = 6;
4276pub const VM_PROT_NONE: ::vm_prot_t = 0x00;
4277pub const VM_PROT_READ: ::vm_prot_t = 0x01;
4278pub const VM_PROT_WRITE: ::vm_prot_t = 0x02;
4279pub const VM_PROT_EXECUTE: ::vm_prot_t = 0x04;
4280pub const MEMORY_OBJECT_NULL: ::memory_object_t = 0;
4281pub const HW_MACHINE: ::c_int = 1;
4282pub const HW_MODEL: ::c_int = 2;
4283pub const HW_NCPU: ::c_int = 3;
4284pub const HW_BYTEORDER: ::c_int = 4;
4285pub const HW_PHYSMEM: ::c_int = 5;
4286pub const HW_USERMEM: ::c_int = 6;
4287pub const HW_PAGESIZE: ::c_int = 7;
4288pub const HW_DISKNAMES: ::c_int = 8;
4289pub const HW_DISKSTATS: ::c_int = 9;
4290pub const HW_EPOCH: ::c_int = 10;
4291pub const HW_FLOATINGPT: ::c_int = 11;
4292pub const HW_MACHINE_ARCH: ::c_int = 12;
4293pub const HW_VECTORUNIT: ::c_int = 13;
4294pub const HW_BUS_FREQ: ::c_int = 14;
4295pub const HW_CPU_FREQ: ::c_int = 15;
4296pub const HW_CACHELINE: ::c_int = 16;
4297pub const HW_L1ICACHESIZE: ::c_int = 17;
4298pub const HW_L1DCACHESIZE: ::c_int = 18;
4299pub const HW_L2SETTINGS: ::c_int = 19;
4300pub const HW_L2CACHESIZE: ::c_int = 20;
4301pub const HW_L3SETTINGS: ::c_int = 21;
4302pub const HW_L3CACHESIZE: ::c_int = 22;
4303pub const HW_TB_FREQ: ::c_int = 23;
4304pub const HW_MEMSIZE: ::c_int = 24;
4305pub const HW_AVAILCPU: ::c_int = 25;
4306pub const HW_TARGET: ::c_int = 26;
4307pub const HW_PRODUCT: ::c_int = 27;
4308pub const HW_MAXID: ::c_int = 28;
4309pub const USER_CS_PATH: ::c_int = 1;
4310pub const USER_BC_BASE_MAX: ::c_int = 2;
4311pub const USER_BC_DIM_MAX: ::c_int = 3;
4312pub const USER_BC_SCALE_MAX: ::c_int = 4;
4313pub const USER_BC_STRING_MAX: ::c_int = 5;
4314pub const USER_COLL_WEIGHTS_MAX: ::c_int = 6;
4315pub const USER_EXPR_NEST_MAX: ::c_int = 7;
4316pub const USER_LINE_MAX: ::c_int = 8;
4317pub const USER_RE_DUP_MAX: ::c_int = 9;
4318pub const USER_POSIX2_VERSION: ::c_int = 10;
4319pub const USER_POSIX2_C_BIND: ::c_int = 11;
4320pub const USER_POSIX2_C_DEV: ::c_int = 12;
4321pub const USER_POSIX2_CHAR_TERM: ::c_int = 13;
4322pub const USER_POSIX2_FORT_DEV: ::c_int = 14;
4323pub const USER_POSIX2_FORT_RUN: ::c_int = 15;
4324pub const USER_POSIX2_LOCALEDEF: ::c_int = 16;
4325pub const USER_POSIX2_SW_DEV: ::c_int = 17;
4326pub const USER_POSIX2_UPE: ::c_int = 18;
4327pub const USER_STREAM_MAX: ::c_int = 19;
4328pub const USER_TZNAME_MAX: ::c_int = 20;
4329pub const USER_MAXID: ::c_int = 21;
4330pub const CTL_DEBUG_NAME: ::c_int = 0;
4331pub const CTL_DEBUG_VALUE: ::c_int = 1;
4332pub const CTL_DEBUG_MAXID: ::c_int = 20;
4333
4334pub const PRIO_DARWIN_THREAD: ::c_int = 3;
4335pub const PRIO_DARWIN_PROCESS: ::c_int = 4;
4336pub const PRIO_DARWIN_BG: ::c_int = 0x1000;
4337pub const PRIO_DARWIN_NONUI: ::c_int = 0x1001;
4338
4339pub const SEM_FAILED: *mut sem_t = -1isize as *mut ::sem_t;
4340
4341pub const AI_PASSIVE: ::c_int = 0x00000001;
4342pub const AI_CANONNAME: ::c_int = 0x00000002;
4343pub const AI_NUMERICHOST: ::c_int = 0x00000004;
4344pub const AI_NUMERICSERV: ::c_int = 0x00001000;
4345pub const AI_MASK: ::c_int =
4346    AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV | AI_ADDRCONFIG;
4347pub const AI_ALL: ::c_int = 0x00000100;
4348pub const AI_V4MAPPED_CFG: ::c_int = 0x00000200;
4349pub const AI_ADDRCONFIG: ::c_int = 0x00000400;
4350pub const AI_V4MAPPED: ::c_int = 0x00000800;
4351pub const AI_DEFAULT: ::c_int = AI_V4MAPPED_CFG | AI_ADDRCONFIG;
4352pub const AI_UNUSABLE: ::c_int = 0x10000000;
4353
4354pub const SIGEV_NONE: ::c_int = 0;
4355pub const SIGEV_SIGNAL: ::c_int = 1;
4356pub const SIGEV_THREAD: ::c_int = 3;
4357
4358pub const AIO_CANCELED: ::c_int = 2;
4359pub const AIO_NOTCANCELED: ::c_int = 4;
4360pub const AIO_ALLDONE: ::c_int = 1;
4361#[deprecated(
4362    since = "0.2.64",
4363    note = "Can vary at runtime.  Use sysconf(3) instead"
4364)]
4365pub const AIO_LISTIO_MAX: ::c_int = 16;
4366pub const LIO_NOP: ::c_int = 0;
4367pub const LIO_WRITE: ::c_int = 2;
4368pub const LIO_READ: ::c_int = 1;
4369pub const LIO_WAIT: ::c_int = 2;
4370pub const LIO_NOWAIT: ::c_int = 1;
4371
4372pub const WEXITED: ::c_int = 0x00000004;
4373pub const WSTOPPED: ::c_int = 0x00000008;
4374pub const WCONTINUED: ::c_int = 0x00000010;
4375pub const WNOWAIT: ::c_int = 0x00000020;
4376
4377pub const P_ALL: idtype_t = 0;
4378pub const P_PID: idtype_t = 1;
4379pub const P_PGID: idtype_t = 2;
4380
4381pub const UTIME_OMIT: c_long = -2;
4382pub const UTIME_NOW: c_long = -1;
4383
4384pub const XATTR_NOFOLLOW: ::c_int = 0x0001;
4385pub const XATTR_CREATE: ::c_int = 0x0002;
4386pub const XATTR_REPLACE: ::c_int = 0x0004;
4387pub const XATTR_NOSECURITY: ::c_int = 0x0008;
4388pub const XATTR_NODEFAULT: ::c_int = 0x0010;
4389pub const XATTR_SHOWCOMPRESSION: ::c_int = 0x0020;
4390
4391pub const NET_RT_IFLIST2: ::c_int = 0x0006;
4392
4393// net/route.h
4394pub const RTF_UP: ::c_int = 0x1;
4395pub const RTF_GATEWAY: ::c_int = 0x2;
4396pub const RTF_HOST: ::c_int = 0x4;
4397pub const RTF_REJECT: ::c_int = 0x8;
4398pub const RTF_DYNAMIC: ::c_int = 0x10;
4399pub const RTF_MODIFIED: ::c_int = 0x20;
4400pub const RTF_DONE: ::c_int = 0x40;
4401pub const RTF_DELCLONE: ::c_int = 0x80;
4402pub const RTF_CLONING: ::c_int = 0x100;
4403pub const RTF_XRESOLVE: ::c_int = 0x200;
4404pub const RTF_LLINFO: ::c_int = 0x400;
4405pub const RTF_STATIC: ::c_int = 0x800;
4406pub const RTF_BLACKHOLE: ::c_int = 0x1000;
4407pub const RTF_NOIFREF: ::c_int = 0x2000;
4408pub const RTF_PROTO2: ::c_int = 0x4000;
4409pub const RTF_PROTO1: ::c_int = 0x8000;
4410pub const RTF_PRCLONING: ::c_int = 0x10000;
4411pub const RTF_WASCLONED: ::c_int = 0x20000;
4412pub const RTF_PROTO3: ::c_int = 0x40000;
4413pub const RTF_PINNED: ::c_int = 0x100000;
4414pub const RTF_LOCAL: ::c_int = 0x200000;
4415pub const RTF_BROADCAST: ::c_int = 0x400000;
4416pub const RTF_MULTICAST: ::c_int = 0x800000;
4417pub const RTF_IFSCOPE: ::c_int = 0x1000000;
4418pub const RTF_CONDEMNED: ::c_int = 0x2000000;
4419pub const RTF_IFREF: ::c_int = 0x4000000;
4420pub const RTF_PROXY: ::c_int = 0x8000000;
4421pub const RTF_ROUTER: ::c_int = 0x10000000;
4422pub const RTF_DEAD: ::c_int = 0x20000000;
4423pub const RTF_GLOBAL: ::c_int = 0x40000000;
4424
4425pub const RTM_VERSION: ::c_int = 5;
4426
4427// Message types
4428pub const RTM_ADD: ::c_int = 0x1;
4429pub const RTM_DELETE: ::c_int = 0x2;
4430pub const RTM_CHANGE: ::c_int = 0x3;
4431pub const RTM_GET: ::c_int = 0x4;
4432pub const RTM_LOSING: ::c_int = 0x5;
4433pub const RTM_REDIRECT: ::c_int = 0x6;
4434pub const RTM_MISS: ::c_int = 0x7;
4435pub const RTM_LOCK: ::c_int = 0x8;
4436pub const RTM_OLDADD: ::c_int = 0x9;
4437pub const RTM_OLDDEL: ::c_int = 0xa;
4438pub const RTM_RESOLVE: ::c_int = 0xb;
4439pub const RTM_NEWADDR: ::c_int = 0xc;
4440pub const RTM_DELADDR: ::c_int = 0xd;
4441pub const RTM_IFINFO: ::c_int = 0xe;
4442pub const RTM_NEWMADDR: ::c_int = 0xf;
4443pub const RTM_DELMADDR: ::c_int = 0x10;
4444pub const RTM_IFINFO2: ::c_int = 0x12;
4445pub const RTM_NEWMADDR2: ::c_int = 0x13;
4446pub const RTM_GET2: ::c_int = 0x14;
4447
4448// Bitmask values for rtm_inits and rmx_locks.
4449pub const RTV_MTU: ::c_int = 0x1;
4450pub const RTV_HOPCOUNT: ::c_int = 0x2;
4451pub const RTV_EXPIRE: ::c_int = 0x4;
4452pub const RTV_RPIPE: ::c_int = 0x8;
4453pub const RTV_SPIPE: ::c_int = 0x10;
4454pub const RTV_SSTHRESH: ::c_int = 0x20;
4455pub const RTV_RTT: ::c_int = 0x40;
4456pub const RTV_RTTVAR: ::c_int = 0x80;
4457
4458// Bitmask values for rtm_addrs.
4459pub const RTA_DST: ::c_int = 0x1;
4460pub const RTA_GATEWAY: ::c_int = 0x2;
4461pub const RTA_NETMASK: ::c_int = 0x4;
4462pub const RTA_GENMASK: ::c_int = 0x8;
4463pub const RTA_IFP: ::c_int = 0x10;
4464pub const RTA_IFA: ::c_int = 0x20;
4465pub const RTA_AUTHOR: ::c_int = 0x40;
4466pub const RTA_BRD: ::c_int = 0x80;
4467
4468// Index offsets for sockaddr array for alternate internal encoding.
4469pub const RTAX_DST: ::c_int = 0;
4470pub const RTAX_GATEWAY: ::c_int = 1;
4471pub const RTAX_NETMASK: ::c_int = 2;
4472pub const RTAX_GENMASK: ::c_int = 3;
4473pub const RTAX_IFP: ::c_int = 4;
4474pub const RTAX_IFA: ::c_int = 5;
4475pub const RTAX_AUTHOR: ::c_int = 6;
4476pub const RTAX_BRD: ::c_int = 7;
4477pub const RTAX_MAX: ::c_int = 8;
4478
4479pub const KERN_PROCARGS2: ::c_int = 49;
4480
4481pub const PROC_PIDTASKALLINFO: ::c_int = 2;
4482pub const PROC_PIDTBSDINFO: ::c_int = 3;
4483pub const PROC_PIDTASKINFO: ::c_int = 4;
4484pub const PROC_PIDTHREADINFO: ::c_int = 5;
4485pub const PROC_PIDVNODEPATHINFO: ::c_int = 9;
4486pub const PROC_PIDPATHINFO_MAXSIZE: ::c_int = 4096;
4487pub const PROC_CSM_ALL: ::c_uint = 0x0001;
4488pub const PROC_CSM_NOSMT: ::c_uint = 0x0002;
4489pub const PROC_CSM_TECS: ::c_uint = 0x0004;
4490pub const MAXCOMLEN: usize = 16;
4491pub const MAXTHREADNAMESIZE: usize = 64;
4492
4493pub const XUCRED_VERSION: ::c_uint = 0;
4494
4495pub const LC_SEGMENT: u32 = 0x1;
4496pub const LC_SEGMENT_64: u32 = 0x19;
4497
4498pub const MH_MAGIC: u32 = 0xfeedface;
4499pub const MH_MAGIC_64: u32 = 0xfeedfacf;
4500
4501// net/if_utun.h
4502pub const UTUN_OPT_FLAGS: ::c_int = 1;
4503pub const UTUN_OPT_IFNAME: ::c_int = 2;
4504
4505// net/bpf.h
4506pub const DLT_NULL: ::c_uint = 0; // no link-layer encapsulation
4507pub const DLT_EN10MB: ::c_uint = 1; // Ethernet (10Mb)
4508pub const DLT_EN3MB: ::c_uint = 2; // Experimental Ethernet (3Mb)
4509pub const DLT_AX25: ::c_uint = 3; // Amateur Radio AX.25
4510pub const DLT_PRONET: ::c_uint = 4; // Proteon ProNET Token Ring
4511pub const DLT_CHAOS: ::c_uint = 5; // Chaos
4512pub const DLT_IEEE802: ::c_uint = 6; // IEEE 802 Networks
4513pub const DLT_ARCNET: ::c_uint = 7; // ARCNET
4514pub const DLT_SLIP: ::c_uint = 8; // Serial Line IP
4515pub const DLT_PPP: ::c_uint = 9; // Point-to-point Protocol
4516pub const DLT_FDDI: ::c_uint = 10; // FDDI
4517pub const DLT_ATM_RFC1483: ::c_uint = 11; // LLC/SNAP encapsulated atm
4518pub const DLT_RAW: ::c_uint = 12; // raw IP
4519pub const DLT_LOOP: ::c_uint = 108;
4520
4521// https://github.com/apple/darwin-xnu/blob/master/bsd/net/bpf.h#L100
4522// sizeof(i32)
4523pub const BPF_ALIGNMENT: ::c_int = 4;
4524
4525// sys/mount.h
4526pub const MNT_NODEV: ::c_int = 0x00000010;
4527pub const MNT_UNION: ::c_int = 0x00000020;
4528pub const MNT_CPROTECT: ::c_int = 0x00000080;
4529
4530// MAC labeled / "quarantined" flag
4531pub const MNT_QUARANTINE: ::c_int = 0x00000400;
4532
4533// Flags set by internal operations.
4534pub const MNT_LOCAL: ::c_int = 0x00001000;
4535pub const MNT_QUOTA: ::c_int = 0x00002000;
4536pub const MNT_ROOTFS: ::c_int = 0x00004000;
4537pub const MNT_DOVOLFS: ::c_int = 0x00008000;
4538
4539pub const MNT_DONTBROWSE: ::c_int = 0x00100000;
4540pub const MNT_IGNORE_OWNERSHIP: ::c_int = 0x00200000;
4541pub const MNT_AUTOMOUNTED: ::c_int = 0x00400000;
4542pub const MNT_JOURNALED: ::c_int = 0x00800000;
4543pub const MNT_NOUSERXATTR: ::c_int = 0x01000000;
4544pub const MNT_DEFWRITE: ::c_int = 0x02000000;
4545pub const MNT_MULTILABEL: ::c_int = 0x04000000;
4546pub const MNT_NOATIME: ::c_int = 0x10000000;
4547pub const MNT_SNAPSHOT: ::c_int = 0x40000000;
4548
4549// External filesystem command modifier flags.
4550pub const MNT_NOBLOCK: ::c_int = 0x00020000;
4551
4552// sys/spawn.h:
4553pub const POSIX_SPAWN_RESETIDS: ::c_int = 0x01;
4554pub const POSIX_SPAWN_SETPGROUP: ::c_int = 0x02;
4555pub const POSIX_SPAWN_SETSIGDEF: ::c_int = 0x04;
4556pub const POSIX_SPAWN_SETSIGMASK: ::c_int = 0x08;
4557pub const POSIX_SPAWN_SETEXEC: ::c_int = 0x40;
4558pub const POSIX_SPAWN_START_SUSPENDED: ::c_int = 0x80;
4559pub const POSIX_SPAWN_CLOEXEC_DEFAULT: ::c_int = 0x4000;
4560
4561// sys/ipc.h:
4562pub const IPC_CREAT: ::c_int = 0x200;
4563pub const IPC_EXCL: ::c_int = 0x400;
4564pub const IPC_NOWAIT: ::c_int = 0x800;
4565pub const IPC_PRIVATE: key_t = 0;
4566
4567pub const IPC_RMID: ::c_int = 0;
4568pub const IPC_SET: ::c_int = 1;
4569pub const IPC_STAT: ::c_int = 2;
4570
4571pub const IPC_R: ::c_int = 0x100;
4572pub const IPC_W: ::c_int = 0x80;
4573pub const IPC_M: ::c_int = 0x1000;
4574
4575// sys/sem.h
4576pub const SEM_UNDO: ::c_int = 0o10000;
4577
4578pub const GETNCNT: ::c_int = 3;
4579pub const GETPID: ::c_int = 4;
4580pub const GETVAL: ::c_int = 5;
4581pub const GETALL: ::c_int = 6;
4582pub const GETZCNT: ::c_int = 7;
4583pub const SETVAL: ::c_int = 8;
4584pub const SETALL: ::c_int = 9;
4585
4586// sys/shm.h
4587pub const SHM_RDONLY: ::c_int = 0x1000;
4588pub const SHM_RND: ::c_int = 0x2000;
4589#[cfg(target_arch = "aarch64")]
4590pub const SHMLBA: ::c_int = 16 * 1024;
4591#[cfg(not(target_arch = "aarch64"))]
4592pub const SHMLBA: ::c_int = 4096;
4593pub const SHM_R: ::c_int = IPC_R;
4594pub const SHM_W: ::c_int = IPC_W;
4595
4596// Flags for chflags(2)
4597pub const UF_SETTABLE: ::c_uint = 0x0000ffff;
4598pub const UF_NODUMP: ::c_uint = 0x00000001;
4599pub const UF_IMMUTABLE: ::c_uint = 0x00000002;
4600pub const UF_APPEND: ::c_uint = 0x00000004;
4601pub const UF_OPAQUE: ::c_uint = 0x00000008;
4602pub const UF_COMPRESSED: ::c_uint = 0x00000020;
4603pub const UF_TRACKED: ::c_uint = 0x00000040;
4604pub const SF_SETTABLE: ::c_uint = 0xffff0000;
4605pub const SF_ARCHIVED: ::c_uint = 0x00010000;
4606pub const SF_IMMUTABLE: ::c_uint = 0x00020000;
4607pub const SF_APPEND: ::c_uint = 0x00040000;
4608pub const UF_HIDDEN: ::c_uint = 0x00008000;
4609
4610//<sys/timex.h>
4611pub const NTP_API: ::c_int = 4;
4612pub const MAXPHASE: ::c_long = 500000000;
4613pub const MAXFREQ: ::c_long = 500000;
4614pub const MINSEC: ::c_int = 256;
4615pub const MAXSEC: ::c_int = 2048;
4616pub const NANOSECOND: ::c_long = 1000000000;
4617pub const SCALE_PPM: ::c_int = 65;
4618pub const MAXTC: ::c_int = 10;
4619pub const MOD_OFFSET: ::c_uint = 0x0001;
4620pub const MOD_FREQUENCY: ::c_uint = 0x0002;
4621pub const MOD_MAXERROR: ::c_uint = 0x0004;
4622pub const MOD_ESTERROR: ::c_uint = 0x0008;
4623pub const MOD_STATUS: ::c_uint = 0x0010;
4624pub const MOD_TIMECONST: ::c_uint = 0x0020;
4625pub const MOD_PPSMAX: ::c_uint = 0x0040;
4626pub const MOD_TAI: ::c_uint = 0x0080;
4627pub const MOD_MICRO: ::c_uint = 0x1000;
4628pub const MOD_NANO: ::c_uint = 0x2000;
4629pub const MOD_CLKB: ::c_uint = 0x4000;
4630pub const MOD_CLKA: ::c_uint = 0x8000;
4631pub const STA_PLL: ::c_int = 0x0001;
4632pub const STA_PPSFREQ: ::c_int = 0x0002;
4633pub const STA_PPSTIME: ::c_int = 0x0004;
4634pub const STA_FLL: ::c_int = 0x0008;
4635pub const STA_INS: ::c_int = 0x0010;
4636pub const STA_DEL: ::c_int = 0x0020;
4637pub const STA_UNSYNC: ::c_int = 0x0040;
4638pub const STA_FREQHOLD: ::c_int = 0x0080;
4639pub const STA_PPSSIGNAL: ::c_int = 0x0100;
4640pub const STA_PPSJITTER: ::c_int = 0x0200;
4641pub const STA_PPSWANDER: ::c_int = 0x0400;
4642pub const STA_PPSERROR: ::c_int = 0x0800;
4643pub const STA_CLOCKERR: ::c_int = 0x1000;
4644pub const STA_NANO: ::c_int = 0x2000;
4645pub const STA_MODE: ::c_int = 0x4000;
4646pub const STA_CLK: ::c_int = 0x8000;
4647pub const STA_RONLY: ::c_int = STA_PPSSIGNAL
4648    | STA_PPSJITTER
4649    | STA_PPSWANDER
4650    | STA_PPSERROR
4651    | STA_CLOCKERR
4652    | STA_NANO
4653    | STA_MODE
4654    | STA_CLK;
4655pub const TIME_OK: ::c_int = 0;
4656pub const TIME_INS: ::c_int = 1;
4657pub const TIME_DEL: ::c_int = 2;
4658pub const TIME_OOP: ::c_int = 3;
4659pub const TIME_WAIT: ::c_int = 4;
4660pub const TIME_ERROR: ::c_int = 5;
4661
4662// <sys/mount.h>
4663pub const MNT_WAIT: ::c_int = 1;
4664pub const MNT_NOWAIT: ::c_int = 2;
4665
4666// <mach/thread_policy.h>
4667pub const THREAD_STANDARD_POLICY: ::c_int = 1;
4668pub const THREAD_STANDARD_POLICY_COUNT: ::c_int = 0;
4669pub const THREAD_EXTENDED_POLICY: ::c_int = 1;
4670pub const THREAD_TIME_CONSTRAINT_POLICY: ::c_int = 2;
4671pub const THREAD_PRECEDENCE_POLICY: ::c_int = 3;
4672pub const THREAD_AFFINITY_POLICY: ::c_int = 4;
4673pub const THREAD_AFFINITY_TAG_NULL: ::c_int = 0;
4674pub const THREAD_BACKGROUND_POLICY: ::c_int = 5;
4675pub const THREAD_BACKGROUND_POLICY_DARWIN_BG: ::c_int = 0x1000;
4676pub const THREAD_LATENCY_QOS_POLICY: ::c_int = 7;
4677pub const THREAD_THROUGHPUT_QOS_POLICY: ::c_int = 8;
4678
4679// <mach/thread_info.h>
4680pub const TH_STATE_RUNNING: ::c_int = 1;
4681pub const TH_STATE_STOPPED: ::c_int = 2;
4682pub const TH_STATE_WAITING: ::c_int = 3;
4683pub const TH_STATE_UNINTERRUPTIBLE: ::c_int = 4;
4684pub const TH_STATE_HALTED: ::c_int = 5;
4685pub const TH_FLAGS_SWAPPED: ::c_int = 0x1;
4686pub const TH_FLAGS_IDLE: ::c_int = 0x2;
4687pub const TH_FLAGS_GLOBAL_FORCED_IDLE: ::c_int = 0x4;
4688pub const THREAD_BASIC_INFO: ::c_int = 3;
4689pub const THREAD_IDENTIFIER_INFO: ::c_int = 4;
4690pub const THREAD_EXTENDED_INFO: ::c_int = 5;
4691
4692// CommonCrypto/CommonCryptoError.h
4693pub const kCCSuccess: i32 = 0;
4694pub const kCCParamError: i32 = -4300;
4695pub const kCCBufferTooSmall: i32 = -4301;
4696pub const kCCMemoryFailure: i32 = -4302;
4697pub const kCCAlignmentError: i32 = -4303;
4698pub const kCCDecodeError: i32 = -4304;
4699pub const kCCUnimplemented: i32 = -4305;
4700pub const kCCOverflow: i32 = -4306;
4701pub const kCCRNGFailure: i32 = -4307;
4702pub const kCCUnspecifiedError: i32 = -4308;
4703pub const kCCCallSequenceError: i32 = -4309;
4704pub const kCCKeySizeError: i32 = -4310;
4705pub const kCCInvalidKey: i32 = -4311;
4706
4707// mach/host_info.h
4708pub const HOST_LOAD_INFO: i32 = 1;
4709pub const HOST_VM_INFO: i32 = 2;
4710pub const HOST_CPU_LOAD_INFO: i32 = 3;
4711pub const HOST_VM_INFO64: i32 = 4;
4712pub const HOST_EXTMOD_INFO64: i32 = 5;
4713pub const HOST_EXPIRED_TASK_INFO: i32 = 6;
4714
4715// mach/vm_statistics.h
4716pub const VM_PAGE_QUERY_PAGE_PRESENT: i32 = 0x1;
4717pub const VM_PAGE_QUERY_PAGE_FICTITIOUS: i32 = 0x2;
4718pub const VM_PAGE_QUERY_PAGE_REF: i32 = 0x4;
4719pub const VM_PAGE_QUERY_PAGE_DIRTY: i32 = 0x8;
4720pub const VM_PAGE_QUERY_PAGE_PAGED_OUT: i32 = 0x10;
4721pub const VM_PAGE_QUERY_PAGE_COPIED: i32 = 0x20;
4722pub const VM_PAGE_QUERY_PAGE_SPECULATIVE: i32 = 0x40;
4723pub const VM_PAGE_QUERY_PAGE_EXTERNAL: i32 = 0x80;
4724pub const VM_PAGE_QUERY_PAGE_CS_VALIDATED: i32 = 0x100;
4725pub const VM_PAGE_QUERY_PAGE_CS_TAINTED: i32 = 0x200;
4726pub const VM_PAGE_QUERY_PAGE_CS_NX: i32 = 0x400;
4727
4728// mach/task_info.h
4729pub const TASK_THREAD_TIMES_INFO: u32 = 3;
4730pub const HOST_CPU_LOAD_INFO_COUNT: u32 = 4;
4731pub const MACH_TASK_BASIC_INFO: u32 = 20;
4732
4733pub const MACH_PORT_NULL: i32 = 0;
4734
4735pub const RUSAGE_INFO_V0: ::c_int = 0;
4736pub const RUSAGE_INFO_V1: ::c_int = 1;
4737pub const RUSAGE_INFO_V2: ::c_int = 2;
4738pub const RUSAGE_INFO_V3: ::c_int = 3;
4739pub const RUSAGE_INFO_V4: ::c_int = 4;
4740
4741// copyfile.h
4742pub const COPYFILE_ACL: ::copyfile_flags_t = 1 << 0;
4743pub const COPYFILE_STAT: ::copyfile_flags_t = 1 << 1;
4744pub const COPYFILE_XATTR: ::copyfile_flags_t = 1 << 2;
4745pub const COPYFILE_DATA: ::copyfile_flags_t = 1 << 3;
4746pub const COPYFILE_SECURITY: ::copyfile_flags_t = COPYFILE_STAT | COPYFILE_ACL;
4747pub const COPYFILE_METADATA: ::copyfile_flags_t = COPYFILE_SECURITY | COPYFILE_XATTR;
4748pub const COPYFILE_RECURSIVE: ::copyfile_flags_t = 1 << 15;
4749pub const COPYFILE_CHECK: ::copyfile_flags_t = 1 << 16;
4750pub const COPYFILE_EXCL: ::copyfile_flags_t = 1 << 17;
4751pub const COPYFILE_NOFOLLOW_SRC: ::copyfile_flags_t = 1 << 18;
4752pub const COPYFILE_NOFOLLOW_DST: ::copyfile_flags_t = 1 << 19;
4753pub const COPYFILE_MOVE: ::copyfile_flags_t = 1 << 20;
4754pub const COPYFILE_UNLINK: ::copyfile_flags_t = 1 << 21;
4755pub const COPYFILE_NOFOLLOW: ::copyfile_flags_t = COPYFILE_NOFOLLOW_SRC | COPYFILE_NOFOLLOW_DST;
4756pub const COPYFILE_PACK: ::copyfile_flags_t = 1 << 22;
4757pub const COPYFILE_UNPACK: ::copyfile_flags_t = 1 << 23;
4758pub const COPYFILE_CLONE: ::copyfile_flags_t = 1 << 24;
4759pub const COPYFILE_CLONE_FORCE: ::copyfile_flags_t = 1 << 25;
4760pub const COPYFILE_RUN_IN_PLACE: ::copyfile_flags_t = 1 << 26;
4761pub const COPYFILE_DATA_SPARSE: ::copyfile_flags_t = 1 << 27;
4762pub const COPYFILE_PRESERVE_DST_TRACKED: ::copyfile_flags_t = 1 << 28;
4763pub const COPYFILE_VERBOSE: ::copyfile_flags_t = 1 << 30;
4764pub const COPYFILE_RECURSE_ERROR: ::c_int = 0;
4765pub const COPYFILE_RECURSE_FILE: ::c_int = 1;
4766pub const COPYFILE_RECURSE_DIR: ::c_int = 2;
4767pub const COPYFILE_RECURSE_DIR_CLEANUP: ::c_int = 3;
4768pub const COPYFILE_COPY_DATA: ::c_int = 4;
4769pub const COPYFILE_COPY_XATTR: ::c_int = 5;
4770pub const COPYFILE_START: ::c_int = 1;
4771pub const COPYFILE_FINISH: ::c_int = 2;
4772pub const COPYFILE_ERR: ::c_int = 3;
4773pub const COPYFILE_PROGRESS: ::c_int = 4;
4774pub const COPYFILE_CONTINUE: ::c_int = 0;
4775pub const COPYFILE_SKIP: ::c_int = 1;
4776pub const COPYFILE_QUIT: ::c_int = 2;
4777
4778// <sys/attr.h>
4779pub const ATTR_BIT_MAP_COUNT: ::c_ushort = 5;
4780pub const FSOPT_NOFOLLOW: u32 = 0x1;
4781pub const FSOPT_NOFOLLOW_ANY: u32 = 0x800;
4782pub const FSOPT_REPORT_FULLSIZE: u32 = 0x4;
4783pub const FSOPT_PACK_INVAL_ATTRS: u32 = 0x8;
4784pub const FSOPT_ATTR_CMN_EXTENDED: u32 = 0x20;
4785pub const FSOPT_RETURN_REALDEV: u32 = 0x200;
4786pub const ATTR_CMN_NAME: attrgroup_t = 0x00000001;
4787pub const ATTR_CMN_DEVID: attrgroup_t = 0x00000002;
4788pub const ATTR_CMN_FSID: attrgroup_t = 0x00000004;
4789pub const ATTR_CMN_OBJTYPE: attrgroup_t = 0x00000008;
4790pub const ATTR_CMN_OBJTAG: attrgroup_t = 0x00000010;
4791pub const ATTR_CMN_OBJID: attrgroup_t = 0x00000020;
4792pub const ATTR_CMN_OBJPERMANENTID: attrgroup_t = 0x00000040;
4793pub const ATTR_CMN_PAROBJID: attrgroup_t = 0x00000080;
4794pub const ATTR_CMN_SCRIPT: attrgroup_t = 0x00000100;
4795pub const ATTR_CMN_CRTIME: attrgroup_t = 0x00000200;
4796pub const ATTR_CMN_MODTIME: attrgroup_t = 0x00000400;
4797pub const ATTR_CMN_CHGTIME: attrgroup_t = 0x00000800;
4798pub const ATTR_CMN_ACCTIME: attrgroup_t = 0x00001000;
4799pub const ATTR_CMN_BKUPTIME: attrgroup_t = 0x00002000;
4800pub const ATTR_CMN_FNDRINFO: attrgroup_t = 0x00004000;
4801pub const ATTR_CMN_OWNERID: attrgroup_t = 0x00008000;
4802pub const ATTR_CMN_GRPID: attrgroup_t = 0x00010000;
4803pub const ATTR_CMN_ACCESSMASK: attrgroup_t = 0x00020000;
4804pub const ATTR_CMN_FLAGS: attrgroup_t = 0x00040000;
4805pub const ATTR_CMN_GEN_COUNT: attrgroup_t = 0x00080000;
4806pub const ATTR_CMN_DOCUMENT_ID: attrgroup_t = 0x00100000;
4807pub const ATTR_CMN_USERACCESS: attrgroup_t = 0x00200000;
4808pub const ATTR_CMN_EXTENDED_SECURITY: attrgroup_t = 0x00400000;
4809pub const ATTR_CMN_UUID: attrgroup_t = 0x00800000;
4810pub const ATTR_CMN_GRPUUID: attrgroup_t = 0x01000000;
4811pub const ATTR_CMN_FILEID: attrgroup_t = 0x02000000;
4812pub const ATTR_CMN_PARENTID: attrgroup_t = 0x04000000;
4813pub const ATTR_CMN_FULLPATH: attrgroup_t = 0x08000000;
4814pub const ATTR_CMN_ADDEDTIME: attrgroup_t = 0x10000000;
4815pub const ATTR_CMN_DATA_PROTECT_FLAGS: attrgroup_t = 0x40000000;
4816pub const ATTR_CMN_RETURNED_ATTRS: attrgroup_t = 0x80000000;
4817pub const ATTR_VOL_FSTYPE: attrgroup_t = 0x00000001;
4818pub const ATTR_VOL_SIGNATURE: attrgroup_t = 0x00000002;
4819pub const ATTR_VOL_SIZE: attrgroup_t = 0x00000004;
4820pub const ATTR_VOL_SPACEFREE: attrgroup_t = 0x00000008;
4821pub const ATTR_VOL_SPACEAVAIL: attrgroup_t = 0x00000010;
4822pub const ATTR_VOL_MINALLOCATION: attrgroup_t = 0x00000020;
4823pub const ATTR_VOL_ALLOCATIONCLUMP: attrgroup_t = 0x00000040;
4824pub const ATTR_VOL_IOBLOCKSIZE: attrgroup_t = 0x00000080;
4825pub const ATTR_VOL_OBJCOUNT: attrgroup_t = 0x00000100;
4826pub const ATTR_VOL_FILECOUNT: attrgroup_t = 0x00000200;
4827pub const ATTR_VOL_DIRCOUNT: attrgroup_t = 0x00000400;
4828pub const ATTR_VOL_MAXOBJCOUNT: attrgroup_t = 0x00000800;
4829pub const ATTR_VOL_MOUNTPOINT: attrgroup_t = 0x00001000;
4830pub const ATTR_VOL_NAME: attrgroup_t = 0x00002000;
4831pub const ATTR_VOL_MOUNTFLAGS: attrgroup_t = 0x00004000;
4832pub const ATTR_VOL_MOUNTEDDEVICE: attrgroup_t = 0x00008000;
4833pub const ATTR_VOL_ENCODINGSUSED: attrgroup_t = 0x00010000;
4834pub const ATTR_VOL_CAPABILITIES: attrgroup_t = 0x00020000;
4835pub const ATTR_VOL_UUID: attrgroup_t = 0x00040000;
4836pub const ATTR_VOL_SPACEUSED: attrgroup_t = 0x00800000;
4837pub const ATTR_VOL_QUOTA_SIZE: attrgroup_t = 0x10000000;
4838pub const ATTR_VOL_RESERVED_SIZE: attrgroup_t = 0x20000000;
4839pub const ATTR_VOL_ATTRIBUTES: attrgroup_t = 0x40000000;
4840pub const ATTR_VOL_INFO: attrgroup_t = 0x80000000;
4841pub const ATTR_DIR_LINKCOUNT: attrgroup_t = 0x00000001;
4842pub const ATTR_DIR_ENTRYCOUNT: attrgroup_t = 0x00000002;
4843pub const ATTR_DIR_MOUNTSTATUS: attrgroup_t = 0x00000004;
4844pub const ATTR_DIR_ALLOCSIZE: attrgroup_t = 0x00000008;
4845pub const ATTR_DIR_IOBLOCKSIZE: attrgroup_t = 0x00000010;
4846pub const ATTR_DIR_DATALENGTH: attrgroup_t = 0x00000020;
4847pub const ATTR_FILE_LINKCOUNT: attrgroup_t = 0x00000001;
4848pub const ATTR_FILE_TOTALSIZE: attrgroup_t = 0x00000002;
4849pub const ATTR_FILE_ALLOCSIZE: attrgroup_t = 0x00000004;
4850pub const ATTR_FILE_IOBLOCKSIZE: attrgroup_t = 0x00000008;
4851pub const ATTR_FILE_DEVTYPE: attrgroup_t = 0x00000020;
4852pub const ATTR_FILE_FORKCOUNT: attrgroup_t = 0x00000080;
4853pub const ATTR_FILE_FORKLIST: attrgroup_t = 0x00000100;
4854pub const ATTR_FILE_DATALENGTH: attrgroup_t = 0x00000200;
4855pub const ATTR_FILE_DATAALLOCSIZE: attrgroup_t = 0x00000400;
4856pub const ATTR_FILE_RSRCLENGTH: attrgroup_t = 0x00001000;
4857pub const ATTR_FILE_RSRCALLOCSIZE: attrgroup_t = 0x00002000;
4858pub const ATTR_CMNEXT_RELPATH: attrgroup_t = 0x00000004;
4859pub const ATTR_CMNEXT_PRIVATESIZE: attrgroup_t = 0x00000008;
4860pub const ATTR_CMNEXT_LINKID: attrgroup_t = 0x00000010;
4861pub const ATTR_CMNEXT_NOFIRMLINKPATH: attrgroup_t = 0x00000020;
4862pub const ATTR_CMNEXT_REALDEVID: attrgroup_t = 0x00000040;
4863pub const ATTR_CMNEXT_REALFSID: attrgroup_t = 0x00000080;
4864pub const ATTR_CMNEXT_CLONEID: attrgroup_t = 0x00000100;
4865pub const ATTR_CMNEXT_EXT_FLAGS: attrgroup_t = 0x00000200;
4866pub const ATTR_CMNEXT_RECURSIVE_GENCOUNT: attrgroup_t = 0x00000400;
4867pub const DIR_MNTSTATUS_MNTPOINT: u32 = 0x1;
4868pub const VOL_CAPABILITIES_FORMAT: usize = 0;
4869pub const VOL_CAPABILITIES_INTERFACES: usize = 1;
4870pub const VOL_CAP_FMT_PERSISTENTOBJECTIDS: attrgroup_t = 0x00000001;
4871pub const VOL_CAP_FMT_SYMBOLICLINKS: attrgroup_t = 0x00000002;
4872pub const VOL_CAP_FMT_HARDLINKS: attrgroup_t = 0x00000004;
4873pub const VOL_CAP_FMT_JOURNAL: attrgroup_t = 0x00000008;
4874pub const VOL_CAP_FMT_JOURNAL_ACTIVE: attrgroup_t = 0x00000010;
4875pub const VOL_CAP_FMT_NO_ROOT_TIMES: attrgroup_t = 0x00000020;
4876pub const VOL_CAP_FMT_SPARSE_FILES: attrgroup_t = 0x00000040;
4877pub const VOL_CAP_FMT_ZERO_RUNS: attrgroup_t = 0x00000080;
4878pub const VOL_CAP_FMT_CASE_SENSITIVE: attrgroup_t = 0x00000100;
4879pub const VOL_CAP_FMT_CASE_PRESERVING: attrgroup_t = 0x00000200;
4880pub const VOL_CAP_FMT_FAST_STATFS: attrgroup_t = 0x00000400;
4881pub const VOL_CAP_FMT_2TB_FILESIZE: attrgroup_t = 0x00000800;
4882pub const VOL_CAP_FMT_OPENDENYMODES: attrgroup_t = 0x00001000;
4883pub const VOL_CAP_FMT_HIDDEN_FILES: attrgroup_t = 0x00002000;
4884pub const VOL_CAP_FMT_PATH_FROM_ID: attrgroup_t = 0x00004000;
4885pub const VOL_CAP_FMT_NO_VOLUME_SIZES: attrgroup_t = 0x00008000;
4886pub const VOL_CAP_FMT_DECMPFS_COMPRESSION: attrgroup_t = 0x00010000;
4887pub const VOL_CAP_FMT_64BIT_OBJECT_IDS: attrgroup_t = 0x00020000;
4888pub const VOL_CAP_FMT_DIR_HARDLINKS: attrgroup_t = 0x00040000;
4889pub const VOL_CAP_FMT_DOCUMENT_ID: attrgroup_t = 0x00080000;
4890pub const VOL_CAP_FMT_WRITE_GENERATION_COUNT: attrgroup_t = 0x00100000;
4891pub const VOL_CAP_FMT_NO_IMMUTABLE_FILES: attrgroup_t = 0x00200000;
4892pub const VOL_CAP_FMT_NO_PERMISSIONS: attrgroup_t = 0x00400000;
4893pub const VOL_CAP_FMT_SHARED_SPACE: attrgroup_t = 0x00800000;
4894pub const VOL_CAP_FMT_VOL_GROUPS: attrgroup_t = 0x01000000;
4895pub const VOL_CAP_FMT_SEALED: attrgroup_t = 0x02000000;
4896pub const VOL_CAP_INT_SEARCHFS: attrgroup_t = 0x00000001;
4897pub const VOL_CAP_INT_ATTRLIST: attrgroup_t = 0x00000002;
4898pub const VOL_CAP_INT_NFSEXPORT: attrgroup_t = 0x00000004;
4899pub const VOL_CAP_INT_READDIRATTR: attrgroup_t = 0x00000008;
4900pub const VOL_CAP_INT_EXCHANGEDATA: attrgroup_t = 0x00000010;
4901pub const VOL_CAP_INT_COPYFILE: attrgroup_t = 0x00000020;
4902pub const VOL_CAP_INT_ALLOCATE: attrgroup_t = 0x00000040;
4903pub const VOL_CAP_INT_VOL_RENAME: attrgroup_t = 0x00000080;
4904pub const VOL_CAP_INT_ADVLOCK: attrgroup_t = 0x00000100;
4905pub const VOL_CAP_INT_FLOCK: attrgroup_t = 0x00000200;
4906pub const VOL_CAP_INT_EXTENDED_SECURITY: attrgroup_t = 0x00000400;
4907pub const VOL_CAP_INT_USERACCESS: attrgroup_t = 0x00000800;
4908pub const VOL_CAP_INT_MANLOCK: attrgroup_t = 0x00001000;
4909pub const VOL_CAP_INT_NAMEDSTREAMS: attrgroup_t = 0x00002000;
4910pub const VOL_CAP_INT_EXTENDED_ATTR: attrgroup_t = 0x00004000;
4911pub const VOL_CAP_INT_CLONE: attrgroup_t = 0x00010000;
4912pub const VOL_CAP_INT_SNAPSHOT: attrgroup_t = 0x00020000;
4913pub const VOL_CAP_INT_RENAME_SWAP: attrgroup_t = 0x00040000;
4914pub const VOL_CAP_INT_RENAME_EXCL: attrgroup_t = 0x00080000;
4915pub const VOL_CAP_INT_RENAME_OPENFAIL: attrgroup_t = 0x00100000;
4916
4917cfg_if! {
4918    if #[cfg(libc_const_extern_fn)] {
4919        const fn __DARWIN_ALIGN32(p: usize) -> usize {
4920            const __DARWIN_ALIGNBYTES32: usize = ::mem::size_of::<u32>() - 1;
4921            p + __DARWIN_ALIGNBYTES32 & !__DARWIN_ALIGNBYTES32
4922        }
4923    } else if #[cfg(libc_const_size_of)] {
4924        fn __DARWIN_ALIGN32(p: usize) -> usize {
4925            const __DARWIN_ALIGNBYTES32: usize = ::mem::size_of::<u32>() - 1;
4926            p + __DARWIN_ALIGNBYTES32 & !__DARWIN_ALIGNBYTES32
4927        }
4928    } else {
4929        fn __DARWIN_ALIGN32(p: usize) -> usize {
4930            let __DARWIN_ALIGNBYTES32: usize = ::mem::size_of::<u32>() - 1;
4931            p + __DARWIN_ALIGNBYTES32 & !__DARWIN_ALIGNBYTES32
4932        }
4933    }
4934}
4935
4936cfg_if! {
4937    if #[cfg(libc_const_size_of)] {
4938        pub const THREAD_EXTENDED_POLICY_COUNT: mach_msg_type_number_t =
4939            (::mem::size_of::<thread_extended_policy_data_t>() / ::mem::size_of::<integer_t>())
4940            as mach_msg_type_number_t;
4941        pub const THREAD_TIME_CONSTRAINT_POLICY_COUNT: mach_msg_type_number_t =
4942            (::mem::size_of::<thread_time_constraint_policy_data_t>() /
4943             ::mem::size_of::<integer_t>()) as mach_msg_type_number_t;
4944        pub const THREAD_PRECEDENCE_POLICY_COUNT: mach_msg_type_number_t =
4945            (::mem::size_of::<thread_precedence_policy_data_t>() / ::mem::size_of::<integer_t>())
4946            as mach_msg_type_number_t;
4947        pub const THREAD_AFFINITY_POLICY_COUNT: mach_msg_type_number_t =
4948            (::mem::size_of::<thread_affinity_policy_data_t>() / ::mem::size_of::<integer_t>())
4949            as mach_msg_type_number_t;
4950        pub const THREAD_BACKGROUND_POLICY_COUNT: mach_msg_type_number_t =
4951            (::mem::size_of::<thread_background_policy_data_t>() / ::mem::size_of::<integer_t>())
4952            as mach_msg_type_number_t;
4953        pub const THREAD_LATENCY_QOS_POLICY_COUNT: mach_msg_type_number_t =
4954            (::mem::size_of::<thread_latency_qos_policy_data_t>() / ::mem::size_of::<integer_t>())
4955            as mach_msg_type_number_t;
4956        pub const THREAD_THROUGHPUT_QOS_POLICY_COUNT: mach_msg_type_number_t =
4957            (::mem::size_of::<thread_throughput_qos_policy_data_t>() /
4958             ::mem::size_of::<integer_t>()) as mach_msg_type_number_t;
4959        pub const THREAD_BASIC_INFO_COUNT: mach_msg_type_number_t =
4960            (::mem::size_of::<thread_basic_info_data_t>() / ::mem::size_of::<integer_t>())
4961            as mach_msg_type_number_t;
4962        pub const THREAD_IDENTIFIER_INFO_COUNT: mach_msg_type_number_t =
4963            (::mem::size_of::<thread_identifier_info_data_t>() / ::mem::size_of::<integer_t>())
4964            as mach_msg_type_number_t;
4965        pub const THREAD_EXTENDED_INFO_COUNT: mach_msg_type_number_t =
4966            (::mem::size_of::<thread_extended_info_data_t>() / ::mem::size_of::<integer_t>())
4967            as mach_msg_type_number_t;
4968
4969        pub const TASK_THREAD_TIMES_INFO_COUNT: u32 =
4970            (::mem::size_of::<task_thread_times_info_data_t>()
4971            / ::mem::size_of::<natural_t>()) as u32;
4972        pub const MACH_TASK_BASIC_INFO_COUNT: u32 = (::mem::size_of::<mach_task_basic_info_data_t>()
4973            / ::mem::size_of::<natural_t>()) as u32;
4974        pub const HOST_VM_INFO64_COUNT: mach_msg_type_number_t =
4975            (::mem::size_of::<vm_statistics64_data_t>() / ::mem::size_of::<integer_t>())
4976            as mach_msg_type_number_t;
4977    } else {
4978        pub const THREAD_EXTENDED_POLICY_COUNT: mach_msg_type_number_t = 1;
4979        pub const THREAD_TIME_CONSTRAINT_POLICY_COUNT: mach_msg_type_number_t = 4;
4980        pub const THREAD_PRECEDENCE_POLICY_COUNT: mach_msg_type_number_t = 1;
4981        pub const THREAD_AFFINITY_POLICY_COUNT: mach_msg_type_number_t = 1;
4982        pub const THREAD_BACKGROUND_POLICY_COUNT: mach_msg_type_number_t = 1;
4983        pub const THREAD_LATENCY_QOS_POLICY_COUNT: mach_msg_type_number_t = 1;
4984        pub const THREAD_THROUGHPUT_QOS_POLICY_COUNT: mach_msg_type_number_t = 1;
4985        pub const THREAD_BASIC_INFO_COUNT: mach_msg_type_number_t = 10;
4986        pub const THREAD_IDENTIFIER_INFO_COUNT: mach_msg_type_number_t = 6;
4987        pub const THREAD_EXTENDED_INFO_COUNT: mach_msg_type_number_t = 28;
4988        pub const TASK_THREAD_TIMES_INFO_COUNT: u32 = 4;
4989        pub const MACH_TASK_BASIC_INFO_COUNT: u32 = 12;
4990        pub const HOST_VM_INFO64_COUNT: mach_msg_type_number_t = 38;
4991    }
4992}
4993
4994f! {
4995    pub fn CMSG_NXTHDR(mhdr: *const ::msghdr,
4996                       cmsg: *const ::cmsghdr) -> *mut ::cmsghdr {
4997        if cmsg.is_null() {
4998            return ::CMSG_FIRSTHDR(mhdr);
4999        };
5000        let cmsg_len = (*cmsg).cmsg_len as usize;
5001        let next = cmsg as usize + __DARWIN_ALIGN32(cmsg_len as usize);
5002        let max = (*mhdr).msg_control as usize
5003                    + (*mhdr).msg_controllen as usize;
5004        if next + __DARWIN_ALIGN32(::mem::size_of::<::cmsghdr>()) > max {
5005            0 as *mut ::cmsghdr
5006        } else {
5007            next as *mut ::cmsghdr
5008        }
5009    }
5010
5011    pub fn CMSG_DATA(cmsg: *const ::cmsghdr) -> *mut ::c_uchar {
5012        (cmsg as *mut ::c_uchar)
5013            .offset(__DARWIN_ALIGN32(::mem::size_of::<::cmsghdr>()) as isize)
5014    }
5015
5016    pub {const} fn CMSG_SPACE(length: ::c_uint) -> ::c_uint {
5017        (__DARWIN_ALIGN32(::mem::size_of::<::cmsghdr>())
5018            + __DARWIN_ALIGN32(length as usize))
5019            as ::c_uint
5020    }
5021
5022    pub fn CMSG_LEN(length: ::c_uint) -> ::c_uint {
5023        (__DARWIN_ALIGN32(::mem::size_of::<::cmsghdr>()) + length as usize)
5024            as ::c_uint
5025    }
5026
5027    pub {const} fn VM_MAKE_TAG(id: u8) -> u32 {
5028        (id as u32) << 24u32
5029    }
5030
5031    pub fn major(dev: dev_t) -> i32 {
5032        (dev >> 24) & 0xff
5033    }
5034
5035    pub fn minor(dev: dev_t) -> i32 {
5036        dev & 0xffffff
5037    }
5038
5039    pub fn makedev(major: i32, minor: i32) -> dev_t {
5040        (major << 24) | minor
5041    }
5042}
5043
5044safe_f! {
5045    pub {const} fn WSTOPSIG(status: ::c_int) -> ::c_int {
5046        status >> 8
5047    }
5048
5049    pub {const} fn _WSTATUS(status: ::c_int) -> ::c_int {
5050        status & 0x7f
5051    }
5052
5053    pub {const} fn WIFCONTINUED(status: ::c_int) -> bool {
5054        _WSTATUS(status) == _WSTOPPED && WSTOPSIG(status) == 0x13
5055    }
5056
5057    pub {const} fn WIFSIGNALED(status: ::c_int) -> bool {
5058        _WSTATUS(status) != _WSTOPPED && _WSTATUS(status) != 0
5059    }
5060
5061    pub {const} fn WIFSTOPPED(status: ::c_int) -> bool {
5062        _WSTATUS(status) == _WSTOPPED && WSTOPSIG(status) != 0x13
5063    }
5064}
5065
5066extern "C" {
5067    pub fn setgrent();
5068    #[doc(hidden)]
5069    #[deprecated(since = "0.2.49", note = "Deprecated in MacOSX 10.5")]
5070    #[cfg_attr(not(target_arch = "aarch64"), link_name = "daemon$1050")]
5071    pub fn daemon(nochdir: ::c_int, noclose: ::c_int) -> ::c_int;
5072    #[doc(hidden)]
5073    #[deprecated(since = "0.2.49", note = "Deprecated in MacOSX 10.10")]
5074    pub fn sem_destroy(sem: *mut sem_t) -> ::c_int;
5075    #[doc(hidden)]
5076    #[deprecated(since = "0.2.49", note = "Deprecated in MacOSX 10.10")]
5077    pub fn sem_init(sem: *mut sem_t, pshared: ::c_int, value: ::c_uint) -> ::c_int;
5078    pub fn aio_read(aiocbp: *mut aiocb) -> ::c_int;
5079    pub fn aio_write(aiocbp: *mut aiocb) -> ::c_int;
5080    pub fn aio_fsync(op: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
5081    pub fn aio_error(aiocbp: *const aiocb) -> ::c_int;
5082    pub fn aio_return(aiocbp: *mut aiocb) -> ::ssize_t;
5083    #[cfg_attr(
5084        all(target_os = "macos", target_arch = "x86"),
5085        link_name = "aio_suspend$UNIX2003"
5086    )]
5087    pub fn aio_suspend(
5088        aiocb_list: *const *const aiocb,
5089        nitems: ::c_int,
5090        timeout: *const ::timespec,
5091    ) -> ::c_int;
5092    pub fn aio_cancel(fd: ::c_int, aiocbp: *mut aiocb) -> ::c_int;
5093    pub fn chflags(path: *const ::c_char, flags: ::c_uint) -> ::c_int;
5094    pub fn fchflags(fd: ::c_int, flags: ::c_uint) -> ::c_int;
5095    pub fn clock_getres(clk_id: ::clockid_t, tp: *mut ::timespec) -> ::c_int;
5096    pub fn clock_gettime(clk_id: ::clockid_t, tp: *mut ::timespec) -> ::c_int;
5097    #[cfg_attr(
5098        all(target_os = "macos", target_arch = "x86"),
5099        link_name = "confstr$UNIX2003"
5100    )]
5101    pub fn confstr(name: ::c_int, buf: *mut ::c_char, len: ::size_t) -> ::size_t;
5102    pub fn lio_listio(
5103        mode: ::c_int,
5104        aiocb_list: *const *mut aiocb,
5105        nitems: ::c_int,
5106        sevp: *mut sigevent,
5107    ) -> ::c_int;
5108
5109    pub fn dirfd(dirp: *mut ::DIR) -> ::c_int;
5110
5111    pub fn lutimes(file: *const ::c_char, times: *const ::timeval) -> ::c_int;
5112
5113    pub fn gettimeofday(tp: *mut ::timeval, tz: *mut ::c_void) -> ::c_int;
5114    pub fn getutxent() -> *mut utmpx;
5115    pub fn getutxid(ut: *const utmpx) -> *mut utmpx;
5116    pub fn getutxline(ut: *const utmpx) -> *mut utmpx;
5117    pub fn pututxline(ut: *const utmpx) -> *mut utmpx;
5118    pub fn setutxent();
5119    pub fn endutxent();
5120    pub fn utmpxname(file: *const ::c_char) -> ::c_int;
5121
5122    pub fn getnameinfo(
5123        sa: *const ::sockaddr,
5124        salen: ::socklen_t,
5125        host: *mut ::c_char,
5126        hostlen: ::socklen_t,
5127        serv: *mut ::c_char,
5128        sevlen: ::socklen_t,
5129        flags: ::c_int,
5130    ) -> ::c_int;
5131    pub fn mincore(addr: *const ::c_void, len: ::size_t, vec: *mut ::c_char) -> ::c_int;
5132    pub fn sysctlnametomib(
5133        name: *const ::c_char,
5134        mibp: *mut ::c_int,
5135        sizep: *mut ::size_t,
5136    ) -> ::c_int;
5137    #[cfg_attr(
5138        all(target_os = "macos", target_arch = "x86"),
5139        link_name = "mprotect$UNIX2003"
5140    )]
5141    pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int;
5142    pub fn semget(key: key_t, nsems: ::c_int, semflg: ::c_int) -> ::c_int;
5143    #[cfg_attr(
5144        all(target_os = "macos", target_arch = "x86"),
5145        link_name = "semctl$UNIX2003"
5146    )]
5147    pub fn semctl(semid: ::c_int, semnum: ::c_int, cmd: ::c_int, ...) -> ::c_int;
5148    pub fn semop(semid: ::c_int, sops: *mut sembuf, nsops: ::size_t) -> ::c_int;
5149    pub fn shm_open(name: *const ::c_char, oflag: ::c_int, ...) -> ::c_int;
5150    pub fn ftok(pathname: *const c_char, proj_id: ::c_int) -> key_t;
5151    pub fn shmat(shmid: ::c_int, shmaddr: *const ::c_void, shmflg: ::c_int) -> *mut ::c_void;
5152    pub fn shmdt(shmaddr: *const ::c_void) -> ::c_int;
5153    #[cfg_attr(
5154        all(target_os = "macos", target_arch = "x86"),
5155        link_name = "shmctl$UNIX2003"
5156    )]
5157    pub fn shmctl(shmid: ::c_int, cmd: ::c_int, buf: *mut ::shmid_ds) -> ::c_int;
5158    pub fn shmget(key: key_t, size: ::size_t, shmflg: ::c_int) -> ::c_int;
5159    pub fn sysctl(
5160        name: *mut ::c_int,
5161        namelen: ::c_uint,
5162        oldp: *mut ::c_void,
5163        oldlenp: *mut ::size_t,
5164        newp: *mut ::c_void,
5165        newlen: ::size_t,
5166    ) -> ::c_int;
5167    pub fn sysctlbyname(
5168        name: *const ::c_char,
5169        oldp: *mut ::c_void,
5170        oldlenp: *mut ::size_t,
5171        newp: *mut ::c_void,
5172        newlen: ::size_t,
5173    ) -> ::c_int;
5174    #[deprecated(since = "0.2.55", note = "Use the `mach2` crate instead")]
5175    pub fn mach_absolute_time() -> u64;
5176    #[deprecated(since = "0.2.55", note = "Use the `mach2` crate instead")]
5177    #[allow(deprecated)]
5178    pub fn mach_timebase_info(info: *mut ::mach_timebase_info) -> ::c_int;
5179    pub fn mach_host_self() -> mach_port_t;
5180    pub fn mach_thread_self() -> mach_port_t;
5181    pub fn pthread_setname_np(name: *const ::c_char) -> ::c_int;
5182    pub fn pthread_getname_np(thread: ::pthread_t, name: *mut ::c_char, len: ::size_t) -> ::c_int;
5183    pub fn pthread_mach_thread_np(thread: ::pthread_t) -> ::mach_port_t;
5184    pub fn pthread_from_mach_thread_np(port: ::mach_port_t) -> ::pthread_t;
5185    pub fn pthread_create_from_mach_thread(
5186        thread: *mut ::pthread_t,
5187        attr: *const ::pthread_attr_t,
5188        f: extern "C" fn(*mut ::c_void) -> *mut ::c_void,
5189        value: *mut ::c_void,
5190    ) -> ::c_int;
5191    pub fn pthread_get_stackaddr_np(thread: ::pthread_t) -> *mut ::c_void;
5192    pub fn pthread_get_stacksize_np(thread: ::pthread_t) -> ::size_t;
5193    pub fn pthread_condattr_setpshared(attr: *mut pthread_condattr_t, pshared: ::c_int) -> ::c_int;
5194    pub fn pthread_condattr_getpshared(
5195        attr: *const pthread_condattr_t,
5196        pshared: *mut ::c_int,
5197    ) -> ::c_int;
5198    pub fn pthread_mutexattr_setpshared(
5199        attr: *mut pthread_mutexattr_t,
5200        pshared: ::c_int,
5201    ) -> ::c_int;
5202    pub fn pthread_mutexattr_getpshared(
5203        attr: *const pthread_mutexattr_t,
5204        pshared: *mut ::c_int,
5205    ) -> ::c_int;
5206    pub fn pthread_rwlockattr_getpshared(
5207        attr: *const pthread_rwlockattr_t,
5208        val: *mut ::c_int,
5209    ) -> ::c_int;
5210    pub fn pthread_rwlockattr_setpshared(attr: *mut pthread_rwlockattr_t, val: ::c_int) -> ::c_int;
5211    pub fn pthread_threadid_np(thread: ::pthread_t, thread_id: *mut u64) -> ::c_int;
5212    pub fn pthread_attr_set_qos_class_np(
5213        attr: *mut pthread_attr_t,
5214        class: qos_class_t,
5215        priority: ::c_int,
5216    ) -> ::c_int;
5217    pub fn pthread_attr_get_qos_class_np(
5218        attr: *mut pthread_attr_t,
5219        class: *mut qos_class_t,
5220        priority: *mut ::c_int,
5221    ) -> ::c_int;
5222    pub fn pthread_set_qos_class_self_np(class: qos_class_t, priority: ::c_int) -> ::c_int;
5223    pub fn pthread_get_qos_class_np(
5224        thread: ::pthread_t,
5225        class: *mut qos_class_t,
5226        priority: *mut ::c_int,
5227    ) -> ::c_int;
5228    pub fn pthread_attr_getschedparam(
5229        attr: *const ::pthread_attr_t,
5230        param: *mut sched_param,
5231    ) -> ::c_int;
5232    pub fn pthread_attr_setschedparam(
5233        attr: *mut ::pthread_attr_t,
5234        param: *const sched_param,
5235    ) -> ::c_int;
5236    pub fn pthread_getschedparam(
5237        thread: ::pthread_t,
5238        policy: *mut ::c_int,
5239        param: *mut sched_param,
5240    ) -> ::c_int;
5241    pub fn pthread_setschedparam(
5242        thread: ::pthread_t,
5243        policy: ::c_int,
5244        param: *const sched_param,
5245    ) -> ::c_int;
5246
5247    // Available from Big Sur
5248    pub fn pthread_introspection_hook_install(
5249        hook: ::pthread_introspection_hook_t,
5250    ) -> ::pthread_introspection_hook_t;
5251    pub fn pthread_introspection_setspecific_np(
5252        thread: ::pthread_t,
5253        key: ::pthread_key_t,
5254        value: *const ::c_void,
5255    ) -> ::c_int;
5256    pub fn pthread_introspection_getspecific_np(
5257        thread: ::pthread_t,
5258        key: ::pthread_key_t,
5259    ) -> *mut ::c_void;
5260    pub fn pthread_jit_write_protect_np(enabled: ::c_int);
5261    pub fn pthread_jit_write_protect_supported_np() -> ::c_int;
5262    // An array of pthread_jit_write_with_callback_np must declare
5263    // the list of callbacks e.g.
5264    // #[link_section = "__DATA_CONST,__pth_jit_func"]
5265    // static callbacks: [libc::pthread_jit_write_callback_t; 2] = [native_jit_write_cb,
5266    // std::mem::transmute::<libc::pthread_jit_write_callback_t>(std::ptr::null())];
5267    // (a handy PTHREAD_JIT_WRITE_CALLBACK_NP macro for other languages).
5268    pub fn pthread_jit_write_with_callback_np(
5269        callback: ::pthread_jit_write_callback_t,
5270        ctx: *mut ::c_void,
5271    ) -> ::c_int;
5272    pub fn pthread_jit_write_freeze_callbacks_np();
5273    pub fn pthread_cpu_number_np(cpu_number_out: *mut ::size_t) -> ::c_int;
5274
5275    pub fn os_unfair_lock_lock(lock: os_unfair_lock_t);
5276    pub fn os_unfair_lock_trylock(lock: os_unfair_lock_t) -> bool;
5277    pub fn os_unfair_lock_unlock(lock: os_unfair_lock_t);
5278    pub fn os_unfair_lock_assert_owner(lock: os_unfair_lock_t);
5279    pub fn os_unfair_lock_assert_not_owner(lock: os_unfair_lock_t);
5280
5281    pub fn os_log_create(subsystem: *const ::c_char, category: *const ::c_char) -> ::os_log_t;
5282    pub fn os_log_type_enabled(oslog: ::os_log_t, tpe: ::os_log_type_t) -> bool;
5283    pub fn os_signpost_id_make_with_pointer(
5284        log: ::os_log_t,
5285        ptr: *const ::c_void,
5286    ) -> ::os_signpost_id_t;
5287    pub fn os_signpost_id_generate(log: ::os_log_t) -> ::os_signpost_id_t;
5288    pub fn os_signpost_enabled(log: ::os_log_t) -> bool;
5289
5290    pub fn thread_policy_set(
5291        thread: thread_t,
5292        flavor: thread_policy_flavor_t,
5293        policy_info: thread_policy_t,
5294        count: mach_msg_type_number_t,
5295    ) -> kern_return_t;
5296    pub fn thread_policy_get(
5297        thread: thread_t,
5298        flavor: thread_policy_flavor_t,
5299        policy_info: thread_policy_t,
5300        count: *mut mach_msg_type_number_t,
5301        get_default: *mut boolean_t,
5302    ) -> kern_return_t;
5303    pub fn thread_info(
5304        target_act: thread_inspect_t,
5305        flavor: thread_flavor_t,
5306        thread_info_out: thread_info_t,
5307        thread_info_outCnt: *mut mach_msg_type_number_t,
5308    ) -> kern_return_t;
5309    #[cfg_attr(doc, doc(alias = "__errno_location"))]
5310    #[cfg_attr(doc, doc(alias = "errno"))]
5311    pub fn __error() -> *mut ::c_int;
5312    pub fn backtrace(buf: *mut *mut ::c_void, sz: ::c_int) -> ::c_int;
5313    pub fn backtrace_symbols(addrs: *const *mut ::c_void, sz: ::c_int) -> *mut *mut ::c_char;
5314    pub fn backtrace_symbols_fd(addrs: *const *mut ::c_void, sz: ::c_int, fd: ::c_int);
5315    pub fn backtrace_from_fp(
5316        startfp: *mut ::c_void,
5317        array: *mut *mut ::c_void,
5318        size: ::c_int,
5319    ) -> ::c_int;
5320    pub fn backtrace_image_offsets(
5321        array: *const *mut ::c_void,
5322        image_offsets: *mut image_offset,
5323        size: ::c_int,
5324    );
5325    pub fn backtrace_async(
5326        array: *mut *mut ::c_void,
5327        length: ::size_t,
5328        task_id: *mut u32,
5329    ) -> ::size_t;
5330    #[cfg_attr(
5331        all(target_os = "macos", not(target_arch = "aarch64")),
5332        link_name = "statfs$INODE64"
5333    )]
5334    pub fn statfs(path: *const ::c_char, buf: *mut statfs) -> ::c_int;
5335    #[cfg_attr(
5336        all(target_os = "macos", not(target_arch = "aarch64")),
5337        link_name = "fstatfs$INODE64"
5338    )]
5339    pub fn fstatfs(fd: ::c_int, buf: *mut statfs) -> ::c_int;
5340    pub fn kevent(
5341        kq: ::c_int,
5342        changelist: *const ::kevent,
5343        nchanges: ::c_int,
5344        eventlist: *mut ::kevent,
5345        nevents: ::c_int,
5346        timeout: *const ::timespec,
5347    ) -> ::c_int;
5348    pub fn kevent64(
5349        kq: ::c_int,
5350        changelist: *const ::kevent64_s,
5351        nchanges: ::c_int,
5352        eventlist: *mut ::kevent64_s,
5353        nevents: ::c_int,
5354        flags: ::c_uint,
5355        timeout: *const ::timespec,
5356    ) -> ::c_int;
5357    pub fn mount(
5358        src: *const ::c_char,
5359        target: *const ::c_char,
5360        flags: ::c_int,
5361        data: *mut ::c_void,
5362    ) -> ::c_int;
5363    pub fn fmount(
5364        src: *const ::c_char,
5365        fd: ::c_int,
5366        flags: ::c_int,
5367        data: *mut ::c_void,
5368    ) -> ::c_int;
5369    pub fn ptrace(request: ::c_int, pid: ::pid_t, addr: *mut ::c_char, data: ::c_int) -> ::c_int;
5370    pub fn quotactl(
5371        special: *const ::c_char,
5372        cmd: ::c_int,
5373        id: ::c_int,
5374        data: *mut ::c_char,
5375    ) -> ::c_int;
5376    pub fn sethostname(name: *const ::c_char, len: ::c_int) -> ::c_int;
5377    pub fn sendfile(
5378        fd: ::c_int,
5379        s: ::c_int,
5380        offset: ::off_t,
5381        len: *mut ::off_t,
5382        hdtr: *mut ::sf_hdtr,
5383        flags: ::c_int,
5384    ) -> ::c_int;
5385    pub fn futimens(fd: ::c_int, times: *const ::timespec) -> ::c_int;
5386    pub fn utimensat(
5387        dirfd: ::c_int,
5388        path: *const ::c_char,
5389        times: *const ::timespec,
5390        flag: ::c_int,
5391    ) -> ::c_int;
5392    pub fn openpty(
5393        amaster: *mut ::c_int,
5394        aslave: *mut ::c_int,
5395        name: *mut ::c_char,
5396        termp: *mut termios,
5397        winp: *mut ::winsize,
5398    ) -> ::c_int;
5399    pub fn forkpty(
5400        amaster: *mut ::c_int,
5401        name: *mut ::c_char,
5402        termp: *mut termios,
5403        winp: *mut ::winsize,
5404    ) -> ::pid_t;
5405    pub fn login_tty(fd: ::c_int) -> ::c_int;
5406    pub fn duplocale(base: ::locale_t) -> ::locale_t;
5407    pub fn freelocale(loc: ::locale_t) -> ::c_int;
5408    pub fn localeconv_l(loc: ::locale_t) -> *mut lconv;
5409    pub fn newlocale(mask: ::c_int, locale: *const ::c_char, base: ::locale_t) -> ::locale_t;
5410    pub fn uselocale(loc: ::locale_t) -> ::locale_t;
5411    pub fn querylocale(mask: ::c_int, loc: ::locale_t) -> *const ::c_char;
5412    pub fn getpriority(which: ::c_int, who: ::id_t) -> ::c_int;
5413    pub fn setpriority(which: ::c_int, who: ::id_t, prio: ::c_int) -> ::c_int;
5414    pub fn getdomainname(name: *mut ::c_char, len: ::c_int) -> ::c_int;
5415    pub fn setdomainname(name: *const ::c_char, len: ::c_int) -> ::c_int;
5416    pub fn preadv(fd: ::c_int, iov: *const ::iovec, iovcnt: ::c_int, offset: ::off_t) -> ::ssize_t;
5417    pub fn pwritev(fd: ::c_int, iov: *const ::iovec, iovcnt: ::c_int, offset: ::off_t)
5418        -> ::ssize_t;
5419    pub fn getxattr(
5420        path: *const ::c_char,
5421        name: *const ::c_char,
5422        value: *mut ::c_void,
5423        size: ::size_t,
5424        position: u32,
5425        flags: ::c_int,
5426    ) -> ::ssize_t;
5427    pub fn fgetxattr(
5428        filedes: ::c_int,
5429        name: *const ::c_char,
5430        value: *mut ::c_void,
5431        size: ::size_t,
5432        position: u32,
5433        flags: ::c_int,
5434    ) -> ::ssize_t;
5435    pub fn setxattr(
5436        path: *const ::c_char,
5437        name: *const ::c_char,
5438        value: *const ::c_void,
5439        size: ::size_t,
5440        position: u32,
5441        flags: ::c_int,
5442    ) -> ::c_int;
5443    pub fn fsetxattr(
5444        filedes: ::c_int,
5445        name: *const ::c_char,
5446        value: *const ::c_void,
5447        size: ::size_t,
5448        position: u32,
5449        flags: ::c_int,
5450    ) -> ::c_int;
5451    pub fn listxattr(
5452        path: *const ::c_char,
5453        list: *mut ::c_char,
5454        size: ::size_t,
5455        flags: ::c_int,
5456    ) -> ::ssize_t;
5457    pub fn flistxattr(
5458        filedes: ::c_int,
5459        list: *mut ::c_char,
5460        size: ::size_t,
5461        flags: ::c_int,
5462    ) -> ::ssize_t;
5463    pub fn removexattr(path: *const ::c_char, name: *const ::c_char, flags: ::c_int) -> ::c_int;
5464    pub fn renamex_np(from: *const ::c_char, to: *const ::c_char, flags: ::c_uint) -> ::c_int;
5465    pub fn renameatx_np(
5466        fromfd: ::c_int,
5467        from: *const ::c_char,
5468        tofd: ::c_int,
5469        to: *const ::c_char,
5470        flags: ::c_uint,
5471    ) -> ::c_int;
5472    pub fn fremovexattr(filedes: ::c_int, name: *const ::c_char, flags: ::c_int) -> ::c_int;
5473
5474    pub fn getgrouplist(
5475        name: *const ::c_char,
5476        basegid: ::c_int,
5477        groups: *mut ::c_int,
5478        ngroups: *mut ::c_int,
5479    ) -> ::c_int;
5480    pub fn initgroups(user: *const ::c_char, basegroup: ::c_int) -> ::c_int;
5481
5482    #[cfg_attr(
5483        all(target_os = "macos", target_arch = "x86"),
5484        link_name = "waitid$UNIX2003"
5485    )]
5486    pub fn waitid(idtype: idtype_t, id: id_t, infop: *mut ::siginfo_t, options: ::c_int)
5487        -> ::c_int;
5488    pub fn brk(addr: *const ::c_void) -> *mut ::c_void;
5489    pub fn sbrk(increment: ::c_int) -> *mut ::c_void;
5490    pub fn settimeofday(tv: *const ::timeval, tz: *const ::timezone) -> ::c_int;
5491    #[deprecated(since = "0.2.55", note = "Use the `mach2` crate instead")]
5492    pub fn _dyld_image_count() -> u32;
5493    #[deprecated(since = "0.2.55", note = "Use the `mach2` crate instead")]
5494    #[allow(deprecated)]
5495    pub fn _dyld_get_image_header(image_index: u32) -> *const mach_header;
5496    #[deprecated(since = "0.2.55", note = "Use the `mach2` crate instead")]
5497    pub fn _dyld_get_image_vmaddr_slide(image_index: u32) -> ::intptr_t;
5498    #[deprecated(since = "0.2.55", note = "Use the `mach2` crate instead")]
5499    pub fn _dyld_get_image_name(image_index: u32) -> *const ::c_char;
5500
5501    pub fn posix_spawn(
5502        pid: *mut ::pid_t,
5503        path: *const ::c_char,
5504        file_actions: *const ::posix_spawn_file_actions_t,
5505        attrp: *const ::posix_spawnattr_t,
5506        argv: *const *mut ::c_char,
5507        envp: *const *mut ::c_char,
5508    ) -> ::c_int;
5509    pub fn posix_spawnp(
5510        pid: *mut ::pid_t,
5511        file: *const ::c_char,
5512        file_actions: *const ::posix_spawn_file_actions_t,
5513        attrp: *const ::posix_spawnattr_t,
5514        argv: *const *mut ::c_char,
5515        envp: *const *mut ::c_char,
5516    ) -> ::c_int;
5517    pub fn posix_spawnattr_init(attr: *mut posix_spawnattr_t) -> ::c_int;
5518    pub fn posix_spawnattr_destroy(attr: *mut posix_spawnattr_t) -> ::c_int;
5519    pub fn posix_spawnattr_getsigdefault(
5520        attr: *const posix_spawnattr_t,
5521        default: *mut ::sigset_t,
5522    ) -> ::c_int;
5523    pub fn posix_spawnattr_setsigdefault(
5524        attr: *mut posix_spawnattr_t,
5525        default: *const ::sigset_t,
5526    ) -> ::c_int;
5527    pub fn posix_spawnattr_getsigmask(
5528        attr: *const posix_spawnattr_t,
5529        default: *mut ::sigset_t,
5530    ) -> ::c_int;
5531    pub fn posix_spawnattr_setsigmask(
5532        attr: *mut posix_spawnattr_t,
5533        default: *const ::sigset_t,
5534    ) -> ::c_int;
5535    pub fn posix_spawnattr_getflags(
5536        attr: *const posix_spawnattr_t,
5537        flags: *mut ::c_short,
5538    ) -> ::c_int;
5539    pub fn posix_spawnattr_setflags(attr: *mut posix_spawnattr_t, flags: ::c_short) -> ::c_int;
5540    pub fn posix_spawnattr_getpgroup(
5541        attr: *const posix_spawnattr_t,
5542        flags: *mut ::pid_t,
5543    ) -> ::c_int;
5544    pub fn posix_spawnattr_setpgroup(attr: *mut posix_spawnattr_t, flags: ::pid_t) -> ::c_int;
5545    pub fn posix_spawnattr_setarchpref_np(
5546        attr: *mut posix_spawnattr_t,
5547        count: ::size_t,
5548        pref: *mut ::cpu_type_t,
5549        subpref: *mut ::cpu_subtype_t,
5550        ocount: *mut ::size_t,
5551    ) -> ::c_int;
5552    pub fn posix_spawnattr_getarchpref_np(
5553        attr: *const posix_spawnattr_t,
5554        count: ::size_t,
5555        pref: *mut ::cpu_type_t,
5556        subpref: *mut ::cpu_subtype_t,
5557        ocount: *mut ::size_t,
5558    ) -> ::c_int;
5559
5560    pub fn posix_spawn_file_actions_init(actions: *mut posix_spawn_file_actions_t) -> ::c_int;
5561    pub fn posix_spawn_file_actions_destroy(actions: *mut posix_spawn_file_actions_t) -> ::c_int;
5562    pub fn posix_spawn_file_actions_addopen(
5563        actions: *mut posix_spawn_file_actions_t,
5564        fd: ::c_int,
5565        path: *const ::c_char,
5566        oflag: ::c_int,
5567        mode: ::mode_t,
5568    ) -> ::c_int;
5569    pub fn posix_spawn_file_actions_addclose(
5570        actions: *mut posix_spawn_file_actions_t,
5571        fd: ::c_int,
5572    ) -> ::c_int;
5573    pub fn posix_spawn_file_actions_adddup2(
5574        actions: *mut posix_spawn_file_actions_t,
5575        fd: ::c_int,
5576        newfd: ::c_int,
5577    ) -> ::c_int;
5578    pub fn uname(buf: *mut ::utsname) -> ::c_int;
5579
5580    pub fn connectx(
5581        socket: ::c_int,
5582        endpoints: *const sa_endpoints_t,
5583        associd: sae_associd_t,
5584        flags: ::c_uint,
5585        iov: *const ::iovec,
5586        iovcnt: ::c_uint,
5587        len: *mut ::size_t,
5588        connid: *mut sae_connid_t,
5589    ) -> ::c_int;
5590    pub fn disconnectx(socket: ::c_int, associd: sae_associd_t, connid: sae_connid_t) -> ::c_int;
5591
5592    pub fn ntp_adjtime(buf: *mut timex) -> ::c_int;
5593    pub fn ntp_gettime(buf: *mut ntptimeval) -> ::c_int;
5594
5595    #[cfg_attr(
5596        all(target_os = "macos", not(target_arch = "aarch64")),
5597        link_name = "getmntinfo$INODE64"
5598    )]
5599    pub fn getmntinfo(mntbufp: *mut *mut statfs, flags: ::c_int) -> ::c_int;
5600    #[cfg_attr(
5601        all(target_os = "macos", not(target_arch = "aarch64")),
5602        link_name = "getfsstat$INODE64"
5603    )]
5604    pub fn getfsstat(mntbufp: *mut statfs, bufsize: ::c_int, flags: ::c_int) -> ::c_int;
5605
5606    // Copy-on-write functions.
5607    // According to the man page `flags` is an `int` but in the header
5608    // this is a `uint32_t`.
5609    pub fn clonefile(src: *const ::c_char, dst: *const ::c_char, flags: u32) -> ::c_int;
5610    pub fn clonefileat(
5611        src_dirfd: ::c_int,
5612        src: *const ::c_char,
5613        dst_dirfd: ::c_int,
5614        dst: *const ::c_char,
5615        flags: u32,
5616    ) -> ::c_int;
5617    pub fn fclonefileat(
5618        srcfd: ::c_int,
5619        dst_dirfd: ::c_int,
5620        dst: *const ::c_char,
5621        flags: u32,
5622    ) -> ::c_int;
5623
5624    pub fn copyfile(
5625        from: *const ::c_char,
5626        to: *const ::c_char,
5627        state: copyfile_state_t,
5628        flags: copyfile_flags_t,
5629    ) -> ::c_int;
5630    pub fn fcopyfile(
5631        from: ::c_int,
5632        to: ::c_int,
5633        state: copyfile_state_t,
5634        flags: copyfile_flags_t,
5635    ) -> ::c_int;
5636
5637    // Added in macOS 10.13
5638    // ISO/IEC 9899:2011 ("ISO C11") K.3.7.4.1
5639    pub fn memset_s(s: *mut ::c_void, smax: ::size_t, c: ::c_int, n: ::size_t) -> ::c_int;
5640    // Added in macOS 10.5
5641    pub fn memset_pattern4(b: *mut ::c_void, pattern4: *const ::c_void, len: ::size_t);
5642    pub fn memset_pattern8(b: *mut ::c_void, pattern8: *const ::c_void, len: ::size_t);
5643    pub fn memset_pattern16(b: *mut ::c_void, pattern16: *const ::c_void, len: ::size_t);
5644
5645    // Inherited from BSD but available from Big Sur only
5646    pub fn strtonum(
5647        __numstr: *const ::c_char,
5648        __minval: ::c_longlong,
5649        __maxval: ::c_longlong,
5650        errstrp: *mut *const ::c_char,
5651    ) -> ::c_longlong;
5652
5653    pub fn mstats() -> mstats;
5654    pub fn malloc_printf(format: *const ::c_char, ...);
5655    pub fn malloc_zone_check(zone: *mut ::malloc_zone_t) -> ::boolean_t;
5656    pub fn malloc_zone_print(zone: *mut ::malloc_zone_t, verbose: ::boolean_t);
5657    pub fn malloc_zone_statistics(zone: *mut ::malloc_zone_t, stats: *mut malloc_statistics_t);
5658    pub fn malloc_zone_log(zone: *mut ::malloc_zone_t, address: *mut ::c_void);
5659    pub fn malloc_zone_print_ptr_info(ptr: *mut ::c_void);
5660    pub fn malloc_default_zone() -> *mut ::malloc_zone_t;
5661    pub fn malloc_zone_from_ptr(ptr: *const ::c_void) -> *mut ::malloc_zone_t;
5662    pub fn malloc_zone_malloc(zone: *mut ::malloc_zone_t, size: ::size_t) -> *mut ::c_void;
5663    pub fn malloc_zone_valloc(zone: *mut ::malloc_zone_t, size: ::size_t) -> *mut ::c_void;
5664    pub fn malloc_zone_calloc(
5665        zone: *mut ::malloc_zone_t,
5666        num_items: ::size_t,
5667        size: ::size_t,
5668    ) -> *mut ::c_void;
5669    pub fn malloc_zone_realloc(
5670        zone: *mut ::malloc_zone_t,
5671        ptr: *mut ::c_void,
5672        size: ::size_t,
5673    ) -> *mut ::c_void;
5674    pub fn malloc_zone_free(zone: *mut ::malloc_zone_t, ptr: *mut ::c_void);
5675
5676    pub fn proc_listpids(
5677        t: u32,
5678        typeinfo: u32,
5679        buffer: *mut ::c_void,
5680        buffersize: ::c_int,
5681    ) -> ::c_int;
5682    pub fn proc_listallpids(buffer: *mut ::c_void, buffersize: ::c_int) -> ::c_int;
5683    pub fn proc_listpgrppids(
5684        pgrpid: ::pid_t,
5685        buffer: *mut ::c_void,
5686        buffersize: ::c_int,
5687    ) -> ::c_int;
5688    pub fn proc_listchildpids(ppid: ::pid_t, buffer: *mut ::c_void, buffersize: ::c_int)
5689        -> ::c_int;
5690    pub fn proc_pidinfo(
5691        pid: ::c_int,
5692        flavor: ::c_int,
5693        arg: u64,
5694        buffer: *mut ::c_void,
5695        buffersize: ::c_int,
5696    ) -> ::c_int;
5697    pub fn proc_pidfdinfo(
5698        pid: ::c_int,
5699        fd: ::c_int,
5700        flavor: ::c_int,
5701        buffer: *mut ::c_void,
5702        buffersize: ::c_int,
5703    ) -> ::c_int;
5704    pub fn proc_pidfileportinfo(
5705        pid: ::c_int,
5706        fileport: u32,
5707        flavor: ::c_int,
5708        buffer: *mut ::c_void,
5709        buffersize: ::c_int,
5710    ) -> ::c_int;
5711    pub fn proc_pidpath(pid: ::c_int, buffer: *mut ::c_void, buffersize: u32) -> ::c_int;
5712    pub fn proc_name(pid: ::c_int, buffer: *mut ::c_void, buffersize: u32) -> ::c_int;
5713    pub fn proc_regionfilename(
5714        pid: ::c_int,
5715        address: u64,
5716        buffer: *mut ::c_void,
5717        buffersize: u32,
5718    ) -> ::c_int;
5719    pub fn proc_kmsgbuf(buffer: *mut ::c_void, buffersize: u32) -> ::c_int;
5720    pub fn proc_libversion(major: *mut ::c_int, mintor: *mut ::c_int) -> ::c_int;
5721    pub fn proc_pid_rusage(pid: ::c_int, flavor: ::c_int, buffer: *mut rusage_info_t) -> ::c_int;
5722
5723    // Available from Big Sur
5724    pub fn proc_set_no_smt() -> ::c_int;
5725    pub fn proc_setthread_no_smt() -> ::c_int;
5726    pub fn proc_set_csm(flags: u32) -> ::c_int;
5727    pub fn proc_setthread_csm(flags: u32) -> ::c_int;
5728    /// # Notes
5729    ///
5730    /// `id` is of type [`uuid_t`].
5731    pub fn gethostuuid(id: *mut u8, timeout: *const ::timespec) -> ::c_int;
5732
5733    pub fn gethostid() -> ::c_long;
5734    pub fn sethostid(hostid: ::c_long);
5735
5736    pub fn CCRandomGenerateBytes(bytes: *mut ::c_void, size: ::size_t) -> ::CCRNGStatus;
5737
5738    pub fn _NSGetExecutablePath(buf: *mut ::c_char, bufsize: *mut u32) -> ::c_int;
5739    pub fn _NSGetEnviron() -> *mut *mut *mut ::c_char;
5740
5741    pub fn mach_vm_map(
5742        target_task: ::vm_map_t,
5743        address: *mut ::mach_vm_address_t,
5744        size: ::mach_vm_size_t,
5745        mask: ::mach_vm_offset_t,
5746        flags: ::c_int,
5747        object: ::mem_entry_name_port_t,
5748        offset: ::memory_object_offset_t,
5749        copy: ::boolean_t,
5750        cur_protection: ::vm_prot_t,
5751        max_protection: ::vm_prot_t,
5752        inheritance: ::vm_inherit_t,
5753    ) -> ::kern_return_t;
5754
5755    pub fn vm_deallocate(
5756        target_task: vm_map_t,
5757        address: vm_address_t,
5758        size: vm_size_t,
5759    ) -> ::kern_return_t;
5760
5761    pub fn host_statistics64(
5762        host_priv: host_t,
5763        flavor: host_flavor_t,
5764        host_info64_out: host_info64_t,
5765        host_info64_outCnt: *mut mach_msg_type_number_t,
5766    ) -> ::kern_return_t;
5767    pub fn host_processor_info(
5768        host: host_t,
5769        flavor: processor_flavor_t,
5770        out_processor_count: *mut natural_t,
5771        out_processor_info: *mut processor_info_array_t,
5772        out_processor_infoCnt: *mut mach_msg_type_number_t,
5773    ) -> ::kern_return_t;
5774
5775    pub static mut mach_task_self_: ::mach_port_t;
5776    pub fn task_for_pid(
5777        host: ::mach_port_t,
5778        pid: ::pid_t,
5779        task: *mut ::mach_port_t,
5780    ) -> ::kern_return_t;
5781    pub fn task_info(
5782        host: ::mach_port_t,
5783        flavor: task_flavor_t,
5784        task_info_out: task_info_t,
5785        task_info_count: *mut mach_msg_type_number_t,
5786    ) -> ::kern_return_t;
5787    pub fn task_create(
5788        target_task: ::task_t,
5789        ledgers: ::ledger_array_t,
5790        ledgersCnt: ::mach_msg_type_number_t,
5791        inherit_memory: ::boolean_t,
5792        child_task: *mut ::task_t,
5793    ) -> ::kern_return_t;
5794    pub fn task_terminate(target_task: ::task_t) -> ::kern_return_t;
5795    pub fn task_threads(
5796        target_task: ::task_inspect_t,
5797        act_list: *mut ::thread_act_array_t,
5798        act_listCnt: *mut ::mach_msg_type_number_t,
5799    ) -> ::kern_return_t;
5800    pub fn host_statistics(
5801        host_priv: host_t,
5802        flavor: host_flavor_t,
5803        host_info_out: host_info_t,
5804        host_info_outCnt: *mut mach_msg_type_number_t,
5805    ) -> ::kern_return_t;
5806
5807    // sysdir.h
5808    pub fn sysdir_start_search_path_enumeration(
5809        dir: sysdir_search_path_directory_t,
5810        domainMask: sysdir_search_path_domain_mask_t,
5811    ) -> ::sysdir_search_path_enumeration_state;
5812    pub fn sysdir_get_next_search_path_enumeration(
5813        state: ::sysdir_search_path_enumeration_state,
5814        path: *mut ::c_char,
5815    ) -> ::sysdir_search_path_enumeration_state;
5816
5817    pub static vm_page_size: vm_size_t;
5818
5819    pub fn getattrlist(
5820        path: *const ::c_char,
5821        attrList: *mut ::c_void,
5822        attrBuf: *mut ::c_void,
5823        attrBufSize: ::size_t,
5824        options: u32,
5825    ) -> ::c_int;
5826    pub fn fgetattrlist(
5827        fd: ::c_int,
5828        attrList: *mut ::c_void,
5829        attrBuf: *mut ::c_void,
5830        attrBufSize: ::size_t,
5831        options: u32,
5832    ) -> ::c_int;
5833    pub fn getattrlistat(
5834        fd: ::c_int,
5835        path: *const ::c_char,
5836        attrList: *mut ::c_void,
5837        attrBuf: *mut ::c_void,
5838        attrBufSize: ::size_t,
5839        options: ::c_ulong,
5840    ) -> ::c_int;
5841    pub fn setattrlist(
5842        path: *const ::c_char,
5843        attrList: *mut ::c_void,
5844        attrBuf: *mut ::c_void,
5845        attrBufSize: ::size_t,
5846        options: u32,
5847    ) -> ::c_int;
5848    pub fn fsetattrlist(
5849        fd: ::c_int,
5850        attrList: *mut ::c_void,
5851        attrBuf: *mut ::c_void,
5852        attrBufSize: ::size_t,
5853        options: u32,
5854    ) -> ::c_int;
5855    pub fn setattrlistat(
5856        dir_fd: ::c_int,
5857        path: *const ::c_char,
5858        attrList: *mut ::c_void,
5859        attrBuf: *mut ::c_void,
5860        attrBufSize: ::size_t,
5861        options: u32,
5862    ) -> ::c_int;
5863    pub fn getattrlistbulk(
5864        dirfd: ::c_int,
5865        attrList: *mut ::c_void,
5866        attrBuf: *mut ::c_void,
5867        attrBufSize: ::size_t,
5868        options: u64,
5869    ) -> ::c_int;
5870
5871    pub fn malloc_size(ptr: *const ::c_void) -> ::size_t;
5872    pub fn malloc_good_size(size: ::size_t) -> ::size_t;
5873
5874    pub fn dirname(path: *mut ::c_char) -> *mut ::c_char;
5875    pub fn basename(path: *mut ::c_char) -> *mut ::c_char;
5876}
5877
5878pub unsafe fn mach_task_self() -> ::mach_port_t {
5879    mach_task_self_
5880}
5881
5882cfg_if! {
5883    if #[cfg(target_os = "macos")] {
5884        extern "C" {
5885            pub fn clock_settime(clock_id: ::clockid_t, tp: *const ::timespec) -> ::c_int;
5886        }
5887    }
5888}
5889cfg_if! {
5890    if #[cfg(any(target_os = "macos", target_os = "ios"))] {
5891        extern "C" {
5892            pub fn memmem(
5893                haystack: *const ::c_void,
5894                haystacklen: ::size_t,
5895                needle: *const ::c_void,
5896                needlelen: ::size_t,
5897            ) -> *mut ::c_void;
5898            pub fn task_set_info(target_task: ::task_t,
5899                                 flavor: ::task_flavor_t,
5900                                 task_info_in: ::task_info_t,
5901                                 task_info_inCnt: ::mach_msg_type_number_t
5902            ) -> ::kern_return_t;
5903        }
5904    }
5905}
5906
5907// These require a dependency on `libiconv`, and including this when built as
5908// part of `std` means every Rust program gets it. Ideally we would have a link
5909// modifier to only include these if they are used, but we do not.
5910#[cfg_attr(not(feature = "rustc-dep-of-std"), link(name = "iconv"))]
5911extern "C" {
5912    pub fn iconv_open(tocode: *const ::c_char, fromcode: *const ::c_char) -> iconv_t;
5913    pub fn iconv(
5914        cd: iconv_t,
5915        inbuf: *mut *mut ::c_char,
5916        inbytesleft: *mut ::size_t,
5917        outbuf: *mut *mut ::c_char,
5918        outbytesleft: *mut ::size_t,
5919    ) -> ::size_t;
5920    pub fn iconv_close(cd: iconv_t) -> ::c_int;
5921}
5922
5923cfg_if! {
5924    if #[cfg(target_pointer_width = "32")] {
5925        mod b32;
5926        pub use self::b32::*;
5927    } else if #[cfg(target_pointer_width = "64")] {
5928        mod b64;
5929        pub use self::b64::*;
5930    } else {
5931        // Unknown target_arch
5932    }
5933}
5934