1 use unix::bsd::O_SYNC; 2 3 pub type clock_t = i64; 4 pub type suseconds_t = ::c_long; 5 pub type dev_t = i32; 6 pub type sigset_t = ::c_uint; 7 pub type blksize_t = i32; 8 pub type fsblkcnt_t = u64; 9 pub type fsfilcnt_t = u64; 10 pub type pthread_attr_t = *mut ::c_void; 11 pub type pthread_mutex_t = *mut ::c_void; 12 pub type pthread_mutexattr_t = *mut ::c_void; 13 pub type pthread_cond_t = *mut ::c_void; 14 pub type pthread_condattr_t = *mut ::c_void; 15 pub type pthread_rwlock_t = *mut ::c_void; 16 pub type pthread_rwlockattr_t = *mut ::c_void; 17 pub type pthread_spinlock_t = ::uintptr_t; 18 pub type caddr_t = *mut ::c_char; 19 20 // elf.h 21 22 pub type Elf32_Addr = u32; 23 pub type Elf32_Half = u16; 24 pub type Elf32_Lword = u64; 25 pub type Elf32_Off = u32; 26 pub type Elf32_Sword = i32; 27 pub type Elf32_Word = u32; 28 29 pub type Elf64_Addr = u64; 30 pub type Elf64_Half = u16; 31 pub type Elf64_Lword = u64; 32 pub type Elf64_Off = u64; 33 pub type Elf64_Sword = i32; 34 pub type Elf64_Sxword = i64; 35 pub type Elf64_Word = u32; 36 pub type Elf64_Xword = u64; 37 38 cfg_if! { 39 if #[cfg(target_pointer_width = "64")] { 40 type Elf_Addr = Elf64_Addr; 41 type Elf_Half = Elf64_Half; 42 type Elf_Phdr = Elf64_Phdr; 43 } else if #[cfg(target_pointer_width = "32")] { 44 type Elf_Addr = Elf32_Addr; 45 type Elf_Half = Elf32_Half; 46 type Elf_Phdr = Elf32_Phdr; 47 } 48 } 49 50 s! { 51 pub struct ip_mreqn { 52 pub imr_multiaddr: in_addr, 53 pub imr_address: in_addr, 54 pub imr_ifindex: ::c_int, 55 } 56 57 pub struct glob_t { 58 pub gl_pathc: ::size_t, 59 pub gl_matchc: ::size_t, 60 pub gl_offs: ::size_t, 61 pub gl_flags: ::c_int, 62 pub gl_pathv: *mut *mut ::c_char, 63 __unused1: *mut ::c_void, 64 __unused2: *mut ::c_void, 65 __unused3: *mut ::c_void, 66 __unused4: *mut ::c_void, 67 __unused5: *mut ::c_void, 68 __unused6: *mut ::c_void, 69 __unused7: *mut ::c_void, 70 } 71 72 pub struct lconv { 73 pub decimal_point: *mut ::c_char, 74 pub thousands_sep: *mut ::c_char, 75 pub grouping: *mut ::c_char, 76 pub int_curr_symbol: *mut ::c_char, 77 pub currency_symbol: *mut ::c_char, 78 pub mon_decimal_point: *mut ::c_char, 79 pub mon_thousands_sep: *mut ::c_char, 80 pub mon_grouping: *mut ::c_char, 81 pub positive_sign: *mut ::c_char, 82 pub negative_sign: *mut ::c_char, 83 pub int_frac_digits: ::c_char, 84 pub frac_digits: ::c_char, 85 pub p_cs_precedes: ::c_char, 86 pub p_sep_by_space: ::c_char, 87 pub n_cs_precedes: ::c_char, 88 pub n_sep_by_space: ::c_char, 89 pub p_sign_posn: ::c_char, 90 pub n_sign_posn: ::c_char, 91 pub int_p_cs_precedes: ::c_char, 92 pub int_p_sep_by_space: ::c_char, 93 pub int_n_cs_precedes: ::c_char, 94 pub int_n_sep_by_space: ::c_char, 95 pub int_p_sign_posn: ::c_char, 96 pub int_n_sign_posn: ::c_char, 97 } 98 99 pub struct ufs_args { 100 pub fspec: *mut ::c_char, 101 pub export_info: export_args, 102 } 103 104 pub struct mfs_args { 105 pub fspec: *mut ::c_char, 106 pub export_info: export_args, 107 // https://github.com/openbsd/src/blob/master/sys/sys/types.h#L134 108 pub base: *mut ::c_char, 109 pub size: ::c_ulong, 110 } 111 112 pub struct iso_args { 113 pub fspec: *mut ::c_char, 114 pub export_info: export_args, 115 pub flags: ::c_int, 116 pub sess: ::c_int, 117 } 118 119 pub struct nfs_args { 120 pub version: ::c_int, 121 pub addr: *mut ::sockaddr, 122 pub addrlen: ::c_int, 123 pub sotype: ::c_int, 124 pub proto: ::c_int, 125 pub fh: *mut ::c_uchar, 126 pub fhsize: ::c_int, 127 pub flags: ::c_int, 128 pub wsize: ::c_int, 129 pub rsize: ::c_int, 130 pub readdirsize: ::c_int, 131 pub timeo: ::c_int, 132 pub retrans: ::c_int, 133 pub maxgrouplist: ::c_int, 134 pub readahead: ::c_int, 135 pub leaseterm: ::c_int, 136 pub deadthresh: ::c_int, 137 pub hostname: *mut ::c_char, 138 pub acregmin: ::c_int, 139 pub acregmax: ::c_int, 140 pub acdirmin: ::c_int, 141 pub acdirmax: ::c_int, 142 } 143 144 pub struct msdosfs_args { 145 pub fspec: *mut ::c_char, 146 pub export_info: export_args, 147 pub uid: ::uid_t, 148 pub gid: ::gid_t, 149 pub mask: ::mode_t, 150 pub flags: ::c_int, 151 } 152 153 pub struct ntfs_args { 154 pub fspec: *mut ::c_char, 155 pub export_info: export_args, 156 pub uid: ::uid_t, 157 pub gid: ::gid_t, 158 pub mode: ::mode_t, 159 pub flag: ::c_ulong, 160 } 161 162 pub struct udf_args { 163 pub fspec: *mut ::c_char, 164 pub lastblock: u32, 165 } 166 167 pub struct tmpfs_args { 168 pub ta_version: ::c_int, 169 pub ta_nodes_max: ::ino_t, 170 pub ta_size_max: ::off_t, 171 pub ta_root_uid: ::uid_t, 172 pub ta_root_gid: ::gid_t, 173 pub ta_root_mode: ::mode_t, 174 } 175 176 pub struct fusefs_args { 177 pub name: *mut ::c_char, 178 pub fd: ::c_int, 179 pub max_read: ::c_int, 180 pub allow_other: ::c_int, 181 } 182 183 pub struct xucred { 184 pub cr_uid: ::uid_t, 185 pub cr_gid: ::gid_t, 186 pub cr_ngroups: ::c_short, 187 //https://github.com/openbsd/src/blob/master/sys/sys/syslimits.h#L44 188 pub cr_groups: [::gid_t; 16], 189 } 190 191 pub struct export_args { 192 pub ex_flags: ::c_int, 193 pub ex_root: ::uid_t, 194 pub ex_anon: xucred, 195 pub ex_addr: *mut ::sockaddr, 196 pub ex_addrlen: ::c_int, 197 pub ex_mask: *mut ::sockaddr, 198 pub ex_masklen: ::c_int, 199 } 200 201 pub struct ip_mreq { 202 pub imr_multiaddr: in_addr, 203 pub imr_interface: in_addr, 204 } 205 206 pub struct in_addr { 207 pub s_addr: ::in_addr_t, 208 } 209 210 pub struct sockaddr_in { 211 pub sin_len: u8, 212 pub sin_family: ::sa_family_t, 213 pub sin_port: ::in_port_t, 214 pub sin_addr: ::in_addr, 215 pub sin_zero: [i8; 8], 216 } 217 218 pub struct splice { 219 pub sp_fd: ::c_int, 220 pub sp_max: ::off_t, 221 pub sp_idle: ::timeval, 222 } 223 224 pub struct kevent { 225 pub ident: ::uintptr_t, 226 pub filter: ::c_short, 227 pub flags: ::c_ushort, 228 pub fflags: ::c_uint, 229 pub data: i64, 230 pub udata: *mut ::c_void, 231 } 232 233 pub struct stat { 234 pub st_mode: ::mode_t, 235 pub st_dev: ::dev_t, 236 pub st_ino: ::ino_t, 237 pub st_nlink: ::nlink_t, 238 pub st_uid: ::uid_t, 239 pub st_gid: ::gid_t, 240 pub st_rdev: ::dev_t, 241 pub st_atime: ::time_t, 242 pub st_atime_nsec: ::c_long, 243 pub st_mtime: ::time_t, 244 pub st_mtime_nsec: ::c_long, 245 pub st_ctime: ::time_t, 246 pub st_ctime_nsec: ::c_long, 247 pub st_size: ::off_t, 248 pub st_blocks: ::blkcnt_t, 249 pub st_blksize: ::blksize_t, 250 pub st_flags: u32, 251 pub st_gen: u32, 252 pub st_birthtime: ::time_t, 253 pub st_birthtime_nsec: ::c_long, 254 } 255 256 pub struct statvfs { 257 pub f_bsize: ::c_ulong, 258 pub f_frsize: ::c_ulong, 259 pub f_blocks: ::fsblkcnt_t, 260 pub f_bfree: ::fsblkcnt_t, 261 pub f_bavail: ::fsblkcnt_t, 262 pub f_files: ::fsfilcnt_t, 263 pub f_ffree: ::fsfilcnt_t, 264 pub f_favail: ::fsfilcnt_t, 265 pub f_fsid: ::c_ulong, 266 pub f_flag: ::c_ulong, 267 pub f_namemax: ::c_ulong, 268 } 269 270 pub struct addrinfo { 271 pub ai_flags: ::c_int, 272 pub ai_family: ::c_int, 273 pub ai_socktype: ::c_int, 274 pub ai_protocol: ::c_int, 275 pub ai_addrlen: ::socklen_t, 276 pub ai_addr: *mut ::sockaddr, 277 pub ai_canonname: *mut ::c_char, 278 pub ai_next: *mut ::addrinfo, 279 } 280 281 pub struct Dl_info { 282 pub dli_fname: *const ::c_char, 283 pub dli_fbase: *mut ::c_void, 284 pub dli_sname: *const ::c_char, 285 pub dli_saddr: *mut ::c_void, 286 } 287 288 pub struct if_data { 289 pub ifi_type: ::c_uchar, 290 pub ifi_addrlen: ::c_uchar, 291 pub ifi_hdrlen: ::c_uchar, 292 pub ifi_link_state: ::c_uchar, 293 pub ifi_mtu: u32, 294 pub ifi_metric: u32, 295 pub ifi_rdomain: u32, 296 pub ifi_baudrate: u64, 297 pub ifi_ipackets: u64, 298 pub ifi_ierrors: u64, 299 pub ifi_opackets: u64, 300 pub ifi_oerrors: u64, 301 pub ifi_collisions: u64, 302 pub ifi_ibytes: u64, 303 pub ifi_obytes: u64, 304 pub ifi_imcasts: u64, 305 pub ifi_omcasts: u64, 306 pub ifi_iqdrops: u64, 307 pub ifi_oqdrops: u64, 308 pub ifi_noproto: u64, 309 pub ifi_capabilities: u32, 310 pub ifi_lastchange: ::timeval, 311 } 312 313 pub struct if_msghdr { 314 pub ifm_msglen: ::c_ushort, 315 pub ifm_version: ::c_uchar, 316 pub ifm_type: ::c_uchar, 317 pub ifm_hdrlen: ::c_ushort, 318 pub ifm_index: ::c_ushort, 319 pub ifm_tableid: ::c_ushort, 320 pub ifm_pad1: ::c_uchar, 321 pub ifm_pad2: ::c_uchar, 322 pub ifm_addrs: ::c_int, 323 pub ifm_flags: ::c_int, 324 pub ifm_xflags: ::c_int, 325 pub ifm_data: if_data, 326 } 327 328 pub struct sockaddr_dl { 329 pub sdl_len: ::c_uchar, 330 pub sdl_family: ::c_uchar, 331 pub sdl_index: ::c_ushort, 332 pub sdl_type: ::c_uchar, 333 pub sdl_nlen: ::c_uchar, 334 pub sdl_alen: ::c_uchar, 335 pub sdl_slen: ::c_uchar, 336 pub sdl_data: [::c_char; 24], 337 } 338 339 pub struct sockpeercred { 340 pub uid: ::uid_t, 341 pub gid: ::gid_t, 342 pub pid: ::pid_t, 343 } 344 345 pub struct arphdr { 346 pub ar_hrd: u16, 347 pub ar_pro: u16, 348 pub ar_hln: u8, 349 pub ar_pln: u8, 350 pub ar_op: u16, 351 } 352 353 pub struct shmid_ds { 354 pub shm_perm: ::ipc_perm, 355 pub shm_segsz: ::c_int, 356 pub shm_lpid: ::pid_t, 357 pub shm_cpid: ::pid_t, 358 pub shm_nattch: ::c_short, 359 pub shm_atime: ::time_t, 360 __shm_atimensec: c_long, 361 pub shm_dtime: ::time_t, 362 __shm_dtimensec: c_long, 363 pub shm_ctime: ::time_t, 364 __shm_ctimensec: c_long, 365 pub shm_internal: *mut ::c_void, 366 } 367 368 // elf.h 369 pub struct Elf32_Phdr { 370 pub p_type: Elf32_Word, 371 pub p_offset: Elf32_Off, 372 pub p_vaddr: Elf32_Addr, 373 pub p_paddr: Elf32_Addr, 374 pub p_filesz: Elf32_Word, 375 pub p_memsz: Elf32_Word, 376 pub p_flags: Elf32_Word, 377 pub p_align: Elf32_Word, 378 } 379 380 pub struct Elf64_Phdr { 381 pub p_type: Elf64_Word, 382 pub p_flags: Elf64_Word, 383 pub p_offset: Elf64_Off, 384 pub p_vaddr: Elf64_Addr, 385 pub p_paddr: Elf64_Addr, 386 pub p_filesz: Elf64_Xword, 387 pub p_memsz: Elf64_Xword, 388 pub p_align: Elf64_Xword, 389 } 390 391 // link.h 392 393 pub struct dl_phdr_info { 394 pub dlpi_addr: Elf_Addr, 395 pub dlpi_name: *const ::c_char, 396 pub dlpi_phdr: *const Elf_Phdr, 397 pub dlpi_phnum: Elf_Half, 398 } 399 400 // sys/sysctl.h 401 pub struct kinfo_vmentry { 402 pub kve_start: ::c_ulong, 403 pub kve_end: ::c_ulong, 404 pub kve_guard: ::c_ulong, 405 pub kve_fspace: ::c_ulong, 406 pub kve_fspace_augment: ::c_ulong, 407 pub kve_offset: u64, 408 pub kve_wired_count: ::c_int, 409 pub kve_etype: ::c_int, 410 pub kve_protection: ::c_int, 411 pub kve_max_protection: ::c_int, 412 pub kve_advice: ::c_int, 413 pub kve_inheritance: ::c_int, 414 pub kve_flags: u8, 415 } 416 417 pub struct ptrace_state { 418 pub pe_report_event: ::c_int, 419 pub pe_other_pid: ::pid_t, 420 pub pe_tid: ::pid_t, 421 } 422 423 pub struct ptrace_thread_state { 424 pub pts_tid: ::pid_t, 425 } 426 } 427 428 impl siginfo_t { si_addr(&self) -> *mut ::c_char429 pub unsafe fn si_addr(&self) -> *mut ::c_char { 430 self.si_addr 431 } 432 si_value(&self) -> ::sigval433 pub unsafe fn si_value(&self) -> ::sigval { 434 #[repr(C)] 435 struct siginfo_timer { 436 _si_signo: ::c_int, 437 _si_errno: ::c_int, 438 _si_code: ::c_int, 439 _pid: ::pid_t, 440 _uid: ::uid_t, 441 value: ::sigval, 442 } 443 (*(self as *const siginfo_t as *const siginfo_timer)).value 444 } 445 } 446 447 s_no_extra_traits! { 448 pub struct dirent { 449 pub d_fileno: ::ino_t, 450 pub d_off: ::off_t, 451 pub d_reclen: u16, 452 pub d_type: u8, 453 pub d_namlen: u8, 454 __d_padding: [u8; 4], 455 pub d_name: [::c_char; 256], 456 } 457 458 pub struct sockaddr_storage { 459 pub ss_len: u8, 460 pub ss_family: ::sa_family_t, 461 __ss_pad1: [u8; 6], 462 __ss_pad2: i64, 463 __ss_pad3: [u8; 240], 464 } 465 466 pub struct siginfo_t { 467 pub si_signo: ::c_int, 468 pub si_code: ::c_int, 469 pub si_errno: ::c_int, 470 pub si_addr: *mut ::c_char, 471 #[cfg(target_pointer_width = "32")] 472 __pad: [u8; 112], 473 #[cfg(target_pointer_width = "64")] 474 __pad: [u8; 108], 475 } 476 477 pub struct lastlog { 478 ll_time: ::time_t, 479 ll_line: [::c_char; UT_LINESIZE], 480 ll_host: [::c_char; UT_HOSTSIZE], 481 } 482 483 pub struct utmp { 484 pub ut_line: [::c_char; UT_LINESIZE], 485 pub ut_name: [::c_char; UT_NAMESIZE], 486 pub ut_host: [::c_char; UT_HOSTSIZE], 487 pub ut_time: ::time_t, 488 } 489 490 pub union mount_info { 491 pub ufs_args: ufs_args, 492 pub mfs_args: mfs_args, 493 pub nfs_args: nfs_args, 494 pub iso_args: iso_args, 495 pub msdosfs_args: msdosfs_args, 496 pub ntfs_args: ntfs_args, 497 pub tmpfs_args: tmpfs_args, 498 align: [::c_char; 160], 499 } 500 501 } 502 503 cfg_if! { 504 if #[cfg(feature = "extra_traits")] { 505 impl PartialEq for dirent { 506 fn eq(&self, other: &dirent) -> bool { 507 self.d_fileno == other.d_fileno 508 && self.d_off == other.d_off 509 && self.d_reclen == other.d_reclen 510 && self.d_type == other.d_type 511 && self.d_namlen == other.d_namlen 512 && self 513 .d_name 514 .iter() 515 .zip(other.d_name.iter()) 516 .all(|(a,b)| a == b) 517 } 518 } 519 520 impl Eq for dirent {} 521 522 impl ::fmt::Debug for dirent { 523 fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { 524 f.debug_struct("dirent") 525 .field("d_fileno", &self.d_fileno) 526 .field("d_off", &self.d_off) 527 .field("d_reclen", &self.d_reclen) 528 .field("d_type", &self.d_type) 529 .field("d_namlen", &self.d_namlen) 530 // FIXME: .field("d_name", &self.d_name) 531 .finish() 532 } 533 } 534 535 impl ::hash::Hash for dirent { 536 fn hash<H: ::hash::Hasher>(&self, state: &mut H) { 537 self.d_fileno.hash(state); 538 self.d_off.hash(state); 539 self.d_reclen.hash(state); 540 self.d_type.hash(state); 541 self.d_namlen.hash(state); 542 self.d_name.hash(state); 543 } 544 } 545 546 impl PartialEq for sockaddr_storage { 547 fn eq(&self, other: &sockaddr_storage) -> bool { 548 self.ss_len == other.ss_len 549 && self.ss_family == other.ss_family 550 } 551 } 552 553 impl Eq for sockaddr_storage {} 554 555 impl ::fmt::Debug for sockaddr_storage { 556 fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { 557 f.debug_struct("sockaddr_storage") 558 .field("ss_len", &self.ss_len) 559 .field("ss_family", &self.ss_family) 560 .finish() 561 } 562 } 563 564 impl ::hash::Hash for sockaddr_storage { 565 fn hash<H: ::hash::Hasher>(&self, state: &mut H) { 566 self.ss_len.hash(state); 567 self.ss_family.hash(state); 568 } 569 } 570 571 impl PartialEq for siginfo_t { 572 fn eq(&self, other: &siginfo_t) -> bool { 573 self.si_signo == other.si_signo 574 && self.si_code == other.si_code 575 && self.si_errno == other.si_errno 576 && self.si_addr == other.si_addr 577 } 578 } 579 580 impl Eq for siginfo_t {} 581 582 impl ::fmt::Debug for siginfo_t { 583 fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { 584 f.debug_struct("siginfo_t") 585 .field("si_signo", &self.si_signo) 586 .field("si_code", &self.si_code) 587 .field("si_errno", &self.si_errno) 588 .field("si_addr", &self.si_addr) 589 .finish() 590 } 591 } 592 593 impl ::hash::Hash for siginfo_t { 594 fn hash<H: ::hash::Hasher>(&self, state: &mut H) { 595 self.si_signo.hash(state); 596 self.si_code.hash(state); 597 self.si_errno.hash(state); 598 self.si_addr.hash(state); 599 } 600 } 601 602 impl PartialEq for lastlog { 603 fn eq(&self, other: &lastlog) -> bool { 604 self.ll_time == other.ll_time 605 && self 606 .ll_line 607 .iter() 608 .zip(other.ll_line.iter()) 609 .all(|(a,b)| a == b) 610 && self 611 .ll_host 612 .iter() 613 .zip(other.ll_host.iter()) 614 .all(|(a,b)| a == b) 615 } 616 } 617 618 impl Eq for lastlog {} 619 620 impl ::fmt::Debug for lastlog { 621 fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { 622 f.debug_struct("lastlog") 623 .field("ll_time", &self.ll_time) 624 // FIXME: .field("ll_line", &self.ll_line) 625 // FIXME: .field("ll_host", &self.ll_host) 626 .finish() 627 } 628 } 629 630 impl ::hash::Hash for lastlog { 631 fn hash<H: ::hash::Hasher>(&self, state: &mut H) { 632 self.ll_time.hash(state); 633 self.ll_line.hash(state); 634 self.ll_host.hash(state); 635 } 636 } 637 638 impl PartialEq for utmp { 639 fn eq(&self, other: &utmp) -> bool { 640 self.ut_time == other.ut_time 641 && self 642 .ut_line 643 .iter() 644 .zip(other.ut_line.iter()) 645 .all(|(a,b)| a == b) 646 && self 647 .ut_name 648 .iter() 649 .zip(other.ut_name.iter()) 650 .all(|(a,b)| a == b) 651 && self 652 .ut_host 653 .iter() 654 .zip(other.ut_host.iter()) 655 .all(|(a,b)| a == b) 656 } 657 } 658 659 impl Eq for utmp {} 660 661 impl ::fmt::Debug for utmp { 662 fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { 663 f.debug_struct("utmp") 664 // FIXME: .field("ut_line", &self.ut_line) 665 // FIXME: .field("ut_name", &self.ut_name) 666 // FIXME: .field("ut_host", &self.ut_host) 667 .field("ut_time", &self.ut_time) 668 .finish() 669 } 670 } 671 672 impl ::hash::Hash for utmp { 673 fn hash<H: ::hash::Hasher>(&self, state: &mut H) { 674 self.ut_line.hash(state); 675 self.ut_name.hash(state); 676 self.ut_host.hash(state); 677 self.ut_time.hash(state); 678 } 679 } 680 681 impl PartialEq for mount_info { 682 fn eq(&self, other: &mount_info) -> bool { 683 unsafe { 684 self.align 685 .iter() 686 .zip(other.align.iter()) 687 .all(|(a,b)| a == b) 688 } 689 } 690 } 691 692 impl Eq for mount_info { } 693 694 impl ::fmt::Debug for mount_info { 695 fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { 696 f.debug_struct("mount_info") 697 // FIXME: .field("align", &self.align) 698 .finish() 699 } 700 } 701 702 impl ::hash::Hash for mount_info { 703 fn hash<H: ::hash::Hasher>(&self, state: &mut H) { 704 unsafe { self.align.hash(state) }; 705 } 706 } 707 } 708 } 709 710 cfg_if! { 711 if #[cfg(libc_union)] { 712 s_no_extra_traits! { 713 // This type uses the union mount_info: 714 pub struct statfs { 715 pub f_flags: u32, 716 pub f_bsize: u32, 717 pub f_iosize: u32, 718 pub f_blocks: u64, 719 pub f_bfree: u64, 720 pub f_bavail: i64, 721 pub f_files: u64, 722 pub f_ffree: u64, 723 pub f_favail: i64, 724 pub f_syncwrites: u64, 725 pub f_syncreads: u64, 726 pub f_asyncwrites: u64, 727 pub f_asyncreads: u64, 728 pub f_fsid: ::fsid_t, 729 pub f_namemax: u32, 730 pub f_owner: ::uid_t, 731 pub f_ctime: u64, 732 pub f_fstypename: [::c_char; 16], 733 pub f_mntonname: [::c_char; 90], 734 pub f_mntfromname: [::c_char; 90], 735 pub f_mntfromspec: [::c_char; 90], 736 pub mount_info: mount_info, 737 } 738 } 739 740 cfg_if! { 741 if #[cfg(feature = "extra_traits")] { 742 impl PartialEq for statfs { 743 fn eq(&self, other: &statfs) -> bool { 744 self.f_flags == other.f_flags 745 && self.f_bsize == other.f_bsize 746 && self.f_iosize == other.f_iosize 747 && self.f_blocks == other.f_blocks 748 && self.f_bfree == other.f_bfree 749 && self.f_bavail == other.f_bavail 750 && self.f_files == other.f_files 751 && self.f_ffree == other.f_ffree 752 && self.f_favail == other.f_favail 753 && self.f_syncwrites == other.f_syncwrites 754 && self.f_syncreads == other.f_syncreads 755 && self.f_asyncwrites == other.f_asyncwrites 756 && self.f_asyncreads == other.f_asyncreads 757 && self.f_fsid == other.f_fsid 758 && self.f_namemax == other.f_namemax 759 && self.f_owner == other.f_owner 760 && self.f_ctime == other.f_ctime 761 && self.f_fstypename 762 .iter() 763 .zip(other.f_fstypename.iter()) 764 .all(|(a,b)| a == b) 765 && self.f_mntonname 766 .iter() 767 .zip(other.f_mntonname.iter()) 768 .all(|(a,b)| a == b) 769 && self.f_mntfromname 770 .iter() 771 .zip(other.f_mntfromname.iter()) 772 .all(|(a,b)| a == b) 773 && self.f_mntfromspec 774 .iter() 775 .zip(other.f_mntfromspec.iter()) 776 .all(|(a,b)| a == b) 777 && self.mount_info == other.mount_info 778 } 779 } 780 781 impl Eq for statfs { } 782 783 impl ::fmt::Debug for statfs { 784 fn fmt(&self, f: &mut ::fmt::Formatter) 785 -> ::fmt::Result { 786 f.debug_struct("statfs") 787 .field("f_flags", &self.f_flags) 788 .field("f_bsize", &self.f_bsize) 789 .field("f_iosize", &self.f_iosize) 790 .field("f_blocks", &self.f_blocks) 791 .field("f_bfree", &self.f_bfree) 792 .field("f_bavail", &self.f_bavail) 793 .field("f_files", &self.f_files) 794 .field("f_ffree", &self.f_ffree) 795 .field("f_favail", &self.f_favail) 796 .field("f_syncwrites", &self.f_syncwrites) 797 .field("f_syncreads", &self.f_syncreads) 798 .field("f_asyncwrites", &self.f_asyncwrites) 799 .field("f_asyncreads", &self.f_asyncreads) 800 .field("f_fsid", &self.f_fsid) 801 .field("f_namemax", &self.f_namemax) 802 .field("f_owner", &self.f_owner) 803 .field("f_ctime", &self.f_ctime) 804 // FIXME: .field("f_fstypename", &self.f_fstypename) 805 // FIXME: .field("f_mntonname", &self.f_mntonname) 806 // FIXME: .field("f_mntfromname", &self.f_mntfromname) 807 // FIXME: .field("f_mntfromspec", &self.f_mntfromspec) 808 .field("mount_info", &self.mount_info) 809 .finish() 810 } 811 } 812 813 impl ::hash::Hash for statfs { 814 fn hash<H: ::hash::Hasher>(&self, state: &mut H) { 815 self.f_flags.hash(state); 816 self.f_bsize.hash(state); 817 self.f_iosize.hash(state); 818 self.f_blocks.hash(state); 819 self.f_bfree.hash(state); 820 self.f_bavail.hash(state); 821 self.f_files.hash(state); 822 self.f_ffree.hash(state); 823 self.f_favail.hash(state); 824 self.f_syncwrites.hash(state); 825 self.f_syncreads.hash(state); 826 self.f_asyncwrites.hash(state); 827 self.f_asyncreads.hash(state); 828 self.f_fsid.hash(state); 829 self.f_namemax.hash(state); 830 self.f_owner.hash(state); 831 self.f_ctime.hash(state); 832 self.f_fstypename.hash(state); 833 self.f_mntonname.hash(state); 834 self.f_mntfromname.hash(state); 835 self.f_mntfromspec.hash(state); 836 self.mount_info.hash(state); 837 } 838 } 839 } 840 } 841 } 842 } 843 844 pub const UT_NAMESIZE: usize = 32; 845 pub const UT_LINESIZE: usize = 8; 846 pub const UT_HOSTSIZE: usize = 256; 847 848 pub const O_CLOEXEC: ::c_int = 0x10000; 849 pub const O_DIRECTORY: ::c_int = 0x20000; 850 pub const O_RSYNC: ::c_int = O_SYNC; 851 852 pub const MS_SYNC: ::c_int = 0x0002; 853 pub const MS_INVALIDATE: ::c_int = 0x0004; 854 855 pub const POLLNORM: ::c_short = ::POLLRDNORM; 856 857 pub const ENOATTR: ::c_int = 83; 858 pub const EILSEQ: ::c_int = 84; 859 pub const EOVERFLOW: ::c_int = 87; 860 pub const ECANCELED: ::c_int = 88; 861 pub const EIDRM: ::c_int = 89; 862 pub const ENOMSG: ::c_int = 90; 863 pub const ENOTSUP: ::c_int = 91; 864 pub const EBADMSG: ::c_int = 92; 865 pub const ENOTRECOVERABLE: ::c_int = 93; 866 pub const EOWNERDEAD: ::c_int = 94; 867 pub const EPROTO: ::c_int = 95; 868 pub const ELAST: ::c_int = 95; 869 870 pub const F_DUPFD_CLOEXEC: ::c_int = 10; 871 872 pub const UTIME_OMIT: c_long = -1; 873 pub const UTIME_NOW: c_long = -2; 874 875 pub const AT_FDCWD: ::c_int = -100; 876 pub const AT_EACCESS: ::c_int = 0x01; 877 pub const AT_SYMLINK_NOFOLLOW: ::c_int = 0x02; 878 pub const AT_SYMLINK_FOLLOW: ::c_int = 0x04; 879 pub const AT_REMOVEDIR: ::c_int = 0x08; 880 881 #[deprecated(since = "0.2.64", note = "Not stable across OS versions")] 882 pub const RLIM_NLIMITS: ::c_int = 9; 883 884 pub const SO_TIMESTAMP: ::c_int = 0x0800; 885 pub const SO_SNDTIMEO: ::c_int = 0x1005; 886 pub const SO_RCVTIMEO: ::c_int = 0x1006; 887 pub const SO_BINDANY: ::c_int = 0x1000; 888 pub const SO_NETPROC: ::c_int = 0x1020; 889 pub const SO_RTABLE: ::c_int = 0x1021; 890 pub const SO_PEERCRED: ::c_int = 0x1022; 891 pub const SO_SPLICE: ::c_int = 0x1023; 892 893 // sys/netinet/in.h 894 // Protocols (RFC 1700) 895 // NOTE: These are in addition to the constants defined in src/unix/mod.rs 896 897 // IPPROTO_IP defined in src/unix/mod.rs 898 /// Hop-by-hop option header 899 pub const IPPROTO_HOPOPTS: ::c_int = 0; 900 // IPPROTO_ICMP defined in src/unix/mod.rs 901 /// group mgmt protocol 902 pub const IPPROTO_IGMP: ::c_int = 2; 903 /// gateway^2 (deprecated) 904 pub const IPPROTO_GGP: ::c_int = 3; 905 /// for compatibility 906 pub const IPPROTO_IPIP: ::c_int = 4; 907 // IPPROTO_TCP defined in src/unix/mod.rs 908 /// exterior gateway protocol 909 pub const IPPROTO_EGP: ::c_int = 8; 910 /// pup 911 pub const IPPROTO_PUP: ::c_int = 12; 912 // IPPROTO_UDP defined in src/unix/mod.rs 913 /// xns idp 914 pub const IPPROTO_IDP: ::c_int = 22; 915 /// tp-4 w/ class negotiation 916 pub const IPPROTO_TP: ::c_int = 29; 917 // IPPROTO_IPV6 defined in src/unix/mod.rs 918 /// IP6 routing header 919 pub const IPPROTO_ROUTING: ::c_int = 43; 920 /// IP6 fragmentation header 921 pub const IPPROTO_FRAGMENT: ::c_int = 44; 922 /// resource reservation 923 pub const IPPROTO_RSVP: ::c_int = 46; 924 /// General Routing Encap. 925 pub const IPPROTO_GRE: ::c_int = 47; 926 /// IP6 Encap Sec. Payload 927 pub const IPPROTO_ESP: ::c_int = 50; 928 /// IP6 Auth Header 929 pub const IPPROTO_AH: ::c_int = 51; 930 /// IP Mobility RFC 2004 931 pub const IPPROTO_MOBILE: ::c_int = 55; 932 // IPPROTO_ICMPV6 defined in src/unix/mod.rs 933 /// IP6 no next header 934 pub const IPPROTO_NONE: ::c_int = 59; 935 /// IP6 destination option 936 pub const IPPROTO_DSTOPTS: ::c_int = 60; 937 /// ISO cnlp 938 pub const IPPROTO_EON: ::c_int = 80; 939 /// Ethernet-in-IP 940 pub const IPPROTO_ETHERIP: ::c_int = 97; 941 /// encapsulation header 942 pub const IPPROTO_ENCAP: ::c_int = 98; 943 /// Protocol indep. multicast 944 pub const IPPROTO_PIM: ::c_int = 103; 945 /// IP Payload Comp. Protocol 946 pub const IPPROTO_IPCOMP: ::c_int = 108; 947 /// CARP 948 pub const IPPROTO_CARP: ::c_int = 112; 949 /// unicast MPLS packet 950 pub const IPPROTO_MPLS: ::c_int = 137; 951 /// PFSYNC 952 pub const IPPROTO_PFSYNC: ::c_int = 240; 953 pub const IPPROTO_MAX: ::c_int = 256; 954 955 // Only used internally, so it can be outside the range of valid IP protocols 956 pub const IPPROTO_DIVERT: ::c_int = 258; 957 958 pub const IP_RECVDSTADDR: ::c_int = 7; 959 pub const IP_SENDSRCADDR: ::c_int = IP_RECVDSTADDR; 960 pub const IP_RECVIF: ::c_int = 30; 961 962 // sys/netinet/in.h 963 pub const TCP_MD5SIG: ::c_int = 0x04; 964 pub const TCP_NOPUSH: ::c_int = 0x10; 965 966 pub const AF_ECMA: ::c_int = 8; 967 pub const AF_ROUTE: ::c_int = 17; 968 pub const AF_ENCAP: ::c_int = 28; 969 pub const AF_SIP: ::c_int = 29; 970 pub const AF_KEY: ::c_int = 30; 971 pub const pseudo_AF_HDRCMPLT: ::c_int = 31; 972 pub const AF_BLUETOOTH: ::c_int = 32; 973 pub const AF_MPLS: ::c_int = 33; 974 pub const pseudo_AF_PFLOW: ::c_int = 34; 975 pub const pseudo_AF_PIPEX: ::c_int = 35; 976 pub const NET_RT_DUMP: ::c_int = 1; 977 pub const NET_RT_FLAGS: ::c_int = 2; 978 pub const NET_RT_IFLIST: ::c_int = 3; 979 pub const NET_RT_STATS: ::c_int = 4; 980 pub const NET_RT_TABLE: ::c_int = 5; 981 pub const NET_RT_IFNAMES: ::c_int = 6; 982 #[doc(hidden)] 983 #[deprecated( 984 since = "0.2.95", 985 note = "Possibly increasing over the releases and might not be so used in the field" 986 )] 987 pub const NET_RT_MAXID: ::c_int = 7; 988 989 pub const IPV6_JOIN_GROUP: ::c_int = 12; 990 pub const IPV6_LEAVE_GROUP: ::c_int = 13; 991 992 pub const PF_ROUTE: ::c_int = AF_ROUTE; 993 pub const PF_ECMA: ::c_int = AF_ECMA; 994 pub const PF_ENCAP: ::c_int = AF_ENCAP; 995 pub const PF_SIP: ::c_int = AF_SIP; 996 pub const PF_KEY: ::c_int = AF_KEY; 997 pub const PF_BPF: ::c_int = pseudo_AF_HDRCMPLT; 998 pub const PF_BLUETOOTH: ::c_int = AF_BLUETOOTH; 999 pub const PF_MPLS: ::c_int = AF_MPLS; 1000 pub const PF_PFLOW: ::c_int = pseudo_AF_PFLOW; 1001 pub const PF_PIPEX: ::c_int = pseudo_AF_PIPEX; 1002 1003 pub const SCM_TIMESTAMP: ::c_int = 0x04; 1004 1005 pub const O_DSYNC: ::c_int = 128; 1006 1007 pub const MAP_RENAME: ::c_int = 0x0000; 1008 pub const MAP_NORESERVE: ::c_int = 0x0000; 1009 pub const MAP_HASSEMAPHORE: ::c_int = 0x0000; 1010 1011 pub const EIPSEC: ::c_int = 82; 1012 pub const ENOMEDIUM: ::c_int = 85; 1013 pub const EMEDIUMTYPE: ::c_int = 86; 1014 1015 pub const EAI_BADFLAGS: ::c_int = -1; 1016 pub const EAI_NONAME: ::c_int = -2; 1017 pub const EAI_AGAIN: ::c_int = -3; 1018 pub const EAI_FAIL: ::c_int = -4; 1019 pub const EAI_NODATA: ::c_int = -5; 1020 pub const EAI_FAMILY: ::c_int = -6; 1021 pub const EAI_SOCKTYPE: ::c_int = -7; 1022 pub const EAI_SERVICE: ::c_int = -8; 1023 pub const EAI_MEMORY: ::c_int = -10; 1024 pub const EAI_SYSTEM: ::c_int = -11; 1025 pub const EAI_OVERFLOW: ::c_int = -14; 1026 1027 pub const RUSAGE_THREAD: ::c_int = 1; 1028 1029 pub const MAP_COPY: ::c_int = 0x0002; 1030 pub const MAP_NOEXTEND: ::c_int = 0x0000; 1031 1032 pub const _PC_LINK_MAX: ::c_int = 1; 1033 pub const _PC_MAX_CANON: ::c_int = 2; 1034 pub const _PC_MAX_INPUT: ::c_int = 3; 1035 pub const _PC_NAME_MAX: ::c_int = 4; 1036 pub const _PC_PATH_MAX: ::c_int = 5; 1037 pub const _PC_PIPE_BUF: ::c_int = 6; 1038 pub const _PC_CHOWN_RESTRICTED: ::c_int = 7; 1039 pub const _PC_NO_TRUNC: ::c_int = 8; 1040 pub const _PC_VDISABLE: ::c_int = 9; 1041 pub const _PC_2_SYMLINKS: ::c_int = 10; 1042 pub const _PC_ALLOC_SIZE_MIN: ::c_int = 11; 1043 pub const _PC_ASYNC_IO: ::c_int = 12; 1044 pub const _PC_FILESIZEBITS: ::c_int = 13; 1045 pub const _PC_PRIO_IO: ::c_int = 14; 1046 pub const _PC_REC_INCR_XFER_SIZE: ::c_int = 15; 1047 pub const _PC_REC_MAX_XFER_SIZE: ::c_int = 16; 1048 pub const _PC_REC_MIN_XFER_SIZE: ::c_int = 17; 1049 pub const _PC_REC_XFER_ALIGN: ::c_int = 18; 1050 pub const _PC_SYMLINK_MAX: ::c_int = 19; 1051 pub const _PC_SYNC_IO: ::c_int = 20; 1052 pub const _PC_TIMESTAMP_RESOLUTION: ::c_int = 21; 1053 1054 pub const _SC_CLK_TCK: ::c_int = 3; 1055 pub const _SC_SEM_NSEMS_MAX: ::c_int = 31; 1056 pub const _SC_SEM_VALUE_MAX: ::c_int = 32; 1057 pub const _SC_HOST_NAME_MAX: ::c_int = 33; 1058 pub const _SC_MONOTONIC_CLOCK: ::c_int = 34; 1059 pub const _SC_2_PBS: ::c_int = 35; 1060 pub const _SC_2_PBS_ACCOUNTING: ::c_int = 36; 1061 pub const _SC_2_PBS_CHECKPOINT: ::c_int = 37; 1062 pub const _SC_2_PBS_LOCATE: ::c_int = 38; 1063 pub const _SC_2_PBS_MESSAGE: ::c_int = 39; 1064 pub const _SC_2_PBS_TRACK: ::c_int = 40; 1065 pub const _SC_ADVISORY_INFO: ::c_int = 41; 1066 pub const _SC_AIO_LISTIO_MAX: ::c_int = 42; 1067 pub const _SC_AIO_MAX: ::c_int = 43; 1068 pub const _SC_AIO_PRIO_DELTA_MAX: ::c_int = 44; 1069 pub const _SC_ASYNCHRONOUS_IO: ::c_int = 45; 1070 pub const _SC_ATEXIT_MAX: ::c_int = 46; 1071 pub const _SC_BARRIERS: ::c_int = 47; 1072 pub const _SC_CLOCK_SELECTION: ::c_int = 48; 1073 pub const _SC_CPUTIME: ::c_int = 49; 1074 pub const _SC_DELAYTIMER_MAX: ::c_int = 50; 1075 pub const _SC_IOV_MAX: ::c_int = 51; 1076 pub const _SC_IPV6: ::c_int = 52; 1077 pub const _SC_MAPPED_FILES: ::c_int = 53; 1078 pub const _SC_MEMLOCK: ::c_int = 54; 1079 pub const _SC_MEMLOCK_RANGE: ::c_int = 55; 1080 pub const _SC_MEMORY_PROTECTION: ::c_int = 56; 1081 pub const _SC_MESSAGE_PASSING: ::c_int = 57; 1082 pub const _SC_MQ_OPEN_MAX: ::c_int = 58; 1083 pub const _SC_MQ_PRIO_MAX: ::c_int = 59; 1084 pub const _SC_PRIORITIZED_IO: ::c_int = 60; 1085 pub const _SC_PRIORITY_SCHEDULING: ::c_int = 61; 1086 pub const _SC_RAW_SOCKETS: ::c_int = 62; 1087 pub const _SC_READER_WRITER_LOCKS: ::c_int = 63; 1088 pub const _SC_REALTIME_SIGNALS: ::c_int = 64; 1089 pub const _SC_REGEXP: ::c_int = 65; 1090 pub const _SC_RTSIG_MAX: ::c_int = 66; 1091 pub const _SC_SEMAPHORES: ::c_int = 67; 1092 pub const _SC_SHARED_MEMORY_OBJECTS: ::c_int = 68; 1093 pub const _SC_SHELL: ::c_int = 69; 1094 pub const _SC_SIGQUEUE_MAX: ::c_int = 70; 1095 pub const _SC_SPAWN: ::c_int = 71; 1096 pub const _SC_SPIN_LOCKS: ::c_int = 72; 1097 pub const _SC_SPORADIC_SERVER: ::c_int = 73; 1098 pub const _SC_SS_REPL_MAX: ::c_int = 74; 1099 pub const _SC_SYNCHRONIZED_IO: ::c_int = 75; 1100 pub const _SC_SYMLOOP_MAX: ::c_int = 76; 1101 pub const _SC_THREAD_ATTR_STACKADDR: ::c_int = 77; 1102 pub const _SC_THREAD_ATTR_STACKSIZE: ::c_int = 78; 1103 pub const _SC_THREAD_CPUTIME: ::c_int = 79; 1104 pub const _SC_THREAD_DESTRUCTOR_ITERATIONS: ::c_int = 80; 1105 pub const _SC_THREAD_KEYS_MAX: ::c_int = 81; 1106 pub const _SC_THREAD_PRIO_INHERIT: ::c_int = 82; 1107 pub const _SC_THREAD_PRIO_PROTECT: ::c_int = 83; 1108 pub const _SC_THREAD_PRIORITY_SCHEDULING: ::c_int = 84; 1109 pub const _SC_THREAD_PROCESS_SHARED: ::c_int = 85; 1110 pub const _SC_THREAD_ROBUST_PRIO_INHERIT: ::c_int = 86; 1111 pub const _SC_THREAD_ROBUST_PRIO_PROTECT: ::c_int = 87; 1112 pub const _SC_THREAD_SPORADIC_SERVER: ::c_int = 88; 1113 pub const _SC_THREAD_STACK_MIN: ::c_int = 89; 1114 pub const _SC_THREAD_THREADS_MAX: ::c_int = 90; 1115 pub const _SC_THREADS: ::c_int = 91; 1116 pub const _SC_TIMEOUTS: ::c_int = 92; 1117 pub const _SC_TIMER_MAX: ::c_int = 93; 1118 pub const _SC_TIMERS: ::c_int = 94; 1119 pub const _SC_TRACE: ::c_int = 95; 1120 pub const _SC_TRACE_EVENT_FILTER: ::c_int = 96; 1121 pub const _SC_TRACE_EVENT_NAME_MAX: ::c_int = 97; 1122 pub const _SC_TRACE_INHERIT: ::c_int = 98; 1123 pub const _SC_TRACE_LOG: ::c_int = 99; 1124 pub const _SC_GETGR_R_SIZE_MAX: ::c_int = 100; 1125 pub const _SC_GETPW_R_SIZE_MAX: ::c_int = 101; 1126 pub const _SC_LOGIN_NAME_MAX: ::c_int = 102; 1127 pub const _SC_THREAD_SAFE_FUNCTIONS: ::c_int = 103; 1128 pub const _SC_TRACE_NAME_MAX: ::c_int = 104; 1129 pub const _SC_TRACE_SYS_MAX: ::c_int = 105; 1130 pub const _SC_TRACE_USER_EVENT_MAX: ::c_int = 106; 1131 pub const _SC_TTY_NAME_MAX: ::c_int = 107; 1132 pub const _SC_TYPED_MEMORY_OBJECTS: ::c_int = 108; 1133 pub const _SC_V6_ILP32_OFF32: ::c_int = 109; 1134 pub const _SC_V6_ILP32_OFFBIG: ::c_int = 110; 1135 pub const _SC_V6_LP64_OFF64: ::c_int = 111; 1136 pub const _SC_V6_LPBIG_OFFBIG: ::c_int = 112; 1137 pub const _SC_V7_ILP32_OFF32: ::c_int = 113; 1138 pub const _SC_V7_ILP32_OFFBIG: ::c_int = 114; 1139 pub const _SC_V7_LP64_OFF64: ::c_int = 115; 1140 pub const _SC_V7_LPBIG_OFFBIG: ::c_int = 116; 1141 pub const _SC_XOPEN_CRYPT: ::c_int = 117; 1142 pub const _SC_XOPEN_ENH_I18N: ::c_int = 118; 1143 pub const _SC_XOPEN_LEGACY: ::c_int = 119; 1144 pub const _SC_XOPEN_REALTIME: ::c_int = 120; 1145 pub const _SC_XOPEN_REALTIME_THREADS: ::c_int = 121; 1146 pub const _SC_XOPEN_STREAMS: ::c_int = 122; 1147 pub const _SC_XOPEN_UNIX: ::c_int = 123; 1148 pub const _SC_XOPEN_UUCP: ::c_int = 124; 1149 pub const _SC_XOPEN_VERSION: ::c_int = 125; 1150 pub const _SC_PHYS_PAGES: ::c_int = 500; 1151 pub const _SC_AVPHYS_PAGES: ::c_int = 501; 1152 pub const _SC_NPROCESSORS_CONF: ::c_int = 502; 1153 pub const _SC_NPROCESSORS_ONLN: ::c_int = 503; 1154 1155 pub const FD_SETSIZE: usize = 1024; 1156 1157 pub const ST_NOSUID: ::c_ulong = 2; 1158 1159 pub const PTHREAD_MUTEX_INITIALIZER: pthread_mutex_t = 0 as *mut _; 1160 pub const PTHREAD_COND_INITIALIZER: pthread_cond_t = 0 as *mut _; 1161 pub const PTHREAD_RWLOCK_INITIALIZER: pthread_rwlock_t = 0 as *mut _; 1162 1163 pub const PTHREAD_MUTEX_ERRORCHECK: ::c_int = 1; 1164 pub const PTHREAD_MUTEX_RECURSIVE: ::c_int = 2; 1165 pub const PTHREAD_MUTEX_NORMAL: ::c_int = 3; 1166 pub const PTHREAD_MUTEX_STRICT_NP: ::c_int = 4; 1167 pub const PTHREAD_MUTEX_DEFAULT: ::c_int = PTHREAD_MUTEX_STRICT_NP; 1168 1169 pub const EVFILT_AIO: i16 = -3; 1170 pub const EVFILT_PROC: i16 = -5; 1171 pub const EVFILT_READ: i16 = -1; 1172 pub const EVFILT_SIGNAL: i16 = -6; 1173 pub const EVFILT_TIMER: i16 = -7; 1174 pub const EVFILT_VNODE: i16 = -4; 1175 pub const EVFILT_WRITE: i16 = -2; 1176 1177 pub const EV_ADD: u16 = 0x1; 1178 pub const EV_DELETE: u16 = 0x2; 1179 pub const EV_ENABLE: u16 = 0x4; 1180 pub const EV_DISABLE: u16 = 0x8; 1181 pub const EV_ONESHOT: u16 = 0x10; 1182 pub const EV_CLEAR: u16 = 0x20; 1183 pub const EV_RECEIPT: u16 = 0x40; 1184 pub const EV_DISPATCH: u16 = 0x80; 1185 pub const EV_FLAG1: u16 = 0x2000; 1186 pub const EV_ERROR: u16 = 0x4000; 1187 pub const EV_EOF: u16 = 0x8000; 1188 1189 #[deprecated(since = "0.2.113", note = "Not stable across OS versions")] 1190 pub const EV_SYSFLAGS: u16 = 0xf800; 1191 1192 pub const NOTE_LOWAT: u32 = 0x00000001; 1193 pub const NOTE_EOF: u32 = 0x00000002; 1194 pub const NOTE_DELETE: u32 = 0x00000001; 1195 pub const NOTE_WRITE: u32 = 0x00000002; 1196 pub const NOTE_EXTEND: u32 = 0x00000004; 1197 pub const NOTE_ATTRIB: u32 = 0x00000008; 1198 pub const NOTE_LINK: u32 = 0x00000010; 1199 pub const NOTE_RENAME: u32 = 0x00000020; 1200 pub const NOTE_REVOKE: u32 = 0x00000040; 1201 pub const NOTE_TRUNCATE: u32 = 0x00000080; 1202 pub const NOTE_EXIT: u32 = 0x80000000; 1203 pub const NOTE_FORK: u32 = 0x40000000; 1204 pub const NOTE_EXEC: u32 = 0x20000000; 1205 pub const NOTE_PDATAMASK: u32 = 0x000fffff; 1206 pub const NOTE_PCTRLMASK: u32 = 0xf0000000; 1207 pub const NOTE_TRACK: u32 = 0x00000001; 1208 pub const NOTE_TRACKERR: u32 = 0x00000002; 1209 pub const NOTE_CHILD: u32 = 0x00000004; 1210 1211 pub const TMP_MAX: ::c_uint = 0x7fffffff; 1212 1213 pub const AI_PASSIVE: ::c_int = 1; 1214 pub const AI_CANONNAME: ::c_int = 2; 1215 pub const AI_NUMERICHOST: ::c_int = 4; 1216 pub const AI_EXT: ::c_int = 8; 1217 pub const AI_NUMERICSERV: ::c_int = 16; 1218 pub const AI_FQDN: ::c_int = 32; 1219 pub const AI_ADDRCONFIG: ::c_int = 64; 1220 1221 pub const NI_NUMERICHOST: ::c_int = 1; 1222 pub const NI_NUMERICSERV: ::c_int = 2; 1223 pub const NI_NOFQDN: ::c_int = 4; 1224 pub const NI_NAMEREQD: ::c_int = 8; 1225 pub const NI_DGRAM: ::c_int = 16; 1226 1227 pub const NI_MAXHOST: ::size_t = 256; 1228 1229 pub const RTLD_LOCAL: ::c_int = 0; 1230 1231 pub const CTL_MAXNAME: ::c_int = 12; 1232 1233 pub const CTLTYPE_NODE: ::c_int = 1; 1234 pub const CTLTYPE_INT: ::c_int = 2; 1235 pub const CTLTYPE_STRING: ::c_int = 3; 1236 pub const CTLTYPE_QUAD: ::c_int = 4; 1237 pub const CTLTYPE_STRUCT: ::c_int = 5; 1238 1239 pub const CTL_UNSPEC: ::c_int = 0; 1240 pub const CTL_KERN: ::c_int = 1; 1241 pub const CTL_VM: ::c_int = 2; 1242 pub const CTL_FS: ::c_int = 3; 1243 pub const CTL_NET: ::c_int = 4; 1244 pub const CTL_DEBUG: ::c_int = 5; 1245 pub const CTL_HW: ::c_int = 6; 1246 pub const CTL_MACHDEP: ::c_int = 7; 1247 pub const CTL_DDB: ::c_int = 9; 1248 pub const CTL_VFS: ::c_int = 10; 1249 pub const CTL_MAXID: ::c_int = 11; 1250 1251 pub const HW_NCPUONLINE: ::c_int = 25; 1252 1253 pub const KERN_OSTYPE: ::c_int = 1; 1254 pub const KERN_OSRELEASE: ::c_int = 2; 1255 pub const KERN_OSREV: ::c_int = 3; 1256 pub const KERN_VERSION: ::c_int = 4; 1257 pub const KERN_MAXVNODES: ::c_int = 5; 1258 pub const KERN_MAXPROC: ::c_int = 6; 1259 pub const KERN_MAXFILES: ::c_int = 7; 1260 pub const KERN_ARGMAX: ::c_int = 8; 1261 pub const KERN_SECURELVL: ::c_int = 9; 1262 pub const KERN_HOSTNAME: ::c_int = 10; 1263 pub const KERN_HOSTID: ::c_int = 11; 1264 pub const KERN_CLOCKRATE: ::c_int = 12; 1265 pub const KERN_PROF: ::c_int = 16; 1266 pub const KERN_POSIX1: ::c_int = 17; 1267 pub const KERN_NGROUPS: ::c_int = 18; 1268 pub const KERN_JOB_CONTROL: ::c_int = 19; 1269 pub const KERN_SAVED_IDS: ::c_int = 20; 1270 pub const KERN_BOOTTIME: ::c_int = 21; 1271 pub const KERN_DOMAINNAME: ::c_int = 22; 1272 pub const KERN_MAXPARTITIONS: ::c_int = 23; 1273 pub const KERN_RAWPARTITION: ::c_int = 24; 1274 pub const KERN_MAXTHREAD: ::c_int = 25; 1275 pub const KERN_NTHREADS: ::c_int = 26; 1276 pub const KERN_OSVERSION: ::c_int = 27; 1277 pub const KERN_SOMAXCONN: ::c_int = 28; 1278 pub const KERN_SOMINCONN: ::c_int = 29; 1279 #[deprecated(since = "0.2.71", note = "Removed in OpenBSD 6.0")] 1280 pub const KERN_USERMOUNT: ::c_int = 30; 1281 pub const KERN_NOSUIDCOREDUMP: ::c_int = 32; 1282 pub const KERN_FSYNC: ::c_int = 33; 1283 pub const KERN_SYSVMSG: ::c_int = 34; 1284 pub const KERN_SYSVSEM: ::c_int = 35; 1285 pub const KERN_SYSVSHM: ::c_int = 36; 1286 #[deprecated(since = "0.2.71", note = "Removed in OpenBSD 6.0")] 1287 pub const KERN_ARND: ::c_int = 37; 1288 pub const KERN_MSGBUFSIZE: ::c_int = 38; 1289 pub const KERN_MALLOCSTATS: ::c_int = 39; 1290 pub const KERN_CPTIME: ::c_int = 40; 1291 pub const KERN_NCHSTATS: ::c_int = 41; 1292 pub const KERN_FORKSTAT: ::c_int = 42; 1293 pub const KERN_NSELCOLL: ::c_int = 43; 1294 pub const KERN_TTY: ::c_int = 44; 1295 pub const KERN_CCPU: ::c_int = 45; 1296 pub const KERN_FSCALE: ::c_int = 46; 1297 pub const KERN_NPROCS: ::c_int = 47; 1298 pub const KERN_MSGBUF: ::c_int = 48; 1299 pub const KERN_POOL: ::c_int = 49; 1300 pub const KERN_STACKGAPRANDOM: ::c_int = 50; 1301 pub const KERN_SYSVIPC_INFO: ::c_int = 51; 1302 pub const KERN_SPLASSERT: ::c_int = 54; 1303 pub const KERN_PROC_ARGS: ::c_int = 55; 1304 pub const KERN_NFILES: ::c_int = 56; 1305 pub const KERN_TTYCOUNT: ::c_int = 57; 1306 pub const KERN_NUMVNODES: ::c_int = 58; 1307 pub const KERN_MBSTAT: ::c_int = 59; 1308 pub const KERN_SEMINFO: ::c_int = 61; 1309 pub const KERN_SHMINFO: ::c_int = 62; 1310 pub const KERN_INTRCNT: ::c_int = 63; 1311 pub const KERN_WATCHDOG: ::c_int = 64; 1312 pub const KERN_PROC: ::c_int = 66; 1313 pub const KERN_MAXCLUSTERS: ::c_int = 67; 1314 pub const KERN_EVCOUNT: ::c_int = 68; 1315 pub const KERN_TIMECOUNTER: ::c_int = 69; 1316 pub const KERN_MAXLOCKSPERUID: ::c_int = 70; 1317 pub const KERN_CPTIME2: ::c_int = 71; 1318 pub const KERN_CACHEPCT: ::c_int = 72; 1319 pub const KERN_FILE: ::c_int = 73; 1320 pub const KERN_CONSDEV: ::c_int = 75; 1321 pub const KERN_NETLIVELOCKS: ::c_int = 76; 1322 pub const KERN_POOL_DEBUG: ::c_int = 77; 1323 pub const KERN_PROC_CWD: ::c_int = 78; 1324 pub const KERN_PROC_NOBROADCASTKILL: ::c_int = 79; 1325 pub const KERN_PROC_VMMAP: ::c_int = 80; 1326 pub const KERN_GLOBAL_PTRACE: ::c_int = 81; 1327 pub const KERN_CONSBUFSIZE: ::c_int = 82; 1328 pub const KERN_CONSBUF: ::c_int = 83; 1329 pub const KERN_AUDIO: ::c_int = 84; 1330 pub const KERN_CPUSTATS: ::c_int = 85; 1331 pub const KERN_PFSTATUS: ::c_int = 86; 1332 pub const KERN_TIMEOUT_STATS: ::c_int = 87; 1333 #[deprecated( 1334 since = "0.2.95", 1335 note = "Possibly increasing over the releases and might not be so used in the field" 1336 )] 1337 pub const KERN_MAXID: ::c_int = 88; 1338 1339 pub const KERN_PROC_ALL: ::c_int = 0; 1340 pub const KERN_PROC_PID: ::c_int = 1; 1341 pub const KERN_PROC_PGRP: ::c_int = 2; 1342 pub const KERN_PROC_SESSION: ::c_int = 3; 1343 pub const KERN_PROC_TTY: ::c_int = 4; 1344 pub const KERN_PROC_UID: ::c_int = 5; 1345 pub const KERN_PROC_RUID: ::c_int = 6; 1346 pub const KERN_PROC_KTHREAD: ::c_int = 7; 1347 pub const KERN_PROC_SHOW_THREADS: ::c_int = 0x40000000; 1348 1349 pub const KERN_SYSVIPC_MSG_INFO: ::c_int = 1; 1350 pub const KERN_SYSVIPC_SEM_INFO: ::c_int = 2; 1351 pub const KERN_SYSVIPC_SHM_INFO: ::c_int = 3; 1352 1353 pub const KERN_PROC_ARGV: ::c_int = 1; 1354 pub const KERN_PROC_NARGV: ::c_int = 2; 1355 pub const KERN_PROC_ENV: ::c_int = 3; 1356 pub const KERN_PROC_NENV: ::c_int = 4; 1357 1358 pub const KI_NGROUPS: ::c_int = 16; 1359 pub const KI_MAXCOMLEN: ::c_int = 24; 1360 pub const KI_WMESGLEN: ::c_int = 8; 1361 pub const KI_MAXLOGNAME: ::c_int = 32; 1362 pub const KI_EMULNAMELEN: ::c_int = 8; 1363 1364 pub const CHWFLOW: ::tcflag_t = ::MDMBUF | ::CRTSCTS; 1365 pub const OLCUC: ::tcflag_t = 0x20; 1366 pub const ONOCR: ::tcflag_t = 0x40; 1367 pub const ONLRET: ::tcflag_t = 0x80; 1368 1369 //https://github.com/openbsd/src/blob/master/sys/sys/mount.h 1370 pub const ISOFSMNT_NORRIP: ::c_int = 0x1; // disable Rock Ridge Ext 1371 pub const ISOFSMNT_GENS: ::c_int = 0x2; // enable generation numbers 1372 pub const ISOFSMNT_EXTATT: ::c_int = 0x4; // enable extended attr 1373 pub const ISOFSMNT_NOJOLIET: ::c_int = 0x8; // disable Joliet Ext 1374 pub const ISOFSMNT_SESS: ::c_int = 0x10; // use iso_args.sess 1375 1376 pub const NFS_ARGSVERSION: ::c_int = 4; // change when nfs_args changes 1377 1378 pub const NFSMNT_RESVPORT: ::c_int = 0; // always use reserved ports 1379 pub const NFSMNT_SOFT: ::c_int = 0x1; // soft mount (hard is default) 1380 pub const NFSMNT_WSIZE: ::c_int = 0x2; // set write size 1381 pub const NFSMNT_RSIZE: ::c_int = 0x4; // set read size 1382 pub const NFSMNT_TIMEO: ::c_int = 0x8; // set initial timeout 1383 pub const NFSMNT_RETRANS: ::c_int = 0x10; // set number of request retries 1384 pub const NFSMNT_MAXGRPS: ::c_int = 0x20; // set maximum grouplist size 1385 pub const NFSMNT_INT: ::c_int = 0x40; // allow interrupts on hard mount 1386 pub const NFSMNT_NOCONN: ::c_int = 0x80; // Don't Connect the socket 1387 pub const NFSMNT_NQNFS: ::c_int = 0x100; // Use Nqnfs protocol 1388 pub const NFSMNT_NFSV3: ::c_int = 0x200; // Use NFS Version 3 protocol 1389 pub const NFSMNT_KERB: ::c_int = 0x400; // Use Kerberos authentication 1390 pub const NFSMNT_DUMBTIMR: ::c_int = 0x800; // Don't estimate rtt dynamically 1391 pub const NFSMNT_LEASETERM: ::c_int = 0x1000; // set lease term (nqnfs) 1392 pub const NFSMNT_READAHEAD: ::c_int = 0x2000; // set read ahead 1393 pub const NFSMNT_DEADTHRESH: ::c_int = 0x4000; // set dead server retry thresh 1394 pub const NFSMNT_NOAC: ::c_int = 0x8000; // disable attribute cache 1395 pub const NFSMNT_RDIRPLUS: ::c_int = 0x10000; // Use Readdirplus for V3 1396 pub const NFSMNT_READDIRSIZE: ::c_int = 0x20000; // Set readdir size 1397 1398 /* Flags valid only in mount syscall arguments */ 1399 pub const NFSMNT_ACREGMIN: ::c_int = 0x40000; // acregmin field valid 1400 pub const NFSMNT_ACREGMAX: ::c_int = 0x80000; // acregmax field valid 1401 pub const NFSMNT_ACDIRMIN: ::c_int = 0x100000; // acdirmin field valid 1402 pub const NFSMNT_ACDIRMAX: ::c_int = 0x200000; // acdirmax field valid 1403 1404 /* Flags valid only in kernel */ 1405 pub const NFSMNT_INTERNAL: ::c_int = 0xfffc0000; // Bits set internally 1406 pub const NFSMNT_HASWRITEVERF: ::c_int = 0x40000; // Has write verifier for V3 1407 pub const NFSMNT_GOTPATHCONF: ::c_int = 0x80000; // Got the V3 pathconf info 1408 pub const NFSMNT_GOTFSINFO: ::c_int = 0x100000; // Got the V3 fsinfo 1409 pub const NFSMNT_MNTD: ::c_int = 0x200000; // Mnt server for mnt point 1410 pub const NFSMNT_DISMINPROG: ::c_int = 0x400000; // Dismount in progress 1411 pub const NFSMNT_DISMNT: ::c_int = 0x800000; // Dismounted 1412 pub const NFSMNT_SNDLOCK: ::c_int = 0x1000000; // Send socket lock 1413 pub const NFSMNT_WANTSND: ::c_int = 0x2000000; // Want above 1414 pub const NFSMNT_RCVLOCK: ::c_int = 0x4000000; // Rcv socket lock 1415 pub const NFSMNT_WANTRCV: ::c_int = 0x8000000; // Want above 1416 pub const NFSMNT_WAITAUTH: ::c_int = 0x10000000; // Wait for authentication 1417 pub const NFSMNT_HASAUTH: ::c_int = 0x20000000; // Has authenticator 1418 pub const NFSMNT_WANTAUTH: ::c_int = 0x40000000; // Wants an authenticator 1419 pub const NFSMNT_AUTHERR: ::c_int = 0x80000000; // Authentication error 1420 1421 pub const MSDOSFSMNT_SHORTNAME: ::c_int = 0x1; // Force old DOS short names only 1422 pub const MSDOSFSMNT_LONGNAME: ::c_int = 0x2; // Force Win'95 long names 1423 pub const MSDOSFSMNT_NOWIN95: ::c_int = 0x4; // Completely ignore Win95 entries 1424 1425 pub const NTFS_MFLAG_CASEINS: ::c_int = 0x1; 1426 pub const NTFS_MFLAG_ALLNAMES: ::c_int = 0x2; 1427 1428 pub const TMPFS_ARGS_VERSION: ::c_int = 1; 1429 1430 pub const MAP_STACK: ::c_int = 0x4000; 1431 pub const MAP_CONCEAL: ::c_int = 0x8000; 1432 1433 // https://github.com/openbsd/src/blob/master/sys/net/if.h#L187 1434 pub const IFF_UP: ::c_int = 0x1; // interface is up 1435 pub const IFF_BROADCAST: ::c_int = 0x2; // broadcast address valid 1436 pub const IFF_DEBUG: ::c_int = 0x4; // turn on debugging 1437 pub const IFF_LOOPBACK: ::c_int = 0x8; // is a loopback net 1438 pub const IFF_POINTOPOINT: ::c_int = 0x10; // interface is point-to-point link 1439 pub const IFF_STATICARP: ::c_int = 0x20; // only static ARP 1440 pub const IFF_RUNNING: ::c_int = 0x40; // resources allocated 1441 pub const IFF_NOARP: ::c_int = 0x80; // no address resolution protocol 1442 pub const IFF_PROMISC: ::c_int = 0x100; // receive all packets 1443 pub const IFF_ALLMULTI: ::c_int = 0x200; // receive all multicast packets 1444 pub const IFF_OACTIVE: ::c_int = 0x400; // transmission in progress 1445 pub const IFF_SIMPLEX: ::c_int = 0x800; // can't hear own transmissions 1446 pub const IFF_LINK0: ::c_int = 0x1000; // per link layer defined bit 1447 pub const IFF_LINK1: ::c_int = 0x2000; // per link layer defined bit 1448 pub const IFF_LINK2: ::c_int = 0x4000; // per link layer defined bit 1449 pub const IFF_MULTICAST: ::c_int = 0x8000; // supports multicast 1450 1451 pub const PTHREAD_STACK_MIN: ::size_t = 1_usize << _MAX_PAGE_SHIFT; 1452 pub const MINSIGSTKSZ: ::size_t = 3_usize << _MAX_PAGE_SHIFT; 1453 pub const SIGSTKSZ: ::size_t = MINSIGSTKSZ + (1_usize << _MAX_PAGE_SHIFT) * 4; 1454 1455 pub const PT_SET_EVENT_MASK: ::c_int = 12; 1456 pub const PT_GET_EVENT_MASK: ::c_int = 13; 1457 pub const PT_GET_PROCESS_STATE: ::c_int = 14; 1458 pub const PT_GET_THREAD_FIRST: ::c_int = 15; 1459 pub const PT_GET_THREAD_NEXT: ::c_int = 16; 1460 pub const PT_FIRSTMACH: ::c_int = 32; 1461 1462 pub const SOCK_CLOEXEC: ::c_int = 0x8000; 1463 pub const SOCK_NONBLOCK: ::c_int = 0x4000; 1464 pub const SOCK_DNS: ::c_int = 0x1000; 1465 1466 pub const BIOCGRSIG: ::c_ulong = 0x40044273; 1467 pub const BIOCSRSIG: ::c_ulong = 0x80044272; 1468 pub const BIOCSDLT: ::c_ulong = 0x8004427a; 1469 1470 pub const PTRACE_FORK: ::c_int = 0x0002; 1471 1472 pub const WCONTINUED: ::c_int = 8; 1473 1474 const_fn! { 1475 {const} fn _ALIGN(p: usize) -> usize { 1476 (p + _ALIGNBYTES) & !_ALIGNBYTES 1477 } 1478 } 1479 1480 f! { 1481 pub fn CMSG_DATA(cmsg: *const ::cmsghdr) -> *mut ::c_uchar { 1482 (cmsg as *mut ::c_uchar) 1483 .offset(_ALIGN(::mem::size_of::<::cmsghdr>()) as isize) 1484 } 1485 1486 pub fn CMSG_LEN(length: ::c_uint) -> ::c_uint { 1487 _ALIGN(::mem::size_of::<::cmsghdr>()) as ::c_uint + length 1488 } 1489 1490 pub fn CMSG_NXTHDR(mhdr: *const ::msghdr, cmsg: *const ::cmsghdr) 1491 -> *mut ::cmsghdr 1492 { 1493 if cmsg.is_null() { 1494 return ::CMSG_FIRSTHDR(mhdr); 1495 }; 1496 let next = cmsg as usize + _ALIGN((*cmsg).cmsg_len as usize) 1497 + _ALIGN(::mem::size_of::<::cmsghdr>()); 1498 let max = (*mhdr).msg_control as usize 1499 + (*mhdr).msg_controllen as usize; 1500 if next > max { 1501 0 as *mut ::cmsghdr 1502 } else { 1503 (cmsg as usize + _ALIGN((*cmsg).cmsg_len as usize)) 1504 as *mut ::cmsghdr 1505 } 1506 } 1507 1508 pub {const} fn CMSG_SPACE(length: ::c_uint) -> ::c_uint { 1509 (_ALIGN(::mem::size_of::<::cmsghdr>()) + _ALIGN(length as usize)) 1510 as ::c_uint 1511 } 1512 } 1513 1514 safe_f! { 1515 pub {const} fn WSTOPSIG(status: ::c_int) -> ::c_int { 1516 status >> 8 1517 } 1518 1519 pub {const} fn WIFSIGNALED(status: ::c_int) -> bool { 1520 (status & 0o177) != 0o177 && (status & 0o177) != 0 1521 } 1522 1523 pub {const} fn WIFSTOPPED(status: ::c_int) -> bool { 1524 (status & 0xff) == 0o177 1525 } 1526 1527 pub {const} fn WIFCONTINUED(status: ::c_int) -> bool { 1528 (status & 0o177777) == 0o177777 1529 } 1530 } 1531 1532 extern "C" { gettimeofday(tp: *mut ::timeval, tz: *mut ::timezone) -> ::c_int1533 pub fn gettimeofday(tp: *mut ::timeval, tz: *mut ::timezone) -> ::c_int; settimeofday(tp: *const ::timeval, tz: *const ::timezone) -> ::c_int1534 pub fn settimeofday(tp: *const ::timeval, tz: *const ::timezone) -> ::c_int; execvpe( file: *const ::c_char, argv: *const *const ::c_char, envp: *const *const ::c_char, ) -> ::c_int1535 pub fn execvpe( 1536 file: *const ::c_char, 1537 argv: *const *const ::c_char, 1538 envp: *const *const ::c_char, 1539 ) -> ::c_int; pledge(promises: *const ::c_char, execpromises: *const ::c_char) -> ::c_int1540 pub fn pledge(promises: *const ::c_char, execpromises: *const ::c_char) -> ::c_int; unveil(path: *const ::c_char, permissions: *const ::c_char) -> ::c_int1541 pub fn unveil(path: *const ::c_char, permissions: *const ::c_char) -> ::c_int; strtonum( nptr: *const ::c_char, minval: ::c_longlong, maxval: ::c_longlong, errstr: *mut *const ::c_char, ) -> ::c_longlong1542 pub fn strtonum( 1543 nptr: *const ::c_char, 1544 minval: ::c_longlong, 1545 maxval: ::c_longlong, 1546 errstr: *mut *const ::c_char, 1547 ) -> ::c_longlong; dup3(src: ::c_int, dst: ::c_int, flags: ::c_int) -> ::c_int1548 pub fn dup3(src: ::c_int, dst: ::c_int, flags: ::c_int) -> ::c_int; chflags(path: *const ::c_char, flags: ::c_uint) -> ::c_int1549 pub fn chflags(path: *const ::c_char, flags: ::c_uint) -> ::c_int; fchflags(fd: ::c_int, flags: ::c_uint) -> ::c_int1550 pub fn fchflags(fd: ::c_int, flags: ::c_uint) -> ::c_int; chflagsat( fd: ::c_int, path: *const ::c_char, flags: ::c_uint, atflag: ::c_int, ) -> ::c_int1551 pub fn chflagsat( 1552 fd: ::c_int, 1553 path: *const ::c_char, 1554 flags: ::c_uint, 1555 atflag: ::c_int, 1556 ) -> ::c_int; dirfd(dirp: *mut ::DIR) -> ::c_int1557 pub fn dirfd(dirp: *mut ::DIR) -> ::c_int; getnameinfo( sa: *const ::sockaddr, salen: ::socklen_t, host: *mut ::c_char, hostlen: ::size_t, serv: *mut ::c_char, servlen: ::size_t, flags: ::c_int, ) -> ::c_int1558 pub fn getnameinfo( 1559 sa: *const ::sockaddr, 1560 salen: ::socklen_t, 1561 host: *mut ::c_char, 1562 hostlen: ::size_t, 1563 serv: *mut ::c_char, 1564 servlen: ::size_t, 1565 flags: ::c_int, 1566 ) -> ::c_int; getresgid(rgid: *mut ::gid_t, egid: *mut ::gid_t, sgid: *mut ::gid_t) -> ::c_int1567 pub fn getresgid(rgid: *mut ::gid_t, egid: *mut ::gid_t, sgid: *mut ::gid_t) -> ::c_int; getresuid(ruid: *mut ::uid_t, euid: *mut ::uid_t, suid: *mut ::uid_t) -> ::c_int1568 pub fn getresuid(ruid: *mut ::uid_t, euid: *mut ::uid_t, suid: *mut ::uid_t) -> ::c_int; kevent( kq: ::c_int, changelist: *const ::kevent, nchanges: ::c_int, eventlist: *mut ::kevent, nevents: ::c_int, timeout: *const ::timespec, ) -> ::c_int1569 pub fn kevent( 1570 kq: ::c_int, 1571 changelist: *const ::kevent, 1572 nchanges: ::c_int, 1573 eventlist: *mut ::kevent, 1574 nevents: ::c_int, 1575 timeout: *const ::timespec, 1576 ) -> ::c_int; mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int1577 pub fn mprotect(addr: *mut ::c_void, len: ::size_t, prot: ::c_int) -> ::c_int; getthrid() -> ::pid_t1578 pub fn getthrid() -> ::pid_t; pthread_attr_getguardsize( attr: *const ::pthread_attr_t, guardsize: *mut ::size_t, ) -> ::c_int1579 pub fn pthread_attr_getguardsize( 1580 attr: *const ::pthread_attr_t, 1581 guardsize: *mut ::size_t, 1582 ) -> ::c_int; pthread_attr_getstack( attr: *const ::pthread_attr_t, stackaddr: *mut *mut ::c_void, stacksize: *mut ::size_t, ) -> ::c_int1583 pub fn pthread_attr_getstack( 1584 attr: *const ::pthread_attr_t, 1585 stackaddr: *mut *mut ::c_void, 1586 stacksize: *mut ::size_t, 1587 ) -> ::c_int; pthread_main_np() -> ::c_int1588 pub fn pthread_main_np() -> ::c_int; pthread_get_name_np(tid: ::pthread_t, name: *mut ::c_char, len: ::size_t)1589 pub fn pthread_get_name_np(tid: ::pthread_t, name: *mut ::c_char, len: ::size_t); pthread_set_name_np(tid: ::pthread_t, name: *const ::c_char)1590 pub fn pthread_set_name_np(tid: ::pthread_t, name: *const ::c_char); pthread_stackseg_np(thread: ::pthread_t, sinfo: *mut ::stack_t) -> ::c_int1591 pub fn pthread_stackseg_np(thread: ::pthread_t, sinfo: *mut ::stack_t) -> ::c_int; 1592 sysctl( name: *const ::c_int, namelen: ::c_uint, oldp: *mut ::c_void, oldlenp: *mut ::size_t, newp: *mut ::c_void, newlen: ::size_t, ) -> ::c_int1593 pub fn sysctl( 1594 name: *const ::c_int, 1595 namelen: ::c_uint, 1596 oldp: *mut ::c_void, 1597 oldlenp: *mut ::size_t, 1598 newp: *mut ::c_void, 1599 newlen: ::size_t, 1600 ) -> ::c_int; getentropy(buf: *mut ::c_void, buflen: ::size_t) -> ::c_int1601 pub fn getentropy(buf: *mut ::c_void, buflen: ::size_t) -> ::c_int; setresgid(rgid: ::gid_t, egid: ::gid_t, sgid: ::gid_t) -> ::c_int1602 pub fn setresgid(rgid: ::gid_t, egid: ::gid_t, sgid: ::gid_t) -> ::c_int; setresuid(ruid: ::uid_t, euid: ::uid_t, suid: ::uid_t) -> ::c_int1603 pub fn setresuid(ruid: ::uid_t, euid: ::uid_t, suid: ::uid_t) -> ::c_int; ptrace(request: ::c_int, pid: ::pid_t, addr: caddr_t, data: ::c_int) -> ::c_int1604 pub fn ptrace(request: ::c_int, pid: ::pid_t, addr: caddr_t, data: ::c_int) -> ::c_int; utrace(label: *const ::c_char, addr: *const ::c_void, len: ::size_t) -> ::c_int1605 pub fn utrace(label: *const ::c_char, addr: *const ::c_void, len: ::size_t) -> ::c_int; memmem( haystack: *const ::c_void, haystacklen: ::size_t, needle: *const ::c_void, needlelen: ::size_t, ) -> *mut ::c_void1606 pub fn memmem( 1607 haystack: *const ::c_void, 1608 haystacklen: ::size_t, 1609 needle: *const ::c_void, 1610 needlelen: ::size_t, 1611 ) -> *mut ::c_void; 1612 // #include <link.h> dl_iterate_phdr( callback: ::Option< unsafe extern "C" fn( info: *mut dl_phdr_info, size: usize, data: *mut ::c_void, ) -> ::c_int, >, data: *mut ::c_void, ) -> ::c_int1613 pub fn dl_iterate_phdr( 1614 callback: ::Option< 1615 unsafe extern "C" fn( 1616 info: *mut dl_phdr_info, 1617 size: usize, 1618 data: *mut ::c_void, 1619 ) -> ::c_int, 1620 >, 1621 data: *mut ::c_void, 1622 ) -> ::c_int; uselocale(loc: ::locale_t) -> ::locale_t1623 pub fn uselocale(loc: ::locale_t) -> ::locale_t; freelocale(loc: ::locale_t)1624 pub fn freelocale(loc: ::locale_t); newlocale(mask: ::c_int, locale: *const ::c_char, base: ::locale_t) -> ::locale_t1625 pub fn newlocale(mask: ::c_int, locale: *const ::c_char, base: ::locale_t) -> ::locale_t; duplocale(base: ::locale_t) -> ::locale_t1626 pub fn duplocale(base: ::locale_t) -> ::locale_t; 1627 1628 // Added in `OpenBSD` 5.5 explicit_bzero(s: *mut ::c_void, len: ::size_t)1629 pub fn explicit_bzero(s: *mut ::c_void, len: ::size_t); 1630 setproctitle(fmt: *const ::c_char, ...)1631 pub fn setproctitle(fmt: *const ::c_char, ...); 1632 freezero(ptr: *mut ::c_void, size: ::size_t)1633 pub fn freezero(ptr: *mut ::c_void, size: ::size_t); malloc_conceal(size: ::size_t) -> *mut ::c_void1634 pub fn malloc_conceal(size: ::size_t) -> *mut ::c_void; calloc_conceal(nmemb: ::size_t, size: ::size_t) -> *mut ::c_void1635 pub fn calloc_conceal(nmemb: ::size_t, size: ::size_t) -> *mut ::c_void; 1636 srand48_deterministic(seed: ::c_long)1637 pub fn srand48_deterministic(seed: ::c_long); seed48_deterministic(xseed: *mut ::c_ushort) -> *mut ::c_ushort1638 pub fn seed48_deterministic(xseed: *mut ::c_ushort) -> *mut ::c_ushort; lcong48_deterministic(p: *mut ::c_ushort)1639 pub fn lcong48_deterministic(p: *mut ::c_ushort); 1640 } 1641 1642 #[link(name = "execinfo")] 1643 extern "C" { backtrace(addrlist: *mut *mut ::c_void, len: ::size_t) -> ::size_t1644 pub fn backtrace(addrlist: *mut *mut ::c_void, len: ::size_t) -> ::size_t; backtrace_symbols(addrlist: *const *mut ::c_void, len: ::size_t) -> *mut *mut ::c_char1645 pub fn backtrace_symbols(addrlist: *const *mut ::c_void, len: ::size_t) -> *mut *mut ::c_char; backtrace_symbols_fd( addrlist: *const *mut ::c_void, len: ::size_t, fd: ::c_int, ) -> ::c_int1646 pub fn backtrace_symbols_fd( 1647 addrlist: *const *mut ::c_void, 1648 len: ::size_t, 1649 fd: ::c_int, 1650 ) -> ::c_int; backtrace_symbols_fmt( addrlist: *const *mut ::c_void, len: ::size_t, fmt: *const ::c_char, ) -> *mut *mut ::c_char1651 pub fn backtrace_symbols_fmt( 1652 addrlist: *const *mut ::c_void, 1653 len: ::size_t, 1654 fmt: *const ::c_char, 1655 ) -> *mut *mut ::c_char; 1656 } 1657 1658 cfg_if! { 1659 if #[cfg(libc_union)] { 1660 extern { 1661 // these functions use statfs which uses the union mount_info: 1662 pub fn statfs(path: *const ::c_char, buf: *mut statfs) -> ::c_int; 1663 pub fn fstatfs(fd: ::c_int, buf: *mut statfs) -> ::c_int; 1664 } 1665 } 1666 } 1667 1668 cfg_if! { 1669 if #[cfg(target_arch = "aarch64")] { 1670 mod aarch64; 1671 pub use self::aarch64::*; 1672 } else if #[cfg(target_arch = "arm")] { 1673 mod arm; 1674 pub use self::arm::*; 1675 } else if #[cfg(target_arch = "mips64")] { 1676 mod mips64; 1677 pub use self::mips64::*; 1678 } else if #[cfg(target_arch = "powerpc")] { 1679 mod powerpc; 1680 pub use self::powerpc::*; 1681 } else if #[cfg(target_arch = "powerpc64")] { 1682 mod powerpc64; 1683 pub use self::powerpc64::*; 1684 } else if #[cfg(target_arch = "riscv64")] { 1685 mod riscv64; 1686 pub use self::riscv64::*; 1687 } else if #[cfg(target_arch = "sparc64")] { 1688 mod sparc64; 1689 pub use self::sparc64::*; 1690 } else if #[cfg(target_arch = "x86")] { 1691 mod x86; 1692 pub use self::x86::*; 1693 } else if #[cfg(target_arch = "x86_64")] { 1694 mod x86_64; 1695 pub use self::x86_64::*; 1696 } else { 1697 // Unknown target_arch 1698 } 1699 } 1700