1 use crate::off64_t; 2 use crate::prelude::*; 3 4 pub type pthread_t = c_ulong; 5 pub type __priority_which_t = c_uint; 6 pub type __rlimit_resource_t = c_uint; 7 pub type Lmid_t = c_long; 8 pub type regoff_t = c_int; 9 pub type __kernel_rwf_t = c_int; 10 11 cfg_if! { 12 if #[cfg(doc)] { 13 // Used in `linux::arch` to define ioctl constants. 14 pub(crate) type Ioctl = c_ulong; 15 } else { 16 #[doc(hidden)] 17 pub type Ioctl = c_ulong; 18 } 19 } 20 21 s! { 22 pub struct aiocb { 23 pub aio_fildes: c_int, 24 pub aio_lio_opcode: c_int, 25 pub aio_reqprio: c_int, 26 pub aio_buf: *mut c_void, 27 pub aio_nbytes: size_t, 28 pub aio_sigevent: crate::sigevent, 29 __next_prio: *mut aiocb, 30 __abs_prio: c_int, 31 __policy: c_int, 32 __error_code: c_int, 33 __return_value: ssize_t, 34 pub aio_offset: off_t, 35 #[cfg(all( 36 not(gnu_file_offset_bits64), 37 not(target_arch = "x86_64"), 38 target_pointer_width = "32" 39 ))] 40 __unused1: [c_char; 4], 41 __glibc_reserved: [c_char; 32], 42 } 43 44 pub struct __exit_status { 45 pub e_termination: c_short, 46 pub e_exit: c_short, 47 } 48 49 pub struct __timeval { 50 pub tv_sec: i32, 51 pub tv_usec: i32, 52 } 53 54 pub struct glob64_t { 55 pub gl_pathc: size_t, 56 pub gl_pathv: *mut *mut c_char, 57 pub gl_offs: size_t, 58 pub gl_flags: c_int, 59 60 __unused1: *mut c_void, 61 __unused2: *mut c_void, 62 __unused3: *mut c_void, 63 __unused4: *mut c_void, 64 __unused5: *mut c_void, 65 } 66 67 pub struct msghdr { 68 pub msg_name: *mut c_void, 69 pub msg_namelen: crate::socklen_t, 70 pub msg_iov: *mut crate::iovec, 71 pub msg_iovlen: size_t, 72 pub msg_control: *mut c_void, 73 pub msg_controllen: size_t, 74 pub msg_flags: c_int, 75 } 76 77 pub struct cmsghdr { 78 pub cmsg_len: size_t, 79 pub cmsg_level: c_int, 80 pub cmsg_type: c_int, 81 } 82 83 pub struct termios { 84 pub c_iflag: crate::tcflag_t, 85 pub c_oflag: crate::tcflag_t, 86 pub c_cflag: crate::tcflag_t, 87 pub c_lflag: crate::tcflag_t, 88 pub c_line: crate::cc_t, 89 pub c_cc: [crate::cc_t; crate::NCCS], 90 #[cfg(not(any( 91 target_arch = "sparc", 92 target_arch = "sparc64", 93 target_arch = "mips", 94 target_arch = "mips32r6", 95 target_arch = "mips64", 96 target_arch = "mips64r6" 97 )))] 98 pub c_ispeed: crate::speed_t, 99 #[cfg(not(any( 100 target_arch = "sparc", 101 target_arch = "sparc64", 102 target_arch = "mips", 103 target_arch = "mips32r6", 104 target_arch = "mips64", 105 target_arch = "mips64r6" 106 )))] 107 pub c_ospeed: crate::speed_t, 108 } 109 110 pub struct mallinfo { 111 pub arena: c_int, 112 pub ordblks: c_int, 113 pub smblks: c_int, 114 pub hblks: c_int, 115 pub hblkhd: c_int, 116 pub usmblks: c_int, 117 pub fsmblks: c_int, 118 pub uordblks: c_int, 119 pub fordblks: c_int, 120 pub keepcost: c_int, 121 } 122 123 pub struct mallinfo2 { 124 pub arena: size_t, 125 pub ordblks: size_t, 126 pub smblks: size_t, 127 pub hblks: size_t, 128 pub hblkhd: size_t, 129 pub usmblks: size_t, 130 pub fsmblks: size_t, 131 pub uordblks: size_t, 132 pub fordblks: size_t, 133 pub keepcost: size_t, 134 } 135 136 pub struct nl_pktinfo { 137 pub group: u32, 138 } 139 140 pub struct nl_mmap_req { 141 pub nm_block_size: c_uint, 142 pub nm_block_nr: c_uint, 143 pub nm_frame_size: c_uint, 144 pub nm_frame_nr: c_uint, 145 } 146 147 pub struct nl_mmap_hdr { 148 pub nm_status: c_uint, 149 pub nm_len: c_uint, 150 pub nm_group: u32, 151 pub nm_pid: u32, 152 pub nm_uid: u32, 153 pub nm_gid: u32, 154 } 155 156 pub struct rtentry { 157 pub rt_pad1: c_ulong, 158 pub rt_dst: crate::sockaddr, 159 pub rt_gateway: crate::sockaddr, 160 pub rt_genmask: crate::sockaddr, 161 pub rt_flags: c_ushort, 162 pub rt_pad2: c_short, 163 pub rt_pad3: c_ulong, 164 pub rt_tos: c_uchar, 165 pub rt_class: c_uchar, 166 #[cfg(target_pointer_width = "64")] 167 pub rt_pad4: [c_short; 3usize], 168 #[cfg(not(target_pointer_width = "64"))] 169 pub rt_pad4: c_short, 170 pub rt_metric: c_short, 171 pub rt_dev: *mut c_char, 172 pub rt_mtu: c_ulong, 173 pub rt_window: c_ulong, 174 pub rt_irtt: c_ushort, 175 } 176 177 pub struct ntptimeval { 178 pub time: crate::timeval, 179 pub maxerror: c_long, 180 pub esterror: c_long, 181 pub tai: c_long, 182 pub __glibc_reserved1: c_long, 183 pub __glibc_reserved2: c_long, 184 pub __glibc_reserved3: c_long, 185 pub __glibc_reserved4: c_long, 186 } 187 188 pub struct regex_t { 189 __buffer: *mut c_void, 190 __allocated: size_t, 191 __used: size_t, 192 __syntax: c_ulong, 193 __fastmap: *mut c_char, 194 __translate: *mut c_char, 195 __re_nsub: size_t, 196 __bitfield: u8, 197 } 198 199 pub struct Elf64_Chdr { 200 pub ch_type: crate::Elf64_Word, 201 pub ch_reserved: crate::Elf64_Word, 202 pub ch_size: crate::Elf64_Xword, 203 pub ch_addralign: crate::Elf64_Xword, 204 } 205 206 pub struct Elf32_Chdr { 207 pub ch_type: crate::Elf32_Word, 208 pub ch_size: crate::Elf32_Word, 209 pub ch_addralign: crate::Elf32_Word, 210 } 211 212 pub struct seminfo { 213 pub semmap: c_int, 214 pub semmni: c_int, 215 pub semmns: c_int, 216 pub semmnu: c_int, 217 pub semmsl: c_int, 218 pub semopm: c_int, 219 pub semume: c_int, 220 pub semusz: c_int, 221 pub semvmx: c_int, 222 pub semaem: c_int, 223 } 224 225 pub struct ptrace_peeksiginfo_args { 226 pub off: crate::__u64, 227 pub flags: crate::__u32, 228 pub nr: crate::__s32, 229 } 230 231 pub struct __c_anonymous_ptrace_syscall_info_entry { 232 pub nr: crate::__u64, 233 pub args: [crate::__u64; 6], 234 } 235 236 pub struct __c_anonymous_ptrace_syscall_info_exit { 237 pub sval: crate::__s64, 238 pub is_error: crate::__u8, 239 } 240 241 pub struct __c_anonymous_ptrace_syscall_info_seccomp { 242 pub nr: crate::__u64, 243 pub args: [crate::__u64; 6], 244 pub ret_data: crate::__u32, 245 } 246 247 pub struct ptrace_syscall_info { 248 pub op: crate::__u8, 249 pub pad: [crate::__u8; 3], 250 pub arch: crate::__u32, 251 pub instruction_pointer: crate::__u64, 252 pub stack_pointer: crate::__u64, 253 pub u: __c_anonymous_ptrace_syscall_info_data, 254 } 255 256 pub struct ptrace_sud_config { 257 pub mode: crate::__u64, 258 pub selector: crate::__u64, 259 pub offset: crate::__u64, 260 pub len: crate::__u64, 261 } 262 263 pub struct iocb { 264 pub aio_data: crate::__u64, 265 #[cfg(target_endian = "little")] 266 pub aio_key: crate::__u32, 267 #[cfg(target_endian = "little")] 268 pub aio_rw_flags: crate::__kernel_rwf_t, 269 #[cfg(target_endian = "big")] 270 pub aio_rw_flags: crate::__kernel_rwf_t, 271 #[cfg(target_endian = "big")] 272 pub aio_key: crate::__u32, 273 pub aio_lio_opcode: crate::__u16, 274 pub aio_reqprio: crate::__s16, 275 pub aio_fildes: crate::__u32, 276 pub aio_buf: crate::__u64, 277 pub aio_nbytes: crate::__u64, 278 pub aio_offset: crate::__s64, 279 aio_reserved2: crate::__u64, 280 pub aio_flags: crate::__u32, 281 pub aio_resfd: crate::__u32, 282 } 283 284 // netinet/tcp.h 285 286 pub struct tcp_info { 287 pub tcpi_state: u8, 288 pub tcpi_ca_state: u8, 289 pub tcpi_retransmits: u8, 290 pub tcpi_probes: u8, 291 pub tcpi_backoff: u8, 292 pub tcpi_options: u8, 293 /// This contains the bitfields `tcpi_snd_wscale` and `tcpi_rcv_wscale`. 294 /// Each is 4 bits. 295 pub tcpi_snd_rcv_wscale: u8, 296 pub tcpi_rto: u32, 297 pub tcpi_ato: u32, 298 pub tcpi_snd_mss: u32, 299 pub tcpi_rcv_mss: u32, 300 pub tcpi_unacked: u32, 301 pub tcpi_sacked: u32, 302 pub tcpi_lost: u32, 303 pub tcpi_retrans: u32, 304 pub tcpi_fackets: u32, 305 pub tcpi_last_data_sent: u32, 306 pub tcpi_last_ack_sent: u32, 307 pub tcpi_last_data_recv: u32, 308 pub tcpi_last_ack_recv: u32, 309 pub tcpi_pmtu: u32, 310 pub tcpi_rcv_ssthresh: u32, 311 pub tcpi_rtt: u32, 312 pub tcpi_rttvar: u32, 313 pub tcpi_snd_ssthresh: u32, 314 pub tcpi_snd_cwnd: u32, 315 pub tcpi_advmss: u32, 316 pub tcpi_reordering: u32, 317 pub tcpi_rcv_rtt: u32, 318 pub tcpi_rcv_space: u32, 319 pub tcpi_total_retrans: u32, 320 } 321 322 pub struct fanotify_event_info_pidfd { 323 pub hdr: crate::fanotify_event_info_header, 324 pub pidfd: crate::__s32, 325 } 326 327 pub struct fanotify_event_info_error { 328 pub hdr: crate::fanotify_event_info_header, 329 pub error: crate::__s32, 330 pub error_count: crate::__u32, 331 } 332 333 // FIXME(1.0) this is actually a union 334 #[cfg_attr(target_pointer_width = "32", repr(align(4)))] 335 #[cfg_attr(target_pointer_width = "64", repr(align(8)))] 336 pub struct sem_t { 337 #[cfg(target_pointer_width = "32")] 338 __size: [c_char; 16], 339 #[cfg(target_pointer_width = "64")] 340 __size: [c_char; 32], 341 } 342 343 pub struct mbstate_t { 344 __count: c_int, 345 __wchb: [c_char; 4], 346 } 347 348 pub struct fpos64_t { 349 __pos: off64_t, 350 __state: crate::mbstate_t, 351 } 352 353 pub struct fpos_t { 354 #[cfg(not(gnu_file_offset_bits64))] 355 __pos: off_t, 356 #[cfg(gnu_file_offset_bits64)] 357 __pos: off64_t, 358 __state: crate::mbstate_t, 359 } 360 361 // linux x32 compatibility 362 // See https://sourceware.org/bugzilla/show_bug.cgi?id=16437 363 pub struct timespec { 364 pub tv_sec: time_t, 365 #[cfg(all(gnu_time_bits64, target_endian = "big"))] 366 __pad: i32, 367 #[cfg(not(all(target_arch = "x86_64", target_pointer_width = "32")))] 368 pub tv_nsec: c_long, 369 #[cfg(all(gnu_time_bits64, target_endian = "little"))] 370 __pad: i32, 371 } 372 } 373 374 impl siginfo_t { 375 pub unsafe fn si_addr(&self) -> *mut c_void { 376 #[repr(C)] 377 struct siginfo_sigfault { 378 _si_signo: c_int, 379 _si_errno: c_int, 380 _si_code: c_int, 381 si_addr: *mut c_void, 382 } 383 (*(self as *const siginfo_t).cast::<siginfo_sigfault>()).si_addr 384 } 385 386 pub unsafe fn si_value(&self) -> crate::sigval { 387 #[repr(C)] 388 struct siginfo_timer { 389 _si_signo: c_int, 390 _si_errno: c_int, 391 _si_code: c_int, 392 _si_tid: c_int, 393 _si_overrun: c_int, 394 si_sigval: crate::sigval, 395 } 396 (*(self as *const siginfo_t).cast::<siginfo_timer>()).si_sigval 397 } 398 } 399 400 // Internal, for casts to access union fields 401 #[repr(C)] 402 struct sifields_sigchld { 403 si_pid: crate::pid_t, 404 si_uid: crate::uid_t, 405 si_status: c_int, 406 si_utime: c_long, 407 si_stime: c_long, 408 } 409 impl Copy for sifields_sigchld {} 410 impl Clone for sifields_sigchld { 411 fn clone(&self) -> sifields_sigchld { 412 *self 413 } 414 } 415 416 // Internal, for casts to access union fields 417 #[repr(C)] 418 union sifields { 419 _align_pointer: *mut c_void, 420 sigchld: sifields_sigchld, 421 } 422 423 // Internal, for casts to access union fields. Note that some variants 424 // of sifields start with a pointer, which makes the alignment of 425 // sifields vary on 32-bit and 64-bit architectures. 426 #[repr(C)] 427 struct siginfo_f { 428 _siginfo_base: [c_int; 3], 429 sifields: sifields, 430 } 431 432 impl siginfo_t { 433 unsafe fn sifields(&self) -> &sifields { 434 &(*(self as *const siginfo_t).cast::<siginfo_f>()).sifields 435 } 436 437 pub unsafe fn si_pid(&self) -> crate::pid_t { 438 self.sifields().sigchld.si_pid 439 } 440 441 pub unsafe fn si_uid(&self) -> crate::uid_t { 442 self.sifields().sigchld.si_uid 443 } 444 445 pub unsafe fn si_status(&self) -> c_int { 446 self.sifields().sigchld.si_status 447 } 448 449 pub unsafe fn si_utime(&self) -> c_long { 450 self.sifields().sigchld.si_utime 451 } 452 453 pub unsafe fn si_stime(&self) -> c_long { 454 self.sifields().sigchld.si_stime 455 } 456 } 457 458 s_no_extra_traits! { 459 pub union __c_anonymous_ptrace_syscall_info_data { 460 pub entry: __c_anonymous_ptrace_syscall_info_entry, 461 pub exit: __c_anonymous_ptrace_syscall_info_exit, 462 pub seccomp: __c_anonymous_ptrace_syscall_info_seccomp, 463 } 464 465 pub struct utmpx { 466 pub ut_type: c_short, 467 pub ut_pid: crate::pid_t, 468 pub ut_line: [c_char; __UT_LINESIZE], 469 pub ut_id: [c_char; 4], 470 471 pub ut_user: [c_char; __UT_NAMESIZE], 472 pub ut_host: [c_char; __UT_HOSTSIZE], 473 pub ut_exit: __exit_status, 474 475 #[cfg(any( 476 target_arch = "aarch64", 477 target_arch = "s390x", 478 target_arch = "loongarch64", 479 all(target_pointer_width = "32", not(target_arch = "x86_64")) 480 ))] 481 pub ut_session: c_long, 482 #[cfg(any( 483 target_arch = "aarch64", 484 target_arch = "s390x", 485 target_arch = "loongarch64", 486 all(target_pointer_width = "32", not(target_arch = "x86_64")) 487 ))] 488 pub ut_tv: crate::timeval, 489 490 #[cfg(not(any( 491 target_arch = "aarch64", 492 target_arch = "s390x", 493 target_arch = "loongarch64", 494 all(target_pointer_width = "32", not(target_arch = "x86_64")) 495 )))] 496 pub ut_session: i32, 497 #[cfg(not(any( 498 target_arch = "aarch64", 499 target_arch = "s390x", 500 target_arch = "loongarch64", 501 all(target_pointer_width = "32", not(target_arch = "x86_64")) 502 )))] 503 pub ut_tv: __timeval, 504 505 pub ut_addr_v6: [i32; 4], 506 __glibc_reserved: [c_char; 20], 507 } 508 } 509 510 cfg_if! { 511 if #[cfg(feature = "extra_traits")] { 512 impl PartialEq for utmpx { 513 fn eq(&self, other: &utmpx) -> bool { 514 self.ut_type == other.ut_type 515 && self.ut_pid == other.ut_pid 516 && self.ut_line == other.ut_line 517 && self.ut_id == other.ut_id 518 && self.ut_user == other.ut_user 519 && self 520 .ut_host 521 .iter() 522 .zip(other.ut_host.iter()) 523 .all(|(a, b)| a == b) 524 && self.ut_exit == other.ut_exit 525 && self.ut_session == other.ut_session 526 && self.ut_tv == other.ut_tv 527 && self.ut_addr_v6 == other.ut_addr_v6 528 && self.__glibc_reserved == other.__glibc_reserved 529 } 530 } 531 532 impl Eq for utmpx {} 533 534 impl hash::Hash for utmpx { 535 fn hash<H: hash::Hasher>(&self, state: &mut H) { 536 self.ut_type.hash(state); 537 self.ut_pid.hash(state); 538 self.ut_line.hash(state); 539 self.ut_id.hash(state); 540 self.ut_user.hash(state); 541 self.ut_host.hash(state); 542 self.ut_exit.hash(state); 543 self.ut_session.hash(state); 544 self.ut_tv.hash(state); 545 self.ut_addr_v6.hash(state); 546 self.__glibc_reserved.hash(state); 547 } 548 } 549 550 impl PartialEq for __c_anonymous_ptrace_syscall_info_data { 551 fn eq(&self, other: &__c_anonymous_ptrace_syscall_info_data) -> bool { 552 unsafe { 553 self.entry == other.entry 554 || self.exit == other.exit 555 || self.seccomp == other.seccomp 556 } 557 } 558 } 559 560 impl Eq for __c_anonymous_ptrace_syscall_info_data {} 561 562 impl hash::Hash for __c_anonymous_ptrace_syscall_info_data { 563 fn hash<H: hash::Hasher>(&self, state: &mut H) { 564 unsafe { 565 self.entry.hash(state); 566 self.exit.hash(state); 567 self.seccomp.hash(state); 568 } 569 } 570 } 571 } 572 } 573 574 // include/uapi/asm-generic/hugetlb_encode.h 575 pub const HUGETLB_FLAG_ENCODE_SHIFT: c_int = 26; 576 pub const HUGETLB_FLAG_ENCODE_MASK: c_int = 0x3f; 577 578 pub const HUGETLB_FLAG_ENCODE_64KB: c_int = 16 << HUGETLB_FLAG_ENCODE_SHIFT; 579 pub const HUGETLB_FLAG_ENCODE_512KB: c_int = 19 << HUGETLB_FLAG_ENCODE_SHIFT; 580 pub const HUGETLB_FLAG_ENCODE_1MB: c_int = 20 << HUGETLB_FLAG_ENCODE_SHIFT; 581 pub const HUGETLB_FLAG_ENCODE_2MB: c_int = 21 << HUGETLB_FLAG_ENCODE_SHIFT; 582 pub const HUGETLB_FLAG_ENCODE_8MB: c_int = 23 << HUGETLB_FLAG_ENCODE_SHIFT; 583 pub const HUGETLB_FLAG_ENCODE_16MB: c_int = 24 << HUGETLB_FLAG_ENCODE_SHIFT; 584 pub const HUGETLB_FLAG_ENCODE_32MB: c_int = 25 << HUGETLB_FLAG_ENCODE_SHIFT; 585 pub const HUGETLB_FLAG_ENCODE_256MB: c_int = 28 << HUGETLB_FLAG_ENCODE_SHIFT; 586 pub const HUGETLB_FLAG_ENCODE_512MB: c_int = 29 << HUGETLB_FLAG_ENCODE_SHIFT; 587 pub const HUGETLB_FLAG_ENCODE_1GB: c_int = 30 << HUGETLB_FLAG_ENCODE_SHIFT; 588 pub const HUGETLB_FLAG_ENCODE_2GB: c_int = 31 << HUGETLB_FLAG_ENCODE_SHIFT; 589 pub const HUGETLB_FLAG_ENCODE_16GB: c_int = 34 << HUGETLB_FLAG_ENCODE_SHIFT; 590 591 // include/uapi/linux/mman.h 592 /* 593 * Huge page size encoding when MAP_HUGETLB is specified, and a huge page 594 * size other than the default is desired. See hugetlb_encode.h. 595 * All known huge page size encodings are provided here. It is the 596 * responsibility of the application to know which sizes are supported on 597 * the running system. See mmap(2) man page for details. 598 */ 599 pub const MAP_HUGE_SHIFT: c_int = HUGETLB_FLAG_ENCODE_SHIFT; 600 pub const MAP_HUGE_MASK: c_int = HUGETLB_FLAG_ENCODE_MASK; 601 602 pub const MAP_HUGE_64KB: c_int = HUGETLB_FLAG_ENCODE_64KB; 603 pub const MAP_HUGE_512KB: c_int = HUGETLB_FLAG_ENCODE_512KB; 604 pub const MAP_HUGE_1MB: c_int = HUGETLB_FLAG_ENCODE_1MB; 605 pub const MAP_HUGE_2MB: c_int = HUGETLB_FLAG_ENCODE_2MB; 606 pub const MAP_HUGE_8MB: c_int = HUGETLB_FLAG_ENCODE_8MB; 607 pub const MAP_HUGE_16MB: c_int = HUGETLB_FLAG_ENCODE_16MB; 608 pub const MAP_HUGE_32MB: c_int = HUGETLB_FLAG_ENCODE_32MB; 609 pub const MAP_HUGE_256MB: c_int = HUGETLB_FLAG_ENCODE_256MB; 610 pub const MAP_HUGE_512MB: c_int = HUGETLB_FLAG_ENCODE_512MB; 611 pub const MAP_HUGE_1GB: c_int = HUGETLB_FLAG_ENCODE_1GB; 612 pub const MAP_HUGE_2GB: c_int = HUGETLB_FLAG_ENCODE_2GB; 613 pub const MAP_HUGE_16GB: c_int = HUGETLB_FLAG_ENCODE_16GB; 614 615 pub const PRIO_PROCESS: crate::__priority_which_t = 0; 616 pub const PRIO_PGRP: crate::__priority_which_t = 1; 617 pub const PRIO_USER: crate::__priority_which_t = 2; 618 619 pub const MS_RMT_MASK: c_ulong = 0x02800051; 620 621 pub const __UT_LINESIZE: usize = 32; 622 pub const __UT_NAMESIZE: usize = 32; 623 pub const __UT_HOSTSIZE: usize = 256; 624 pub const EMPTY: c_short = 0; 625 pub const RUN_LVL: c_short = 1; 626 pub const BOOT_TIME: c_short = 2; 627 pub const NEW_TIME: c_short = 3; 628 pub const OLD_TIME: c_short = 4; 629 pub const INIT_PROCESS: c_short = 5; 630 pub const LOGIN_PROCESS: c_short = 6; 631 pub const USER_PROCESS: c_short = 7; 632 pub const DEAD_PROCESS: c_short = 8; 633 pub const ACCOUNTING: c_short = 9; 634 635 // dlfcn.h 636 pub const LM_ID_BASE: c_long = 0; 637 pub const LM_ID_NEWLM: c_long = -1; 638 639 pub const RTLD_DI_LMID: c_int = 1; 640 pub const RTLD_DI_LINKMAP: c_int = 2; 641 pub const RTLD_DI_CONFIGADDR: c_int = 3; 642 pub const RTLD_DI_SERINFO: c_int = 4; 643 pub const RTLD_DI_SERINFOSIZE: c_int = 5; 644 pub const RTLD_DI_ORIGIN: c_int = 6; 645 pub const RTLD_DI_PROFILENAME: c_int = 7; 646 pub const RTLD_DI_PROFILEOUT: c_int = 8; 647 pub const RTLD_DI_TLS_MODID: c_int = 9; 648 pub const RTLD_DI_TLS_DATA: c_int = 10; 649 650 pub const SOCK_NONBLOCK: c_int = O_NONBLOCK; 651 652 pub const SOL_RXRPC: c_int = 272; 653 pub const SOL_PPPOL2TP: c_int = 273; 654 pub const SOL_PNPIPE: c_int = 275; 655 pub const SOL_RDS: c_int = 276; 656 pub const SOL_IUCV: c_int = 277; 657 pub const SOL_CAIF: c_int = 278; 658 pub const SOL_NFC: c_int = 280; 659 660 pub const MSG_TRYHARD: c_int = 4; 661 662 pub const LC_PAPER: c_int = 7; 663 pub const LC_NAME: c_int = 8; 664 pub const LC_ADDRESS: c_int = 9; 665 pub const LC_TELEPHONE: c_int = 10; 666 pub const LC_MEASUREMENT: c_int = 11; 667 pub const LC_IDENTIFICATION: c_int = 12; 668 pub const LC_PAPER_MASK: c_int = 1 << LC_PAPER; 669 pub const LC_NAME_MASK: c_int = 1 << LC_NAME; 670 pub const LC_ADDRESS_MASK: c_int = 1 << LC_ADDRESS; 671 pub const LC_TELEPHONE_MASK: c_int = 1 << LC_TELEPHONE; 672 pub const LC_MEASUREMENT_MASK: c_int = 1 << LC_MEASUREMENT; 673 pub const LC_IDENTIFICATION_MASK: c_int = 1 << LC_IDENTIFICATION; 674 pub const LC_ALL_MASK: c_int = crate::LC_CTYPE_MASK 675 | crate::LC_NUMERIC_MASK 676 | crate::LC_TIME_MASK 677 | crate::LC_COLLATE_MASK 678 | crate::LC_MONETARY_MASK 679 | crate::LC_MESSAGES_MASK 680 | LC_PAPER_MASK 681 | LC_NAME_MASK 682 | LC_ADDRESS_MASK 683 | LC_TELEPHONE_MASK 684 | LC_MEASUREMENT_MASK 685 | LC_IDENTIFICATION_MASK; 686 687 pub const ENOTSUP: c_int = EOPNOTSUPP; 688 689 pub const SOCK_SEQPACKET: c_int = 5; 690 pub const SOCK_DCCP: c_int = 6; 691 #[deprecated(since = "0.2.70", note = "AF_PACKET must be used instead")] 692 pub const SOCK_PACKET: c_int = 10; 693 694 pub const AF_IB: c_int = 27; 695 pub const AF_MPLS: c_int = 28; 696 pub const AF_NFC: c_int = 39; 697 pub const AF_VSOCK: c_int = 40; 698 pub const AF_XDP: c_int = 44; 699 pub const PF_IB: c_int = AF_IB; 700 pub const PF_MPLS: c_int = AF_MPLS; 701 pub const PF_NFC: c_int = AF_NFC; 702 pub const PF_VSOCK: c_int = AF_VSOCK; 703 pub const PF_XDP: c_int = AF_XDP; 704 705 pub const SIGEV_THREAD_ID: c_int = 4; 706 707 pub const BUFSIZ: c_uint = 8192; 708 pub const TMP_MAX: c_uint = 238328; 709 pub const FOPEN_MAX: c_uint = 16; 710 pub const FILENAME_MAX: c_uint = 4096; 711 pub const POSIX_MADV_DONTNEED: c_int = 4; 712 pub const _CS_GNU_LIBC_VERSION: c_int = 2; 713 pub const _CS_GNU_LIBPTHREAD_VERSION: c_int = 3; 714 pub const _CS_V6_ENV: c_int = 1148; 715 pub const _CS_V7_ENV: c_int = 1149; 716 pub const _SC_EQUIV_CLASS_MAX: c_int = 41; 717 pub const _SC_CHARCLASS_NAME_MAX: c_int = 45; 718 pub const _SC_PII: c_int = 53; 719 pub const _SC_PII_XTI: c_int = 54; 720 pub const _SC_PII_SOCKET: c_int = 55; 721 pub const _SC_PII_INTERNET: c_int = 56; 722 pub const _SC_PII_OSI: c_int = 57; 723 pub const _SC_POLL: c_int = 58; 724 pub const _SC_SELECT: c_int = 59; 725 pub const _SC_PII_INTERNET_STREAM: c_int = 61; 726 pub const _SC_PII_INTERNET_DGRAM: c_int = 62; 727 pub const _SC_PII_OSI_COTS: c_int = 63; 728 pub const _SC_PII_OSI_CLTS: c_int = 64; 729 pub const _SC_PII_OSI_M: c_int = 65; 730 pub const _SC_T_IOV_MAX: c_int = 66; 731 pub const _SC_2_C_VERSION: c_int = 96; 732 pub const _SC_CHAR_BIT: c_int = 101; 733 pub const _SC_CHAR_MAX: c_int = 102; 734 pub const _SC_CHAR_MIN: c_int = 103; 735 pub const _SC_INT_MAX: c_int = 104; 736 pub const _SC_INT_MIN: c_int = 105; 737 pub const _SC_LONG_BIT: c_int = 106; 738 pub const _SC_WORD_BIT: c_int = 107; 739 pub const _SC_MB_LEN_MAX: c_int = 108; 740 pub const _SC_SSIZE_MAX: c_int = 110; 741 pub const _SC_SCHAR_MAX: c_int = 111; 742 pub const _SC_SCHAR_MIN: c_int = 112; 743 pub const _SC_SHRT_MAX: c_int = 113; 744 pub const _SC_SHRT_MIN: c_int = 114; 745 pub const _SC_UCHAR_MAX: c_int = 115; 746 pub const _SC_UINT_MAX: c_int = 116; 747 pub const _SC_ULONG_MAX: c_int = 117; 748 pub const _SC_USHRT_MAX: c_int = 118; 749 pub const _SC_NL_ARGMAX: c_int = 119; 750 pub const _SC_NL_LANGMAX: c_int = 120; 751 pub const _SC_NL_MSGMAX: c_int = 121; 752 pub const _SC_NL_NMAX: c_int = 122; 753 pub const _SC_NL_SETMAX: c_int = 123; 754 pub const _SC_NL_TEXTMAX: c_int = 124; 755 pub const _SC_BASE: c_int = 134; 756 pub const _SC_C_LANG_SUPPORT: c_int = 135; 757 pub const _SC_C_LANG_SUPPORT_R: c_int = 136; 758 pub const _SC_DEVICE_IO: c_int = 140; 759 pub const _SC_DEVICE_SPECIFIC: c_int = 141; 760 pub const _SC_DEVICE_SPECIFIC_R: c_int = 142; 761 pub const _SC_FD_MGMT: c_int = 143; 762 pub const _SC_FIFO: c_int = 144; 763 pub const _SC_PIPE: c_int = 145; 764 pub const _SC_FILE_ATTRIBUTES: c_int = 146; 765 pub const _SC_FILE_LOCKING: c_int = 147; 766 pub const _SC_FILE_SYSTEM: c_int = 148; 767 pub const _SC_MULTI_PROCESS: c_int = 150; 768 pub const _SC_SINGLE_PROCESS: c_int = 151; 769 pub const _SC_NETWORKING: c_int = 152; 770 pub const _SC_REGEX_VERSION: c_int = 156; 771 pub const _SC_SIGNALS: c_int = 158; 772 pub const _SC_SYSTEM_DATABASE: c_int = 162; 773 pub const _SC_SYSTEM_DATABASE_R: c_int = 163; 774 pub const _SC_USER_GROUPS: c_int = 166; 775 pub const _SC_USER_GROUPS_R: c_int = 167; 776 pub const _SC_LEVEL1_ICACHE_SIZE: c_int = 185; 777 pub const _SC_LEVEL1_ICACHE_ASSOC: c_int = 186; 778 pub const _SC_LEVEL1_ICACHE_LINESIZE: c_int = 187; 779 pub const _SC_LEVEL1_DCACHE_SIZE: c_int = 188; 780 pub const _SC_LEVEL1_DCACHE_ASSOC: c_int = 189; 781 pub const _SC_LEVEL1_DCACHE_LINESIZE: c_int = 190; 782 pub const _SC_LEVEL2_CACHE_SIZE: c_int = 191; 783 pub const _SC_LEVEL2_CACHE_ASSOC: c_int = 192; 784 pub const _SC_LEVEL2_CACHE_LINESIZE: c_int = 193; 785 pub const _SC_LEVEL3_CACHE_SIZE: c_int = 194; 786 pub const _SC_LEVEL3_CACHE_ASSOC: c_int = 195; 787 pub const _SC_LEVEL3_CACHE_LINESIZE: c_int = 196; 788 pub const _SC_LEVEL4_CACHE_SIZE: c_int = 197; 789 pub const _SC_LEVEL4_CACHE_ASSOC: c_int = 198; 790 pub const _SC_LEVEL4_CACHE_LINESIZE: c_int = 199; 791 pub const O_ACCMODE: c_int = 3; 792 pub const ST_RELATIME: c_ulong = 4096; 793 pub const NI_MAXHOST: crate::socklen_t = 1025; 794 795 // Most `*_SUPER_MAGIC` constants are defined at the `linux_like` level; the 796 // following are only available on newer Linux versions than the versions 797 // currently used in CI in some configurations, so we define them here. 798 cfg_if! { 799 if #[cfg(not(target_arch = "s390x"))] { 800 pub const BINDERFS_SUPER_MAGIC: c_long = 0x6c6f6f70; 801 pub const XFS_SUPER_MAGIC: c_long = 0x58465342; 802 } else if #[cfg(target_arch = "s390x")] { 803 pub const BINDERFS_SUPER_MAGIC: c_uint = 0x6c6f6f70; 804 pub const XFS_SUPER_MAGIC: c_uint = 0x58465342; 805 } 806 } 807 808 pub const CPU_SETSIZE: c_int = 0x400; 809 810 pub const PTRACE_TRACEME: c_uint = 0; 811 pub const PTRACE_PEEKTEXT: c_uint = 1; 812 pub const PTRACE_PEEKDATA: c_uint = 2; 813 pub const PTRACE_PEEKUSER: c_uint = 3; 814 pub const PTRACE_POKETEXT: c_uint = 4; 815 pub const PTRACE_POKEDATA: c_uint = 5; 816 pub const PTRACE_POKEUSER: c_uint = 6; 817 pub const PTRACE_CONT: c_uint = 7; 818 pub const PTRACE_KILL: c_uint = 8; 819 pub const PTRACE_SINGLESTEP: c_uint = 9; 820 pub const PTRACE_ATTACH: c_uint = 16; 821 pub const PTRACE_SYSCALL: c_uint = 24; 822 pub const PTRACE_SETOPTIONS: c_uint = 0x4200; 823 pub const PTRACE_GETEVENTMSG: c_uint = 0x4201; 824 pub const PTRACE_GETSIGINFO: c_uint = 0x4202; 825 pub const PTRACE_SETSIGINFO: c_uint = 0x4203; 826 pub const PTRACE_GETREGSET: c_uint = 0x4204; 827 pub const PTRACE_SETREGSET: c_uint = 0x4205; 828 pub const PTRACE_SEIZE: c_uint = 0x4206; 829 pub const PTRACE_INTERRUPT: c_uint = 0x4207; 830 pub const PTRACE_LISTEN: c_uint = 0x4208; 831 pub const PTRACE_PEEKSIGINFO: c_uint = 0x4209; 832 pub const PTRACE_GETSIGMASK: c_uint = 0x420a; 833 pub const PTRACE_SETSIGMASK: c_uint = 0x420b; 834 pub const PTRACE_GET_SYSCALL_INFO: c_uint = 0x420e; 835 pub const PTRACE_SYSCALL_INFO_NONE: crate::__u8 = 0; 836 pub const PTRACE_SYSCALL_INFO_ENTRY: crate::__u8 = 1; 837 pub const PTRACE_SYSCALL_INFO_EXIT: crate::__u8 = 2; 838 pub const PTRACE_SYSCALL_INFO_SECCOMP: crate::__u8 = 3; 839 pub const PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG: crate::__u8 = 0x4210; 840 pub const PTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG: crate::__u8 = 0x4211; 841 842 // linux/rtnetlink.h 843 pub const TCA_PAD: c_ushort = 9; 844 pub const TCA_DUMP_INVISIBLE: c_ushort = 10; 845 pub const TCA_CHAIN: c_ushort = 11; 846 pub const TCA_HW_OFFLOAD: c_ushort = 12; 847 848 pub const RTM_DELNETCONF: u16 = 81; 849 pub const RTM_NEWSTATS: u16 = 92; 850 pub const RTM_GETSTATS: u16 = 94; 851 pub const RTM_NEWCACHEREPORT: u16 = 96; 852 853 pub const RTM_F_LOOKUP_TABLE: c_uint = 0x1000; 854 pub const RTM_F_FIB_MATCH: c_uint = 0x2000; 855 856 pub const RTA_VIA: c_ushort = 18; 857 pub const RTA_NEWDST: c_ushort = 19; 858 pub const RTA_PREF: c_ushort = 20; 859 pub const RTA_ENCAP_TYPE: c_ushort = 21; 860 pub const RTA_ENCAP: c_ushort = 22; 861 pub const RTA_EXPIRES: c_ushort = 23; 862 pub const RTA_PAD: c_ushort = 24; 863 pub const RTA_UID: c_ushort = 25; 864 pub const RTA_TTL_PROPAGATE: c_ushort = 26; 865 866 // linux/neighbor.h 867 pub const NTF_EXT_LEARNED: u8 = 0x10; 868 pub const NTF_OFFLOADED: u8 = 0x20; 869 870 pub const NDA_MASTER: c_ushort = 9; 871 pub const NDA_LINK_NETNSID: c_ushort = 10; 872 pub const NDA_SRC_VNI: c_ushort = 11; 873 874 // linux/personality.h 875 pub const UNAME26: c_int = 0x0020000; 876 pub const FDPIC_FUNCPTRS: c_int = 0x0080000; 877 878 pub const MAX_LINKS: c_int = 32; 879 880 pub const GENL_UNS_ADMIN_PERM: c_int = 0x10; 881 882 pub const GENL_ID_VFS_DQUOT: c_int = crate::NLMSG_MIN_TYPE + 1; 883 pub const GENL_ID_PMCRAID: c_int = crate::NLMSG_MIN_TYPE + 2; 884 885 pub const ELFOSABI_ARM_AEABI: u8 = 64; 886 887 // linux/sched.h 888 pub const CLONE_NEWTIME: c_int = 0x80; 889 // DIFF(main): changed to `c_ulonglong` in e9abac9ac2 890 pub const CLONE_CLEAR_SIGHAND: c_int = 0x100000000; 891 pub const CLONE_INTO_CGROUP: c_int = 0x200000000; 892 893 // linux/keyctl.h 894 pub const KEYCTL_DH_COMPUTE: u32 = 23; 895 pub const KEYCTL_PKEY_QUERY: u32 = 24; 896 pub const KEYCTL_PKEY_ENCRYPT: u32 = 25; 897 pub const KEYCTL_PKEY_DECRYPT: u32 = 26; 898 pub const KEYCTL_PKEY_SIGN: u32 = 27; 899 pub const KEYCTL_PKEY_VERIFY: u32 = 28; 900 pub const KEYCTL_RESTRICT_KEYRING: u32 = 29; 901 902 pub const KEYCTL_SUPPORTS_ENCRYPT: u32 = 0x01; 903 pub const KEYCTL_SUPPORTS_DECRYPT: u32 = 0x02; 904 pub const KEYCTL_SUPPORTS_SIGN: u32 = 0x04; 905 pub const KEYCTL_SUPPORTS_VERIFY: u32 = 0x08; 906 cfg_if! { 907 if #[cfg(not(any( 908 target_arch = "mips", 909 target_arch = "mips32r6", 910 target_arch = "mips64", 911 target_arch = "mips64r6" 912 )))] { 913 pub const KEYCTL_MOVE: u32 = 30; 914 pub const KEYCTL_CAPABILITIES: u32 = 31; 915 916 pub const KEYCTL_CAPS0_CAPABILITIES: u32 = 0x01; 917 pub const KEYCTL_CAPS0_PERSISTENT_KEYRINGS: u32 = 0x02; 918 pub const KEYCTL_CAPS0_DIFFIE_HELLMAN: u32 = 0x04; 919 pub const KEYCTL_CAPS0_PUBLIC_KEY: u32 = 0x08; 920 pub const KEYCTL_CAPS0_BIG_KEY: u32 = 0x10; 921 pub const KEYCTL_CAPS0_INVALIDATE: u32 = 0x20; 922 pub const KEYCTL_CAPS0_RESTRICT_KEYRING: u32 = 0x40; 923 pub const KEYCTL_CAPS0_MOVE: u32 = 0x80; 924 pub const KEYCTL_CAPS1_NS_KEYRING_NAME: u32 = 0x01; 925 pub const KEYCTL_CAPS1_NS_KEY_TAG: u32 = 0x02; 926 } 927 } 928 929 pub const M_MXFAST: c_int = 1; 930 pub const M_NLBLKS: c_int = 2; 931 pub const M_GRAIN: c_int = 3; 932 pub const M_KEEP: c_int = 4; 933 pub const M_TRIM_THRESHOLD: c_int = -1; 934 pub const M_TOP_PAD: c_int = -2; 935 pub const M_MMAP_THRESHOLD: c_int = -3; 936 pub const M_MMAP_MAX: c_int = -4; 937 pub const M_CHECK_ACTION: c_int = -5; 938 pub const M_PERTURB: c_int = -6; 939 pub const M_ARENA_TEST: c_int = -7; 940 pub const M_ARENA_MAX: c_int = -8; 941 942 pub const SOMAXCONN: c_int = 4096; 943 944 // linux/mount.h 945 pub const MOVE_MOUNT_F_SYMLINKS: c_uint = 0x00000001; 946 pub const MOVE_MOUNT_F_AUTOMOUNTS: c_uint = 0x00000002; 947 pub const MOVE_MOUNT_F_EMPTY_PATH: c_uint = 0x00000004; 948 pub const MOVE_MOUNT_T_SYMLINKS: c_uint = 0x00000010; 949 pub const MOVE_MOUNT_T_AUTOMOUNTS: c_uint = 0x00000020; 950 pub const MOVE_MOUNT_T_EMPTY_PATH: c_uint = 0x00000040; 951 pub const MOVE_MOUNT_SET_GROUP: c_uint = 0x00000100; 952 pub const MOVE_MOUNT_BENEATH: c_uint = 0x00000200; 953 954 // sys/timex.h 955 pub const ADJ_OFFSET: c_uint = 0x0001; 956 pub const ADJ_FREQUENCY: c_uint = 0x0002; 957 pub const ADJ_MAXERROR: c_uint = 0x0004; 958 pub const ADJ_ESTERROR: c_uint = 0x0008; 959 pub const ADJ_STATUS: c_uint = 0x0010; 960 pub const ADJ_TIMECONST: c_uint = 0x0020; 961 pub const ADJ_TAI: c_uint = 0x0080; 962 pub const ADJ_SETOFFSET: c_uint = 0x0100; 963 pub const ADJ_MICRO: c_uint = 0x1000; 964 pub const ADJ_NANO: c_uint = 0x2000; 965 pub const ADJ_TICK: c_uint = 0x4000; 966 pub const ADJ_OFFSET_SINGLESHOT: c_uint = 0x8001; 967 pub const ADJ_OFFSET_SS_READ: c_uint = 0xa001; 968 pub const MOD_OFFSET: c_uint = ADJ_OFFSET; 969 pub const MOD_FREQUENCY: c_uint = ADJ_FREQUENCY; 970 pub const MOD_MAXERROR: c_uint = ADJ_MAXERROR; 971 pub const MOD_ESTERROR: c_uint = ADJ_ESTERROR; 972 pub const MOD_STATUS: c_uint = ADJ_STATUS; 973 pub const MOD_TIMECONST: c_uint = ADJ_TIMECONST; 974 pub const MOD_CLKB: c_uint = ADJ_TICK; 975 pub const MOD_CLKA: c_uint = ADJ_OFFSET_SINGLESHOT; 976 pub const MOD_TAI: c_uint = ADJ_TAI; 977 pub const MOD_MICRO: c_uint = ADJ_MICRO; 978 pub const MOD_NANO: c_uint = ADJ_NANO; 979 pub const STA_PLL: c_int = 0x0001; 980 pub const STA_PPSFREQ: c_int = 0x0002; 981 pub const STA_PPSTIME: c_int = 0x0004; 982 pub const STA_FLL: c_int = 0x0008; 983 pub const STA_INS: c_int = 0x0010; 984 pub const STA_DEL: c_int = 0x0020; 985 pub const STA_UNSYNC: c_int = 0x0040; 986 pub const STA_FREQHOLD: c_int = 0x0080; 987 pub const STA_PPSSIGNAL: c_int = 0x0100; 988 pub const STA_PPSJITTER: c_int = 0x0200; 989 pub const STA_PPSWANDER: c_int = 0x0400; 990 pub const STA_PPSERROR: c_int = 0x0800; 991 pub const STA_CLOCKERR: c_int = 0x1000; 992 pub const STA_NANO: c_int = 0x2000; 993 pub const STA_MODE: c_int = 0x4000; 994 pub const STA_CLK: c_int = 0x8000; 995 pub const STA_RONLY: c_int = STA_PPSSIGNAL 996 | STA_PPSJITTER 997 | STA_PPSWANDER 998 | STA_PPSERROR 999 | STA_CLOCKERR 1000 | STA_NANO 1001 | STA_MODE 1002 | STA_CLK; 1003 pub const NTP_API: c_int = 4; 1004 pub const TIME_OK: c_int = 0; 1005 pub const TIME_INS: c_int = 1; 1006 pub const TIME_DEL: c_int = 2; 1007 pub const TIME_OOP: c_int = 3; 1008 pub const TIME_WAIT: c_int = 4; 1009 pub const TIME_ERROR: c_int = 5; 1010 pub const TIME_BAD: c_int = TIME_ERROR; 1011 pub const MAXTC: c_long = 6; 1012 1013 // Portable GLOB_* flags are defined at the `linux_like` level. 1014 // The following are GNU extensions. 1015 pub const GLOB_PERIOD: c_int = 1 << 7; 1016 pub const GLOB_ALTDIRFUNC: c_int = 1 << 9; 1017 pub const GLOB_BRACE: c_int = 1 << 10; 1018 pub const GLOB_NOMAGIC: c_int = 1 << 11; 1019 pub const GLOB_TILDE: c_int = 1 << 12; 1020 pub const GLOB_ONLYDIR: c_int = 1 << 13; 1021 pub const GLOB_TILDE_CHECK: c_int = 1 << 14; 1022 1023 pub const MADV_COLLAPSE: c_int = 25; 1024 1025 cfg_if! { 1026 if #[cfg(any( 1027 target_arch = "arm", 1028 target_arch = "x86", 1029 target_arch = "x86_64", 1030 target_arch = "s390x", 1031 target_arch = "riscv64", 1032 target_arch = "riscv32" 1033 ))] { 1034 pub const PTHREAD_STACK_MIN: size_t = 16384; 1035 } else if #[cfg(any(target_arch = "sparc", target_arch = "sparc64"))] { 1036 pub const PTHREAD_STACK_MIN: size_t = 0x6000; 1037 } else { 1038 pub const PTHREAD_STACK_MIN: size_t = 131072; 1039 } 1040 } 1041 pub const PTHREAD_MUTEX_ADAPTIVE_NP: c_int = 3; 1042 1043 pub const REG_STARTEND: c_int = 4; 1044 1045 pub const REG_EEND: c_int = 14; 1046 pub const REG_ESIZE: c_int = 15; 1047 pub const REG_ERPAREN: c_int = 16; 1048 1049 extern "C" { 1050 pub fn fgetspent_r( 1051 fp: *mut crate::FILE, 1052 spbuf: *mut crate::spwd, 1053 buf: *mut c_char, 1054 buflen: size_t, 1055 spbufp: *mut *mut crate::spwd, 1056 ) -> c_int; 1057 pub fn sgetspent_r( 1058 s: *const c_char, 1059 spbuf: *mut crate::spwd, 1060 buf: *mut c_char, 1061 buflen: size_t, 1062 spbufp: *mut *mut crate::spwd, 1063 ) -> c_int; 1064 pub fn getspent_r( 1065 spbuf: *mut crate::spwd, 1066 buf: *mut c_char, 1067 buflen: size_t, 1068 spbufp: *mut *mut crate::spwd, 1069 ) -> c_int; 1070 pub fn qsort_r( 1071 base: *mut c_void, 1072 num: size_t, 1073 size: size_t, 1074 compar: Option<unsafe extern "C" fn(*const c_void, *const c_void, *mut c_void) -> c_int>, 1075 arg: *mut c_void, 1076 ); 1077 #[cfg_attr(gnu_time_bits64, link_name = "__sendmmsg64")] 1078 pub fn sendmmsg( 1079 sockfd: c_int, 1080 msgvec: *mut crate::mmsghdr, 1081 vlen: c_uint, 1082 flags: c_int, 1083 ) -> c_int; 1084 #[cfg_attr(gnu_time_bits64, link_name = "__recvmmsg64")] 1085 pub fn recvmmsg( 1086 sockfd: c_int, 1087 msgvec: *mut crate::mmsghdr, 1088 vlen: c_uint, 1089 flags: c_int, 1090 timeout: *mut crate::timespec, 1091 ) -> c_int; 1092 1093 pub fn getrlimit64(resource: crate::__rlimit_resource_t, rlim: *mut crate::rlimit64) -> c_int; 1094 pub fn setrlimit64(resource: crate::__rlimit_resource_t, rlim: *const crate::rlimit64) 1095 -> c_int; 1096 #[cfg_attr(gnu_file_offset_bits64, link_name = "getrlimit64")] 1097 pub fn getrlimit(resource: crate::__rlimit_resource_t, rlim: *mut crate::rlimit) -> c_int; 1098 #[cfg_attr(gnu_file_offset_bits64, link_name = "setrlimit64")] 1099 pub fn setrlimit(resource: crate::__rlimit_resource_t, rlim: *const crate::rlimit) -> c_int; 1100 #[cfg_attr(gnu_file_offset_bits64, link_name = "prlimit64")] 1101 pub fn prlimit( 1102 pid: crate::pid_t, 1103 resource: crate::__rlimit_resource_t, 1104 new_limit: *const crate::rlimit, 1105 old_limit: *mut crate::rlimit, 1106 ) -> c_int; 1107 pub fn prlimit64( 1108 pid: crate::pid_t, 1109 resource: crate::__rlimit_resource_t, 1110 new_limit: *const crate::rlimit64, 1111 old_limit: *mut crate::rlimit64, 1112 ) -> c_int; 1113 pub fn utmpname(file: *const c_char) -> c_int; 1114 pub fn utmpxname(file: *const c_char) -> c_int; 1115 pub fn getutxent() -> *mut utmpx; 1116 pub fn getutxid(ut: *const utmpx) -> *mut utmpx; 1117 pub fn getutxline(ut: *const utmpx) -> *mut utmpx; 1118 pub fn pututxline(ut: *const utmpx) -> *mut utmpx; 1119 pub fn setutxent(); 1120 pub fn endutxent(); 1121 pub fn getpt() -> c_int; 1122 pub fn mallopt(param: c_int, value: c_int) -> c_int; 1123 #[cfg_attr(gnu_time_bits64, link_name = "__gettimeofday64")] 1124 pub fn gettimeofday(tp: *mut crate::timeval, tz: *mut crate::timezone) -> c_int; 1125 pub fn getentropy(buf: *mut c_void, buflen: size_t) -> c_int; 1126 pub fn getrandom(buf: *mut c_void, buflen: size_t, flags: c_uint) -> ssize_t; 1127 pub fn getauxval(type_: c_ulong) -> c_ulong; 1128 1129 #[cfg_attr(gnu_time_bits64, link_name = "___adjtimex64")] 1130 pub fn adjtimex(buf: *mut timex) -> c_int; 1131 #[cfg_attr(gnu_time_bits64, link_name = "___adjtimex64")] 1132 pub fn ntp_adjtime(buf: *mut timex) -> c_int; 1133 #[cfg_attr(not(gnu_time_bits64), link_name = "ntp_gettimex")] 1134 #[cfg_attr(gnu_time_bits64, link_name = "__ntp_gettime64")] 1135 pub fn ntp_gettime(buf: *mut ntptimeval) -> c_int; 1136 #[cfg_attr(gnu_time_bits64, link_name = "__clock_adjtime64")] 1137 pub fn clock_adjtime(clk_id: crate::clockid_t, buf: *mut crate::timex) -> c_int; 1138 1139 pub fn fanotify_mark( 1140 fd: c_int, 1141 flags: c_uint, 1142 mask: u64, 1143 dirfd: c_int, 1144 path: *const c_char, 1145 ) -> c_int; 1146 #[cfg_attr(gnu_file_offset_bits64, link_name = "preadv64v2")] 1147 pub fn preadv2( 1148 fd: c_int, 1149 iov: *const crate::iovec, 1150 iovcnt: c_int, 1151 offset: off_t, 1152 flags: c_int, 1153 ) -> ssize_t; 1154 #[cfg_attr(gnu_file_offset_bits64, link_name = "pwritev64v2")] 1155 pub fn pwritev2( 1156 fd: c_int, 1157 iov: *const crate::iovec, 1158 iovcnt: c_int, 1159 offset: off_t, 1160 flags: c_int, 1161 ) -> ssize_t; 1162 pub fn preadv64v2( 1163 fd: c_int, 1164 iov: *const crate::iovec, 1165 iovcnt: c_int, 1166 offset: off64_t, 1167 flags: c_int, 1168 ) -> ssize_t; 1169 pub fn pwritev64v2( 1170 fd: c_int, 1171 iov: *const crate::iovec, 1172 iovcnt: c_int, 1173 offset: off64_t, 1174 flags: c_int, 1175 ) -> ssize_t; 1176 pub fn renameat2( 1177 olddirfd: c_int, 1178 oldpath: *const c_char, 1179 newdirfd: c_int, 1180 newpath: *const c_char, 1181 flags: c_uint, 1182 ) -> c_int; 1183 1184 // Added in `glibc` 2.25 1185 pub fn explicit_bzero(s: *mut c_void, len: size_t); 1186 // Added in `glibc` 2.29 1187 pub fn reallocarray(ptr: *mut c_void, nmemb: size_t, size: size_t) -> *mut c_void; 1188 1189 pub fn ctermid(s: *mut c_char) -> *mut c_char; 1190 pub fn backtrace(buf: *mut *mut c_void, sz: c_int) -> c_int; 1191 #[cfg_attr(gnu_time_bits64, link_name = "__glob64_time64")] 1192 pub fn glob64( 1193 pattern: *const c_char, 1194 flags: c_int, 1195 errfunc: Option<extern "C" fn(epath: *const c_char, errno: c_int) -> c_int>, 1196 pglob: *mut glob64_t, 1197 ) -> c_int; 1198 #[cfg_attr(gnu_time_bits64, link_name = "__globfree64_time64")] 1199 pub fn globfree64(pglob: *mut glob64_t); 1200 pub fn ptrace(request: c_uint, ...) -> c_long; 1201 pub fn pthread_attr_getaffinity_np( 1202 attr: *const crate::pthread_attr_t, 1203 cpusetsize: size_t, 1204 cpuset: *mut crate::cpu_set_t, 1205 ) -> c_int; 1206 pub fn pthread_attr_setaffinity_np( 1207 attr: *mut crate::pthread_attr_t, 1208 cpusetsize: size_t, 1209 cpuset: *const crate::cpu_set_t, 1210 ) -> c_int; 1211 pub fn getpriority(which: crate::__priority_which_t, who: crate::id_t) -> c_int; 1212 pub fn setpriority(which: crate::__priority_which_t, who: crate::id_t, prio: c_int) -> c_int; 1213 pub fn pthread_rwlockattr_getkind_np( 1214 attr: *const crate::pthread_rwlockattr_t, 1215 val: *mut c_int, 1216 ) -> c_int; 1217 pub fn pthread_rwlockattr_setkind_np( 1218 attr: *mut crate::pthread_rwlockattr_t, 1219 val: c_int, 1220 ) -> c_int; 1221 pub fn pthread_sigqueue(thread: crate::pthread_t, sig: c_int, value: crate::sigval) -> c_int; 1222 pub fn mallinfo() -> crate::mallinfo; 1223 pub fn mallinfo2() -> crate::mallinfo2; 1224 pub fn malloc_stats(); 1225 pub fn malloc_info(options: c_int, stream: *mut crate::FILE) -> c_int; 1226 pub fn malloc_usable_size(ptr: *mut c_void) -> size_t; 1227 pub fn getpwent_r( 1228 pwd: *mut crate::passwd, 1229 buf: *mut c_char, 1230 buflen: size_t, 1231 result: *mut *mut crate::passwd, 1232 ) -> c_int; 1233 pub fn getgrent_r( 1234 grp: *mut crate::group, 1235 buf: *mut c_char, 1236 buflen: size_t, 1237 result: *mut *mut crate::group, 1238 ) -> c_int; 1239 pub fn fgetpwent_r( 1240 stream: *mut crate::FILE, 1241 pwd: *mut crate::passwd, 1242 buf: *mut c_char, 1243 buflen: size_t, 1244 result: *mut *mut crate::passwd, 1245 ) -> c_int; 1246 pub fn fgetgrent_r( 1247 stream: *mut crate::FILE, 1248 grp: *mut crate::group, 1249 buf: *mut c_char, 1250 buflen: size_t, 1251 result: *mut *mut crate::group, 1252 ) -> c_int; 1253 1254 pub fn putpwent(p: *const crate::passwd, stream: *mut crate::FILE) -> c_int; 1255 pub fn putgrent(grp: *const crate::group, stream: *mut crate::FILE) -> c_int; 1256 1257 pub fn sethostid(hostid: c_long) -> c_int; 1258 1259 pub fn memfd_create(name: *const c_char, flags: c_uint) -> c_int; 1260 pub fn mlock2(addr: *const c_void, len: size_t, flags: c_uint) -> c_int; 1261 1262 pub fn euidaccess(pathname: *const c_char, mode: c_int) -> c_int; 1263 pub fn eaccess(pathname: *const c_char, mode: c_int) -> c_int; 1264 1265 pub fn asctime_r(tm: *const crate::tm, buf: *mut c_char) -> *mut c_char; 1266 #[cfg_attr(gnu_time_bits64, link_name = "__ctime64_r")] 1267 pub fn ctime_r(timep: *const time_t, buf: *mut c_char) -> *mut c_char; 1268 1269 pub fn dirname(path: *mut c_char) -> *mut c_char; 1270 /// POSIX version of `basename(3)`, defined in `libgen.h`. 1271 #[link_name = "__xpg_basename"] 1272 pub fn posix_basename(path: *mut c_char) -> *mut c_char; 1273 /// GNU version of `basename(3)`, defined in `string.h`. 1274 #[link_name = "basename"] 1275 pub fn gnu_basename(path: *const c_char) -> *mut c_char; 1276 pub fn dlmopen(lmid: Lmid_t, filename: *const c_char, flag: c_int) -> *mut c_void; 1277 pub fn dlinfo(handle: *mut c_void, request: c_int, info: *mut c_void) -> c_int; 1278 pub fn dladdr1( 1279 addr: *const c_void, 1280 info: *mut crate::Dl_info, 1281 extra_info: *mut *mut c_void, 1282 flags: c_int, 1283 ) -> c_int; 1284 pub fn malloc_trim(__pad: size_t) -> c_int; 1285 pub fn gnu_get_libc_release() -> *const c_char; 1286 pub fn gnu_get_libc_version() -> *const c_char; 1287 1288 // posix/spawn.h 1289 // Added in `glibc` 2.29 1290 pub fn posix_spawn_file_actions_addchdir_np( 1291 actions: *mut crate::posix_spawn_file_actions_t, 1292 path: *const c_char, 1293 ) -> c_int; 1294 // Added in `glibc` 2.29 1295 pub fn posix_spawn_file_actions_addfchdir_np( 1296 actions: *mut crate::posix_spawn_file_actions_t, 1297 fd: c_int, 1298 ) -> c_int; 1299 // Added in `glibc` 2.34 1300 pub fn posix_spawn_file_actions_addclosefrom_np( 1301 actions: *mut crate::posix_spawn_file_actions_t, 1302 from: c_int, 1303 ) -> c_int; 1304 // Added in `glibc` 2.35 1305 pub fn posix_spawn_file_actions_addtcsetpgrp_np( 1306 actions: *mut crate::posix_spawn_file_actions_t, 1307 tcfd: c_int, 1308 ) -> c_int; 1309 1310 // mntent.h 1311 pub fn getmntent_r( 1312 stream: *mut crate::FILE, 1313 mntbuf: *mut crate::mntent, 1314 buf: *mut c_char, 1315 buflen: c_int, 1316 ) -> *mut crate::mntent; 1317 1318 pub fn execveat( 1319 dirfd: c_int, 1320 pathname: *const c_char, 1321 argv: *const *mut c_char, 1322 envp: *const *mut c_char, 1323 flags: c_int, 1324 ) -> c_int; 1325 1326 // Added in `glibc` 2.34 1327 pub fn close_range(first: c_uint, last: c_uint, flags: c_int) -> c_int; 1328 1329 pub fn mq_notify(mqdes: crate::mqd_t, sevp: *const crate::sigevent) -> c_int; 1330 1331 #[cfg_attr(gnu_time_bits64, link_name = "__epoll_pwait2_time64")] 1332 pub fn epoll_pwait2( 1333 epfd: c_int, 1334 events: *mut crate::epoll_event, 1335 maxevents: c_int, 1336 timeout: *const crate::timespec, 1337 sigmask: *const crate::sigset_t, 1338 ) -> c_int; 1339 1340 pub fn mempcpy(dest: *mut c_void, src: *const c_void, n: size_t) -> *mut c_void; 1341 } 1342 1343 cfg_if! { 1344 if #[cfg(any( 1345 target_arch = "x86", 1346 target_arch = "arm", 1347 target_arch = "m68k", 1348 target_arch = "csky", 1349 target_arch = "mips", 1350 target_arch = "mips32r6", 1351 target_arch = "powerpc", 1352 target_arch = "sparc", 1353 target_arch = "riscv32" 1354 ))] { 1355 mod b32; 1356 pub use self::b32::*; 1357 } else if #[cfg(any( 1358 target_arch = "x86_64", 1359 target_arch = "aarch64", 1360 target_arch = "powerpc64", 1361 target_arch = "mips64", 1362 target_arch = "mips64r6", 1363 target_arch = "s390x", 1364 target_arch = "sparc64", 1365 target_arch = "riscv64", 1366 target_arch = "loongarch64" 1367 ))] { 1368 mod b64; 1369 pub use self::b64::*; 1370 } else { 1371 // Unknown target_arch 1372 } 1373 } 1374