]> git.proxmox.com Git - rustc.git/blame - vendor/libc/src/unix/mod.rs
New upstream version 1.44.1+dfsg1
[rustc.git] / vendor / libc / src / unix / mod.rs
CommitLineData
476ff2be
SL
1//! Definitions found commonly among almost all Unix derivatives
2//!
3//! More functions and definitions can be found in the more specific modules
4//! according to the platform in question.
5
69743fb6
XL
6pub type c_schar = i8;
7pub type c_uchar = u8;
8pub type c_short = i16;
9pub type c_ushort = u16;
10pub type c_int = i32;
11pub type c_uint = u32;
12pub type c_float = f32;
13pub type c_double = f64;
14pub type c_longlong = i64;
15pub type c_ulonglong = u64;
16pub type intmax_t = i64;
17pub type uintmax_t = u64;
18
19pub type size_t = usize;
20pub type ptrdiff_t = isize;
21pub type intptr_t = isize;
22pub type uintptr_t = usize;
23pub type ssize_t = isize;
24
476ff2be
SL
25pub type pid_t = i32;
26pub type uid_t = u32;
27pub type gid_t = u32;
28pub type in_addr_t = u32;
29pub type in_port_t = u16;
30pub type sighandler_t = ::size_t;
31pub type cc_t = ::c_uchar;
32
532ac7d7 33#[cfg_attr(feature = "extra_traits", derive(Debug))]
476ff2be 34pub enum DIR {}
532ac7d7
XL
35impl ::Copy for DIR {}
36impl ::Clone for DIR {
e74abb32
XL
37 fn clone(&self) -> DIR {
38 *self
39 }
532ac7d7 40}
e74abb32 41pub type locale_t = *mut ::c_void;
476ff2be
SL
42
43s! {
44 pub struct group {
45 pub gr_name: *mut ::c_char,
46 pub gr_passwd: *mut ::c_char,
47 pub gr_gid: ::gid_t,
48 pub gr_mem: *mut *mut ::c_char,
49 }
50
51 pub struct utimbuf {
52 pub actime: time_t,
53 pub modtime: time_t,
54 }
55
56 pub struct timeval {
57 pub tv_sec: time_t,
58 pub tv_usec: suseconds_t,
59 }
60
abe05a73
XL
61 // linux x32 compatibility
62 // See https://sourceware.org/bugzilla/show_bug.cgi?id=16437
476ff2be
SL
63 pub struct timespec {
64 pub tv_sec: time_t,
abe05a73
XL
65 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
66 pub tv_nsec: i64,
67 #[cfg(not(all(target_arch = "x86_64", target_pointer_width = "32")))]
68 pub tv_nsec: ::c_long,
476ff2be
SL
69 }
70
71 pub struct rlimit {
72 pub rlim_cur: rlim_t,
73 pub rlim_max: rlim_t,
74 }
75
76 pub struct rusage {
77 pub ru_utime: timeval,
78 pub ru_stime: timeval,
79 pub ru_maxrss: c_long,
abe05a73
XL
80 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
81 __pad1: u32,
476ff2be 82 pub ru_ixrss: c_long,
abe05a73
XL
83 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
84 __pad2: u32,
476ff2be 85 pub ru_idrss: c_long,
abe05a73
XL
86 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
87 __pad3: u32,
476ff2be 88 pub ru_isrss: c_long,
abe05a73
XL
89 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
90 __pad4: u32,
476ff2be 91 pub ru_minflt: c_long,
abe05a73
XL
92 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
93 __pad5: u32,
476ff2be 94 pub ru_majflt: c_long,
abe05a73
XL
95 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
96 __pad6: u32,
476ff2be 97 pub ru_nswap: c_long,
abe05a73
XL
98 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
99 __pad7: u32,
476ff2be 100 pub ru_inblock: c_long,
abe05a73
XL
101 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
102 __pad8: u32,
476ff2be 103 pub ru_oublock: c_long,
abe05a73
XL
104 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
105 __pad9: u32,
476ff2be 106 pub ru_msgsnd: c_long,
abe05a73
XL
107 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
108 __pad10: u32,
476ff2be 109 pub ru_msgrcv: c_long,
abe05a73
XL
110 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
111 __pad11: u32,
476ff2be 112 pub ru_nsignals: c_long,
abe05a73
XL
113 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
114 __pad12: u32,
476ff2be 115 pub ru_nvcsw: c_long,
abe05a73
XL
116 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
117 __pad13: u32,
476ff2be 118 pub ru_nivcsw: c_long,
abe05a73
XL
119 #[cfg(all(target_arch = "x86_64", target_pointer_width = "32"))]
120 __pad14: u32,
476ff2be 121
ea8adc8c 122 #[cfg(any(target_env = "musl", target_os = "emscripten"))]
476ff2be
SL
123 __reserved: [c_long; 16],
124 }
125
476ff2be
SL
126 pub struct ipv6_mreq {
127 pub ipv6mr_multiaddr: in6_addr,
128 #[cfg(target_os = "android")]
129 pub ipv6mr_interface: ::c_int,
130 #[cfg(not(target_os = "android"))]
131 pub ipv6mr_interface: ::c_uint,
132 }
133
134 pub struct hostent {
135 pub h_name: *mut ::c_char,
136 pub h_aliases: *mut *mut ::c_char,
137 pub h_addrtype: ::c_int,
138 pub h_length: ::c_int,
139 pub h_addr_list: *mut *mut ::c_char,
140 }
141
142 pub struct iovec {
143 pub iov_base: *mut ::c_void,
144 pub iov_len: ::size_t,
145 }
146
147 pub struct pollfd {
148 pub fd: ::c_int,
149 pub events: ::c_short,
150 pub revents: ::c_short,
151 }
152
153 pub struct winsize {
154 pub ws_row: ::c_ushort,
155 pub ws_col: ::c_ushort,
156 pub ws_xpixel: ::c_ushort,
157 pub ws_ypixel: ::c_ushort,
158 }
159
160 pub struct linger {
161 pub l_onoff: ::c_int,
162 pub l_linger: ::c_int,
163 }
8bb4bdeb
XL
164
165 pub struct sigval {
166 // Actually a union of an int and a void*
167 pub sival_ptr: *mut ::c_void
168 }
041b39d2
XL
169
170 // <sys/time.h>
171 pub struct itimerval {
172 pub it_interval: ::timeval,
173 pub it_value: ::timeval,
174 }
175
176 // <sys/times.h>
177 pub struct tms {
178 pub tms_utime: ::clock_t,
179 pub tms_stime: ::clock_t,
180 pub tms_cutime: ::clock_t,
181 pub tms_cstime: ::clock_t,
182 }
abe05a73
XL
183
184 pub struct servent {
185 pub s_name: *mut ::c_char,
186 pub s_aliases: *mut *mut ::c_char,
187 pub s_port: ::c_int,
188 pub s_proto: *mut ::c_char,
189 }
190
191 pub struct protoent {
192 pub p_name: *mut ::c_char,
193 pub p_aliases: *mut *mut ::c_char,
194 pub p_proto: ::c_int,
195 }
476ff2be
SL
196}
197
69743fb6
XL
198pub const INT_MIN: c_int = -2147483648;
199pub const INT_MAX: c_int = 2147483647;
200
476ff2be
SL
201pub const SIG_DFL: sighandler_t = 0 as sighandler_t;
202pub const SIG_IGN: sighandler_t = 1 as sighandler_t;
203pub const SIG_ERR: sighandler_t = !0 as sighandler_t;
204
2c00a5a8 205pub const DT_UNKNOWN: u8 = 0;
476ff2be
SL
206pub const DT_FIFO: u8 = 1;
207pub const DT_CHR: u8 = 2;
208pub const DT_DIR: u8 = 4;
209pub const DT_BLK: u8 = 6;
210pub const DT_REG: u8 = 8;
211pub const DT_LNK: u8 = 10;
212pub const DT_SOCK: u8 = 12;
213
416331ca
XL
214cfg_if! {
215 if #[cfg(not(target_os = "redox"))] {
216 pub const FD_CLOEXEC: ::c_int = 0x1;
217 }
218}
476ff2be
SL
219
220pub const USRQUOTA: ::c_int = 0;
221pub const GRPQUOTA: ::c_int = 1;
222
223pub const SIGIOT: ::c_int = 6;
224
416331ca
XL
225pub const S_ISUID: ::mode_t = 0x800;
226pub const S_ISGID: ::mode_t = 0x400;
227pub const S_ISVTX: ::mode_t = 0x200;
476ff2be 228
ba9703b0
XL
229cfg_if! {
230 if #[cfg(not(any(target_os = "illumos", target_os = "solaris")))] {
231 pub const IF_NAMESIZE: ::size_t = 16;
232 pub const IFNAMSIZ: ::size_t = IF_NAMESIZE;
233 }
234}
476ff2be 235
476ff2be
SL
236pub const LOG_EMERG: ::c_int = 0;
237pub const LOG_ALERT: ::c_int = 1;
238pub const LOG_CRIT: ::c_int = 2;
239pub const LOG_ERR: ::c_int = 3;
240pub const LOG_WARNING: ::c_int = 4;
241pub const LOG_NOTICE: ::c_int = 5;
242pub const LOG_INFO: ::c_int = 6;
243pub const LOG_DEBUG: ::c_int = 7;
244
245pub const LOG_KERN: ::c_int = 0;
246pub const LOG_USER: ::c_int = 1 << 3;
247pub const LOG_MAIL: ::c_int = 2 << 3;
248pub const LOG_DAEMON: ::c_int = 3 << 3;
249pub const LOG_AUTH: ::c_int = 4 << 3;
250pub const LOG_SYSLOG: ::c_int = 5 << 3;
251pub const LOG_LPR: ::c_int = 6 << 3;
252pub const LOG_NEWS: ::c_int = 7 << 3;
253pub const LOG_UUCP: ::c_int = 8 << 3;
254pub const LOG_LOCAL0: ::c_int = 16 << 3;
255pub const LOG_LOCAL1: ::c_int = 17 << 3;
256pub const LOG_LOCAL2: ::c_int = 18 << 3;
257pub const LOG_LOCAL3: ::c_int = 19 << 3;
258pub const LOG_LOCAL4: ::c_int = 20 << 3;
259pub const LOG_LOCAL5: ::c_int = 21 << 3;
260pub const LOG_LOCAL6: ::c_int = 22 << 3;
261pub const LOG_LOCAL7: ::c_int = 23 << 3;
262
263pub const LOG_PID: ::c_int = 0x01;
264pub const LOG_CONS: ::c_int = 0x02;
265pub const LOG_ODELAY: ::c_int = 0x04;
266pub const LOG_NDELAY: ::c_int = 0x08;
267pub const LOG_NOWAIT: ::c_int = 0x10;
268
269pub const LOG_PRIMASK: ::c_int = 7;
270pub const LOG_FACMASK: ::c_int = 0x3f8;
271
272pub const PRIO_PROCESS: ::c_int = 0;
273pub const PRIO_PGRP: ::c_int = 1;
274pub const PRIO_USER: ::c_int = 2;
275
276pub const PRIO_MIN: ::c_int = -20;
277pub const PRIO_MAX: ::c_int = 20;
278
3b2f2976
XL
279pub const IPPROTO_ICMP: ::c_int = 1;
280pub const IPPROTO_ICMPV6: ::c_int = 58;
281pub const IPPROTO_TCP: ::c_int = 6;
282pub const IPPROTO_UDP: ::c_int = 17;
283pub const IPPROTO_IP: ::c_int = 0;
284pub const IPPROTO_IPV6: ::c_int = 41;
285
286pub const INADDR_LOOPBACK: in_addr_t = 2130706433;
287pub const INADDR_ANY: in_addr_t = 0;
288pub const INADDR_BROADCAST: in_addr_t = 4294967295;
289pub const INADDR_NONE: in_addr_t = 4294967295;
290
b7449926
XL
291pub const ARPOP_REQUEST: u16 = 1;
292pub const ARPOP_REPLY: u16 = 2;
293
294pub const ATF_COM: ::c_int = 0x02;
295pub const ATF_PERM: ::c_int = 0x04;
296pub const ATF_PUBL: ::c_int = 0x08;
297pub const ATF_USETRAILERS: ::c_int = 0x10;
298
476ff2be 299cfg_if! {
532ac7d7 300 if #[cfg(target_os = "l4re")] {
ea8adc8c 301 // required libraries for L4Re are linked externally, ATM
416331ca 302 } else if #[cfg(feature = "std")] {
ea8adc8c 303 // cargo build, don't pull in anything extra as the libstd dep
476ff2be 304 // already pulls in all libs.
2c00a5a8 305 } else if #[cfg(target_env = "musl")] {
69743fb6 306 #[cfg_attr(feature = "rustc-dep-of-std",
2c00a5a8
XL
307 link(name = "c", kind = "static",
308 cfg(target_feature = "crt-static")))]
69743fb6 309 #[cfg_attr(feature = "rustc-dep-of-std",
2c00a5a8 310 link(name = "c", cfg(not(target_feature = "crt-static"))))]
476ff2be
SL
311 extern {}
312 } else if #[cfg(target_os = "emscripten")] {
313 #[link(name = "c")]
314 extern {}
b7449926 315 } else if #[cfg(all(target_os = "netbsd",
69743fb6
XL
316 feature = "rustc-dep-of-std",
317 target_vendor = "rumprun"))] {
476ff2be
SL
318 // Since we don't use -nodefaultlibs on Rumprun, libc is always pulled
319 // in automatically by the linker. We avoid passing it explicitly, as it
320 // causes some versions of binutils to crash with an assertion failure.
321 #[link(name = "m")]
322 extern {}
323 } else if #[cfg(any(target_os = "macos",
324 target_os = "ios",
325 target_os = "android",
416331ca 326 target_os = "openbsd"))] {
476ff2be
SL
327 #[link(name = "c")]
328 #[link(name = "m")]
329 extern {}
330 } else if #[cfg(target_os = "haiku")] {
331 #[link(name = "root")]
332 #[link(name = "network")]
333 extern {}
041b39d2
XL
334 } else if #[cfg(target_env = "newlib")] {
335 #[link(name = "c")]
336 #[link(name = "m")]
337 extern {}
b7449926
XL
338 } else if #[cfg(target_os = "hermit")] {
339 // no_default_libraries is set to false for HermitCore, so only a link
340 // to "pthread" needs to be added.
341 #[link(name = "pthread")]
342 extern {}
532ac7d7
XL
343 } else if #[cfg(target_env = "illumos")] {
344 #[link(name = "c")]
345 #[link(name = "m")]
346 extern {}
416331ca
XL
347 } else if #[cfg(target_os = "redox")] {
348 #[cfg_attr(feature = "rustc-dep-of-std",
349 link(name = "c", kind = "static-nobundle",
350 cfg(target_feature = "crt-static")))]
351 #[cfg_attr(feature = "rustc-dep-of-std",
352 link(name = "c", cfg(not(target_feature = "crt-static"))))]
353 extern {}
476ff2be
SL
354 } else {
355 #[link(name = "c")]
356 #[link(name = "m")]
357 #[link(name = "rt")]
7cac9316 358 #[link(name = "pthread")]
476ff2be
SL
359 extern {}
360 }
361}
362
532ac7d7 363#[cfg_attr(feature = "extra_traits", derive(Debug))]
69743fb6 364pub enum FILE {}
532ac7d7
XL
365impl ::Copy for FILE {}
366impl ::Clone for FILE {
e74abb32
XL
367 fn clone(&self) -> FILE {
368 *self
369 }
532ac7d7
XL
370}
371#[cfg_attr(feature = "extra_traits", derive(Debug))]
ba9703b0 372pub enum fpos_t {} // FIXME: fill this out with a struct
532ac7d7
XL
373impl ::Copy for fpos_t {}
374impl ::Clone for fpos_t {
e74abb32
XL
375 fn clone(&self) -> fpos_t {
376 *self
377 }
532ac7d7 378}
69743fb6 379
e74abb32 380extern "C" {
69743fb6
XL
381 pub fn isalnum(c: c_int) -> c_int;
382 pub fn isalpha(c: c_int) -> c_int;
383 pub fn iscntrl(c: c_int) -> c_int;
384 pub fn isdigit(c: c_int) -> c_int;
385 pub fn isgraph(c: c_int) -> c_int;
386 pub fn islower(c: c_int) -> c_int;
387 pub fn isprint(c: c_int) -> c_int;
388 pub fn ispunct(c: c_int) -> c_int;
389 pub fn isspace(c: c_int) -> c_int;
390 pub fn isupper(c: c_int) -> c_int;
391 pub fn isxdigit(c: c_int) -> c_int;
e74abb32 392 pub fn isblank(c: c_int) -> c_int;
69743fb6
XL
393 pub fn tolower(c: c_int) -> c_int;
394 pub fn toupper(c: c_int) -> c_int;
ba9703b0
XL
395 pub fn qsort(
396 base: *mut c_void,
397 num: size_t,
398 size: size_t,
399 compar: ::Option<
400 unsafe extern "C" fn(*const c_void, *const c_void) -> c_int,
401 >,
402 );
403 pub fn bsearch(
404 key: *const c_void,
405 base: *const c_void,
406 num: size_t,
407 size: size_t,
408 compar: ::Option<
409 unsafe extern "C" fn(*const c_void, *const c_void) -> c_int,
410 >,
411 ) -> *mut c_void;
69743fb6
XL
412 #[cfg_attr(
413 all(target_os = "macos", target_arch = "x86"),
414 link_name = "fopen$UNIX2003"
415 )]
416 pub fn fopen(filename: *const c_char, mode: *const c_char) -> *mut FILE;
417 #[cfg_attr(
418 all(target_os = "macos", target_arch = "x86"),
419 link_name = "freopen$UNIX2003"
420 )]
e74abb32
XL
421 pub fn freopen(
422 filename: *const c_char,
423 mode: *const c_char,
424 file: *mut FILE,
425 ) -> *mut FILE;
69743fb6
XL
426 pub fn fflush(file: *mut FILE) -> c_int;
427 pub fn fclose(file: *mut FILE) -> c_int;
428 pub fn remove(filename: *const c_char) -> c_int;
429 pub fn rename(oldname: *const c_char, newname: *const c_char) -> c_int;
430 pub fn tmpfile() -> *mut FILE;
e74abb32
XL
431 pub fn setvbuf(
432 stream: *mut FILE,
433 buffer: *mut c_char,
434 mode: c_int,
435 size: size_t,
436 ) -> c_int;
69743fb6
XL
437 pub fn setbuf(stream: *mut FILE, buf: *mut c_char);
438 pub fn getchar() -> c_int;
439 pub fn putchar(c: c_int) -> c_int;
440 pub fn fgetc(stream: *mut FILE) -> c_int;
e74abb32
XL
441 pub fn fgets(buf: *mut c_char, n: c_int, stream: *mut FILE)
442 -> *mut c_char;
69743fb6
XL
443 pub fn fputc(c: c_int, stream: *mut FILE) -> c_int;
444 #[cfg_attr(
445 all(target_os = "macos", target_arch = "x86"),
446 link_name = "fputs$UNIX2003"
447 )]
448 pub fn fputs(s: *const c_char, stream: *mut FILE) -> c_int;
449 pub fn puts(s: *const c_char) -> c_int;
450 pub fn ungetc(c: c_int, stream: *mut FILE) -> c_int;
e74abb32
XL
451 pub fn fread(
452 ptr: *mut c_void,
453 size: size_t,
454 nobj: size_t,
455 stream: *mut FILE,
456 ) -> size_t;
69743fb6
XL
457 #[cfg_attr(
458 all(target_os = "macos", target_arch = "x86"),
459 link_name = "fwrite$UNIX2003"
460 )]
e74abb32
XL
461 pub fn fwrite(
462 ptr: *const c_void,
463 size: size_t,
464 nobj: size_t,
465 stream: *mut FILE,
466 ) -> size_t;
69743fb6
XL
467 pub fn fseek(stream: *mut FILE, offset: c_long, whence: c_int) -> c_int;
468 pub fn ftell(stream: *mut FILE) -> c_long;
469 pub fn rewind(stream: *mut FILE);
470 #[cfg_attr(target_os = "netbsd", link_name = "__fgetpos50")]
471 pub fn fgetpos(stream: *mut FILE, ptr: *mut fpos_t) -> c_int;
472 #[cfg_attr(target_os = "netbsd", link_name = "__fsetpos50")]
473 pub fn fsetpos(stream: *mut FILE, ptr: *const fpos_t) -> c_int;
474 pub fn feof(stream: *mut FILE) -> c_int;
475 pub fn ferror(stream: *mut FILE) -> c_int;
476 pub fn perror(s: *const c_char);
477 pub fn atoi(s: *const c_char) -> c_int;
478 #[cfg_attr(
479 all(target_os = "macos", target_arch = "x86"),
480 link_name = "strtod$UNIX2003"
481 )]
482 pub fn strtod(s: *const c_char, endp: *mut *mut c_char) -> c_double;
e74abb32
XL
483 pub fn strtol(
484 s: *const c_char,
485 endp: *mut *mut c_char,
486 base: c_int,
487 ) -> c_long;
488 pub fn strtoul(
489 s: *const c_char,
490 endp: *mut *mut c_char,
491 base: c_int,
492 ) -> c_ulong;
69743fb6
XL
493 pub fn calloc(nobj: size_t, size: size_t) -> *mut c_void;
494 pub fn malloc(size: size_t) -> *mut c_void;
495 pub fn realloc(p: *mut c_void, size: size_t) -> *mut c_void;
496 pub fn free(p: *mut c_void);
497 pub fn abort() -> !;
498 pub fn exit(status: c_int) -> !;
499 pub fn _exit(status: c_int) -> !;
e74abb32 500 pub fn atexit(cb: extern "C" fn()) -> c_int;
69743fb6
XL
501 #[cfg_attr(
502 all(target_os = "macos", target_arch = "x86"),
503 link_name = "system$UNIX2003"
504 )]
505 pub fn system(s: *const c_char) -> c_int;
506 pub fn getenv(s: *const c_char) -> *mut c_char;
507
508 pub fn strcpy(dst: *mut c_char, src: *const c_char) -> *mut c_char;
e74abb32
XL
509 pub fn strncpy(
510 dst: *mut c_char,
511 src: *const c_char,
512 n: size_t,
513 ) -> *mut c_char;
69743fb6 514 pub fn strcat(s: *mut c_char, ct: *const c_char) -> *mut c_char;
e74abb32
XL
515 pub fn strncat(
516 s: *mut c_char,
517 ct: *const c_char,
518 n: size_t,
519 ) -> *mut c_char;
69743fb6
XL
520 pub fn strcmp(cs: *const c_char, ct: *const c_char) -> c_int;
521 pub fn strncmp(cs: *const c_char, ct: *const c_char, n: size_t) -> c_int;
522 pub fn strcoll(cs: *const c_char, ct: *const c_char) -> c_int;
523 pub fn strchr(cs: *const c_char, c: c_int) -> *mut c_char;
524 pub fn strrchr(cs: *const c_char, c: c_int) -> *mut c_char;
525 pub fn strspn(cs: *const c_char, ct: *const c_char) -> size_t;
526 pub fn strcspn(cs: *const c_char, ct: *const c_char) -> size_t;
527 pub fn strdup(cs: *const c_char) -> *mut c_char;
ba9703b0 528 pub fn strndup(cs: *const c_char, n: size_t) -> *mut c_char;
69743fb6
XL
529 pub fn strpbrk(cs: *const c_char, ct: *const c_char) -> *mut c_char;
530 pub fn strstr(cs: *const c_char, ct: *const c_char) -> *mut c_char;
531 pub fn strcasecmp(s1: *const c_char, s2: *const c_char) -> c_int;
e74abb32
XL
532 pub fn strncasecmp(
533 s1: *const c_char,
534 s2: *const c_char,
535 n: size_t,
536 ) -> c_int;
69743fb6
XL
537 pub fn strlen(cs: *const c_char) -> size_t;
538 pub fn strnlen(cs: *const c_char, maxlen: size_t) -> size_t;
539 #[cfg_attr(
540 all(target_os = "macos", target_arch = "x86"),
541 link_name = "strerror$UNIX2003"
542 )]
543 pub fn strerror(n: c_int) -> *mut c_char;
544 pub fn strtok(s: *mut c_char, t: *const c_char) -> *mut c_char;
545 pub fn strxfrm(s: *mut c_char, ct: *const c_char, n: size_t) -> size_t;
ba9703b0 546 pub fn strsignal(sig: c_int) -> *mut c_char;
69743fb6 547 pub fn wcslen(buf: *const wchar_t) -> size_t;
e74abb32
XL
548 pub fn wcstombs(
549 dest: *mut c_char,
550 src: *const wchar_t,
551 n: size_t,
552 ) -> ::size_t;
69743fb6
XL
553
554 pub fn memchr(cx: *const c_void, c: c_int, n: size_t) -> *mut c_void;
ba9703b0 555 pub fn wmemchr(cx: *const wchar_t, c: wchar_t, n: size_t) -> *mut wchar_t;
69743fb6 556 pub fn memcmp(cx: *const c_void, ct: *const c_void, n: size_t) -> c_int;
e74abb32
XL
557 pub fn memcpy(
558 dest: *mut c_void,
559 src: *const c_void,
560 n: size_t,
561 ) -> *mut c_void;
562 pub fn memmove(
563 dest: *mut c_void,
564 src: *const c_void,
565 n: size_t,
566 ) -> *mut c_void;
69743fb6
XL
567 pub fn memset(dest: *mut c_void, c: c_int, n: size_t) -> *mut c_void;
568}
569
e74abb32 570extern "C" {
476ff2be
SL
571 #[cfg_attr(target_os = "netbsd", link_name = "__getpwnam50")]
572 pub fn getpwnam(name: *const ::c_char) -> *mut passwd;
573 #[cfg_attr(target_os = "netbsd", link_name = "__getpwuid50")]
574 pub fn getpwuid(uid: ::uid_t) -> *mut passwd;
575
e74abb32
XL
576 pub fn fprintf(
577 stream: *mut ::FILE,
578 format: *const ::c_char,
579 ...
580 ) -> ::c_int;
476ff2be 581 pub fn printf(format: *const ::c_char, ...) -> ::c_int;
e74abb32
XL
582 pub fn snprintf(
583 s: *mut ::c_char,
584 n: ::size_t,
585 format: *const ::c_char,
586 ...
587 ) -> ::c_int;
476ff2be 588 pub fn sprintf(s: *mut ::c_char, format: *const ::c_char, ...) -> ::c_int;
416331ca 589 #[cfg_attr(target_os = "linux", link_name = "__isoc99_fscanf")]
e74abb32
XL
590 pub fn fscanf(
591 stream: *mut ::FILE,
592 format: *const ::c_char,
593 ...
594 ) -> ::c_int;
416331ca 595 #[cfg_attr(target_os = "linux", link_name = "__isoc99_scanf")]
476ff2be 596 pub fn scanf(format: *const ::c_char, ...) -> ::c_int;
416331ca 597 #[cfg_attr(target_os = "linux", link_name = "__isoc99_sscanf")]
e74abb32
XL
598 pub fn sscanf(s: *const ::c_char, format: *const ::c_char, ...)
599 -> ::c_int;
476ff2be
SL
600 pub fn getchar_unlocked() -> ::c_int;
601 pub fn putchar_unlocked(c: ::c_int) -> ::c_int;
602
603 #[cfg_attr(target_os = "netbsd", link_name = "__socket30")]
532ac7d7 604 #[cfg_attr(target_os = "illumos", link_name = "__xnet_socket")]
476ff2be 605 pub fn socket(domain: ::c_int, ty: ::c_int, protocol: ::c_int) -> ::c_int;
e74abb32
XL
606 #[cfg_attr(
607 all(target_os = "macos", target_arch = "x86"),
608 link_name = "connect$UNIX2003"
609 )]
532ac7d7 610 #[cfg_attr(target_os = "illumos", link_name = "__xnet_connect")]
e74abb32
XL
611 pub fn connect(
612 socket: ::c_int,
613 address: *const sockaddr,
614 len: socklen_t,
615 ) -> ::c_int;
616 #[cfg_attr(
617 all(target_os = "macos", target_arch = "x86"),
618 link_name = "listen$UNIX2003"
619 )]
476ff2be 620 pub fn listen(socket: ::c_int, backlog: ::c_int) -> ::c_int;
e74abb32
XL
621 #[cfg_attr(
622 all(target_os = "macos", target_arch = "x86"),
623 link_name = "accept$UNIX2003"
624 )]
625 pub fn accept(
626 socket: ::c_int,
627 address: *mut sockaddr,
628 address_len: *mut socklen_t,
629 ) -> ::c_int;
630 #[cfg_attr(
631 all(target_os = "macos", target_arch = "x86"),
632 link_name = "getpeername$UNIX2003"
633 )]
634 pub fn getpeername(
635 socket: ::c_int,
636 address: *mut sockaddr,
637 address_len: *mut socklen_t,
638 ) -> ::c_int;
639 #[cfg_attr(
640 all(target_os = "macos", target_arch = "x86"),
641 link_name = "getsockname$UNIX2003"
642 )]
643 pub fn getsockname(
644 socket: ::c_int,
645 address: *mut sockaddr,
646 address_len: *mut socklen_t,
647 ) -> ::c_int;
648 pub fn setsockopt(
649 socket: ::c_int,
650 level: ::c_int,
651 name: ::c_int,
652 value: *const ::c_void,
653 option_len: socklen_t,
654 ) -> ::c_int;
655 #[cfg_attr(
656 all(target_os = "macos", target_arch = "x86"),
657 link_name = "socketpair$UNIX2003"
658 )]
532ac7d7 659 #[cfg_attr(target_os = "illumos", link_name = "__xnet_socketpair")]
e74abb32
XL
660 pub fn socketpair(
661 domain: ::c_int,
662 type_: ::c_int,
663 protocol: ::c_int,
664 socket_vector: *mut ::c_int,
665 ) -> ::c_int;
666 #[cfg_attr(
667 all(target_os = "macos", target_arch = "x86"),
668 link_name = "sendto$UNIX2003"
669 )]
532ac7d7 670 #[cfg_attr(target_os = "illumos", link_name = "__xnet_sendto")]
e74abb32
XL
671 pub fn sendto(
672 socket: ::c_int,
673 buf: *const ::c_void,
674 len: ::size_t,
675 flags: ::c_int,
676 addr: *const sockaddr,
677 addrlen: socklen_t,
678 ) -> ::ssize_t;
476ff2be
SL
679 pub fn shutdown(socket: ::c_int, how: ::c_int) -> ::c_int;
680
e74abb32
XL
681 #[cfg_attr(
682 all(target_os = "macos", target_arch = "x86"),
683 link_name = "chmod$UNIX2003"
684 )]
476ff2be 685 pub fn chmod(path: *const c_char, mode: mode_t) -> ::c_int;
e74abb32
XL
686 #[cfg_attr(
687 all(target_os = "macos", target_arch = "x86"),
688 link_name = "fchmod$UNIX2003"
689 )]
476ff2be
SL
690 pub fn fchmod(fd: ::c_int, mode: mode_t) -> ::c_int;
691
692 #[cfg_attr(target_os = "macos", link_name = "fstat$INODE64")]
693 #[cfg_attr(target_os = "netbsd", link_name = "__fstat50")]
416331ca 694 #[cfg_attr(
e74abb32 695 all(target_os = "freebsd", any(freebsd11, freebsd10)),
416331ca
XL
696 link_name = "fstat@FBSD_1.0"
697 )]
476ff2be
SL
698 pub fn fstat(fildes: ::c_int, buf: *mut stat) -> ::c_int;
699
700 pub fn mkdir(path: *const c_char, mode: mode_t) -> ::c_int;
701
702 #[cfg_attr(target_os = "macos", link_name = "stat$INODE64")]
703 #[cfg_attr(target_os = "netbsd", link_name = "__stat50")]
416331ca 704 #[cfg_attr(
e74abb32 705 all(target_os = "freebsd", any(freebsd11, freebsd10)),
416331ca
XL
706 link_name = "stat@FBSD_1.0"
707 )]
476ff2be
SL
708 pub fn stat(path: *const c_char, buf: *mut stat) -> ::c_int;
709
476ff2be 710 pub fn pclose(stream: *mut ::FILE) -> ::c_int;
e74abb32
XL
711 #[cfg_attr(
712 all(target_os = "macos", target_arch = "x86"),
713 link_name = "fdopen$UNIX2003"
714 )]
476ff2be
SL
715 pub fn fdopen(fd: ::c_int, mode: *const c_char) -> *mut ::FILE;
716 pub fn fileno(stream: *mut ::FILE) -> ::c_int;
717
e74abb32
XL
718 #[cfg_attr(
719 all(target_os = "macos", target_arch = "x86"),
720 link_name = "open$UNIX2003"
721 )]
476ff2be 722 pub fn open(path: *const c_char, oflag: ::c_int, ...) -> ::c_int;
e74abb32
XL
723 #[cfg_attr(
724 all(target_os = "macos", target_arch = "x86"),
725 link_name = "creat$UNIX2003"
726 )]
476ff2be 727 pub fn creat(path: *const c_char, mode: mode_t) -> ::c_int;
e74abb32
XL
728 #[cfg_attr(
729 all(target_os = "macos", target_arch = "x86"),
730 link_name = "fcntl$UNIX2003"
731 )]
476ff2be
SL
732 pub fn fcntl(fd: ::c_int, cmd: ::c_int, ...) -> ::c_int;
733
e74abb32
XL
734 #[cfg_attr(
735 all(target_os = "macos", target_arch = "x86_64"),
736 link_name = "opendir$INODE64"
737 )]
738 #[cfg_attr(
739 all(target_os = "macos", target_arch = "x86"),
740 link_name = "opendir$INODE64$UNIX2003"
741 )]
476ff2be
SL
742 #[cfg_attr(target_os = "netbsd", link_name = "__opendir30")]
743 pub fn opendir(dirname: *const c_char) -> *mut ::DIR;
b7449926 744
8bb4bdeb
XL
745 #[cfg_attr(target_os = "macos", link_name = "readdir$INODE64")]
746 #[cfg_attr(target_os = "netbsd", link_name = "__readdir30")]
416331ca 747 #[cfg_attr(
e74abb32 748 all(target_os = "freebsd", any(freebsd11, freebsd10)),
416331ca
XL
749 link_name = "readdir@FBSD_1.0"
750 )]
8bb4bdeb 751 pub fn readdir(dirp: *mut ::DIR) -> *mut ::dirent;
e74abb32
XL
752 #[cfg_attr(
753 all(target_os = "macos", target_arch = "x86"),
754 link_name = "closedir$UNIX2003"
755 )]
476ff2be 756 pub fn closedir(dirp: *mut ::DIR) -> ::c_int;
e74abb32
XL
757 #[cfg_attr(
758 all(target_os = "macos", target_arch = "x86_64"),
759 link_name = "rewinddir$INODE64"
760 )]
761 #[cfg_attr(
762 all(target_os = "macos", target_arch = "x86"),
763 link_name = "rewinddir$INODE64$UNIX2003"
764 )]
476ff2be
SL
765 pub fn rewinddir(dirp: *mut ::DIR);
766
e74abb32
XL
767 pub fn fchmodat(
768 dirfd: ::c_int,
769 pathname: *const ::c_char,
770 mode: ::mode_t,
771 flags: ::c_int,
772 ) -> ::c_int;
773 pub fn fchown(fd: ::c_int, owner: ::uid_t, group: ::gid_t) -> ::c_int;
774 pub fn fchownat(
775 dirfd: ::c_int,
776 pathname: *const ::c_char,
777 owner: ::uid_t,
778 group: ::gid_t,
779 flags: ::c_int,
780 ) -> ::c_int;
7cac9316 781 #[cfg_attr(target_os = "macos", link_name = "fstatat$INODE64")]
416331ca 782 #[cfg_attr(
e74abb32 783 all(target_os = "freebsd", any(freebsd11, freebsd10)),
416331ca
XL
784 link_name = "fstatat@FBSD_1.1"
785 )]
e74abb32
XL
786 pub fn fstatat(
787 dirfd: ::c_int,
788 pathname: *const ::c_char,
789 buf: *mut stat,
790 flags: ::c_int,
791 ) -> ::c_int;
792 pub fn linkat(
793 olddirfd: ::c_int,
794 oldpath: *const ::c_char,
795 newdirfd: ::c_int,
796 newpath: *const ::c_char,
797 flags: ::c_int,
798 ) -> ::c_int;
799 pub fn renameat(
800 olddirfd: ::c_int,
801 oldpath: *const ::c_char,
802 newdirfd: ::c_int,
803 newpath: *const ::c_char,
804 ) -> ::c_int;
805 pub fn symlinkat(
806 target: *const ::c_char,
807 newdirfd: ::c_int,
808 linkpath: *const ::c_char,
809 ) -> ::c_int;
810 pub fn unlinkat(
811 dirfd: ::c_int,
812 pathname: *const ::c_char,
813 flags: ::c_int,
814 ) -> ::c_int;
7cac9316 815
476ff2be
SL
816 pub fn access(path: *const c_char, amode: ::c_int) -> ::c_int;
817 pub fn alarm(seconds: ::c_uint) -> ::c_uint;
818 pub fn chdir(dir: *const c_char) -> ::c_int;
8bb4bdeb 819 pub fn fchdir(dirfd: ::c_int) -> ::c_int;
e74abb32
XL
820 pub fn chown(path: *const c_char, uid: uid_t, gid: gid_t) -> ::c_int;
821 #[cfg_attr(
822 all(target_os = "macos", target_arch = "x86"),
823 link_name = "lchown$UNIX2003"
824 )]
825 pub fn lchown(path: *const c_char, uid: uid_t, gid: gid_t) -> ::c_int;
826 #[cfg_attr(
827 all(target_os = "macos", target_arch = "x86"),
828 link_name = "close$NOCANCEL$UNIX2003"
829 )]
830 #[cfg_attr(
831 all(target_os = "macos", target_arch = "x86_64"),
832 link_name = "close$NOCANCEL"
833 )]
476ff2be
SL
834 pub fn close(fd: ::c_int) -> ::c_int;
835 pub fn dup(fd: ::c_int) -> ::c_int;
836 pub fn dup2(src: ::c_int, dst: ::c_int) -> ::c_int;
e74abb32
XL
837 pub fn execl(path: *const c_char, arg0: *const c_char, ...) -> ::c_int;
838 pub fn execle(
839 path: *const ::c_char,
840 arg0: *const ::c_char,
841 ...
842 ) -> ::c_int;
843 pub fn execlp(
844 file: *const ::c_char,
845 arg0: *const ::c_char,
846 ...
847 ) -> ::c_int;
848 pub fn execv(prog: *const c_char, argv: *const *const c_char) -> ::c_int;
849 pub fn execve(
850 prog: *const c_char,
851 argv: *const *const c_char,
852 envp: *const *const c_char,
853 ) -> ::c_int;
854 pub fn execvp(c: *const c_char, argv: *const *const c_char) -> ::c_int;
476ff2be
SL
855 pub fn fork() -> pid_t;
856 pub fn fpathconf(filedes: ::c_int, name: ::c_int) -> c_long;
857 pub fn getcwd(buf: *mut c_char, size: ::size_t) -> *mut c_char;
858 pub fn getegid() -> gid_t;
859 pub fn geteuid() -> uid_t;
860 pub fn getgid() -> gid_t;
e74abb32 861 pub fn getgroups(ngroups_max: ::c_int, groups: *mut gid_t) -> ::c_int;
ba9703b0 862 #[cfg_attr(target_os = "illumos", link_name = "getloginx")]
476ff2be 863 pub fn getlogin() -> *mut c_char;
e74abb32
XL
864 #[cfg_attr(
865 all(target_os = "macos", target_arch = "x86"),
866 link_name = "getopt$UNIX2003"
867 )]
868 pub fn getopt(
869 argc: ::c_int,
870 argv: *const *mut c_char,
871 optstr: *const c_char,
872 ) -> ::c_int;
476ff2be
SL
873 pub fn getpgid(pid: pid_t) -> pid_t;
874 pub fn getpgrp() -> pid_t;
875 pub fn getpid() -> pid_t;
876 pub fn getppid() -> pid_t;
877 pub fn getuid() -> uid_t;
878 pub fn isatty(fd: ::c_int) -> ::c_int;
879 pub fn link(src: *const c_char, dst: *const c_char) -> ::c_int;
880 pub fn lseek(fd: ::c_int, offset: off_t, whence: ::c_int) -> off_t;
881 pub fn pathconf(path: *const c_char, name: ::c_int) -> c_long;
476ff2be 882 pub fn pipe(fds: *mut ::c_int) -> ::c_int;
e74abb32
XL
883 pub fn posix_memalign(
884 memptr: *mut *mut ::c_void,
885 align: ::size_t,
886 size: ::size_t,
887 ) -> ::c_int;
888 #[cfg_attr(
889 all(target_os = "macos", target_arch = "x86"),
890 link_name = "read$UNIX2003"
891 )]
476ff2be 892 pub fn read(fd: ::c_int, buf: *mut ::c_void, count: ::size_t)
e74abb32 893 -> ::ssize_t;
476ff2be 894 pub fn rmdir(path: *const c_char) -> ::c_int;
041b39d2 895 pub fn seteuid(uid: uid_t) -> ::c_int;
69743fb6 896 pub fn setegid(gid: gid_t) -> ::c_int;
476ff2be
SL
897 pub fn setgid(gid: gid_t) -> ::c_int;
898 pub fn setpgid(pid: pid_t, pgid: pid_t) -> ::c_int;
899 pub fn setsid() -> pid_t;
900 pub fn setuid(uid: uid_t) -> ::c_int;
e74abb32
XL
901 #[cfg_attr(
902 all(target_os = "macos", target_arch = "x86"),
903 link_name = "sleep$UNIX2003"
904 )]
476ff2be 905 pub fn sleep(secs: ::c_uint) -> ::c_uint;
e74abb32
XL
906 #[cfg_attr(
907 all(target_os = "macos", target_arch = "x86"),
908 link_name = "nanosleep$UNIX2003"
909 )]
476ff2be 910 #[cfg_attr(target_os = "netbsd", link_name = "__nanosleep50")]
e74abb32 911 pub fn nanosleep(rqtp: *const timespec, rmtp: *mut timespec) -> ::c_int;
476ff2be 912 pub fn tcgetpgrp(fd: ::c_int) -> pid_t;
8bb4bdeb 913 pub fn tcsetpgrp(fd: ::c_int, pgrp: ::pid_t) -> ::c_int;
476ff2be 914 pub fn ttyname(fd: ::c_int) -> *mut c_char;
e74abb32
XL
915 #[cfg_attr(
916 all(target_os = "macos", target_arch = "x86"),
917 link_name = "ttyname_r$UNIX2003"
918 )]
ba9703b0 919 #[cfg_attr(target_os = "illumos", link_name = "__posix_ttyname_r")]
e74abb32
XL
920 pub fn ttyname_r(
921 fd: ::c_int,
922 buf: *mut c_char,
923 buflen: ::size_t,
924 ) -> ::c_int;
476ff2be 925 pub fn unlink(c: *const c_char) -> ::c_int;
e74abb32
XL
926 #[cfg_attr(
927 all(target_os = "macos", target_arch = "x86"),
928 link_name = "wait$UNIX2003"
929 )]
476ff2be 930 pub fn wait(status: *mut ::c_int) -> pid_t;
e74abb32
XL
931 #[cfg_attr(
932 all(target_os = "macos", target_arch = "x86"),
933 link_name = "waitpid$UNIX2003"
934 )]
935 pub fn waitpid(
936 pid: pid_t,
937 status: *mut ::c_int,
938 options: ::c_int,
939 ) -> pid_t;
940 #[cfg_attr(
941 all(target_os = "macos", target_arch = "x86"),
942 link_name = "write$UNIX2003"
943 )]
944 pub fn write(
945 fd: ::c_int,
946 buf: *const ::c_void,
947 count: ::size_t,
948 ) -> ::ssize_t;
949 #[cfg_attr(
950 all(target_os = "macos", target_arch = "x86"),
951 link_name = "pread$UNIX2003"
952 )]
953 pub fn pread(
954 fd: ::c_int,
955 buf: *mut ::c_void,
956 count: ::size_t,
957 offset: off_t,
958 ) -> ::ssize_t;
959 #[cfg_attr(
960 all(target_os = "macos", target_arch = "x86"),
961 link_name = "pwrite$UNIX2003"
962 )]
963 pub fn pwrite(
964 fd: ::c_int,
965 buf: *const ::c_void,
966 count: ::size_t,
967 offset: off_t,
968 ) -> ::ssize_t;
476ff2be
SL
969 pub fn umask(mask: mode_t) -> mode_t;
970
971 #[cfg_attr(target_os = "netbsd", link_name = "__utime50")]
972 pub fn utime(file: *const c_char, buf: *const utimbuf) -> ::c_int;
973
e74abb32
XL
974 #[cfg_attr(
975 all(target_os = "macos", target_arch = "x86"),
976 link_name = "kill$UNIX2003"
977 )]
476ff2be 978 pub fn kill(pid: pid_t, sig: ::c_int) -> ::c_int;
e74abb32
XL
979 #[cfg_attr(
980 all(target_os = "macos", target_arch = "x86"),
981 link_name = "killpg$UNIX2003"
982 )]
2c00a5a8 983 pub fn killpg(pgrp: pid_t, sig: ::c_int) -> ::c_int;
476ff2be
SL
984
985 pub fn mlock(addr: *const ::c_void, len: ::size_t) -> ::c_int;
986 pub fn munlock(addr: *const ::c_void, len: ::size_t) -> ::c_int;
987 pub fn mlockall(flags: ::c_int) -> ::c_int;
988 pub fn munlockall() -> ::c_int;
989
e74abb32
XL
990 #[cfg_attr(
991 all(target_os = "macos", target_arch = "x86"),
992 link_name = "mmap$UNIX2003"
993 )]
994 pub fn mmap(
995 addr: *mut ::c_void,
996 len: ::size_t,
997 prot: ::c_int,
998 flags: ::c_int,
999 fd: ::c_int,
1000 offset: off_t,
1001 ) -> *mut ::c_void;
1002 #[cfg_attr(
1003 all(target_os = "macos", target_arch = "x86"),
1004 link_name = "munmap$UNIX2003"
1005 )]
476ff2be
SL
1006 pub fn munmap(addr: *mut ::c_void, len: ::size_t) -> ::c_int;
1007
1008 pub fn if_nametoindex(ifname: *const c_char) -> ::c_uint;
e74abb32
XL
1009 pub fn if_indextoname(
1010 ifindex: ::c_uint,
1011 ifname: *mut ::c_char,
1012 ) -> *mut ::c_char;
476ff2be
SL
1013
1014 #[cfg_attr(target_os = "macos", link_name = "lstat$INODE64")]
1015 #[cfg_attr(target_os = "netbsd", link_name = "__lstat50")]
416331ca 1016 #[cfg_attr(
e74abb32 1017 all(target_os = "freebsd", any(freebsd11, freebsd10)),
416331ca
XL
1018 link_name = "lstat@FBSD_1.0"
1019 )]
476ff2be
SL
1020 pub fn lstat(path: *const c_char, buf: *mut stat) -> ::c_int;
1021
e74abb32
XL
1022 #[cfg_attr(
1023 all(target_os = "macos", target_arch = "x86"),
1024 link_name = "fsync$UNIX2003"
1025 )]
476ff2be
SL
1026 pub fn fsync(fd: ::c_int) -> ::c_int;
1027
e74abb32
XL
1028 #[cfg_attr(
1029 all(target_os = "macos", target_arch = "x86"),
1030 link_name = "setenv$UNIX2003"
1031 )]
1032 pub fn setenv(
1033 name: *const c_char,
1034 val: *const c_char,
1035 overwrite: ::c_int,
1036 ) -> ::c_int;
1037 #[cfg_attr(
1038 all(target_os = "macos", target_arch = "x86"),
1039 link_name = "unsetenv$UNIX2003"
1040 )]
476ff2be
SL
1041 #[cfg_attr(target_os = "netbsd", link_name = "__unsetenv13")]
1042 pub fn unsetenv(name: *const c_char) -> ::c_int;
1043
e74abb32 1044 pub fn symlink(path1: *const c_char, path2: *const c_char) -> ::c_int;
476ff2be
SL
1045
1046 pub fn ftruncate(fd: ::c_int, length: off_t) -> ::c_int;
1047
1048 pub fn signal(signum: ::c_int, handler: sighandler_t) -> sighandler_t;
1049
476ff2be
SL
1050 #[cfg_attr(target_os = "netbsd", link_name = "__getrusage50")]
1051 pub fn getrusage(resource: ::c_int, usage: *mut rusage) -> ::c_int;
1052
e74abb32
XL
1053 #[cfg_attr(
1054 any(target_os = "macos", target_os = "ios"),
1055 link_name = "realpath$DARWIN_EXTSN"
1056 )]
1057 pub fn realpath(
1058 pathname: *const ::c_char,
1059 resolved: *mut ::c_char,
1060 ) -> *mut ::c_char;
476ff2be
SL
1061
1062 pub fn flock(fd: ::c_int, operation: ::c_int) -> ::c_int;
1063
041b39d2
XL
1064 #[cfg_attr(target_os = "netbsd", link_name = "__times13")]
1065 pub fn times(buf: *mut ::tms) -> ::clock_t;
476ff2be
SL
1066
1067 pub fn pthread_self() -> ::pthread_t;
e74abb32
XL
1068 #[cfg_attr(
1069 all(target_os = "macos", target_arch = "x86"),
1070 link_name = "pthread_join$UNIX2003"
1071 )]
1072 pub fn pthread_join(
1073 native: ::pthread_t,
1074 value: *mut *mut ::c_void,
1075 ) -> ::c_int;
1076 pub fn pthread_exit(value: *mut ::c_void) -> !;
476ff2be
SL
1077 pub fn pthread_attr_init(attr: *mut ::pthread_attr_t) -> ::c_int;
1078 pub fn pthread_attr_destroy(attr: *mut ::pthread_attr_t) -> ::c_int;
e74abb32
XL
1079 pub fn pthread_attr_setstacksize(
1080 attr: *mut ::pthread_attr_t,
1081 stack_size: ::size_t,
1082 ) -> ::c_int;
1083 pub fn pthread_attr_setdetachstate(
1084 attr: *mut ::pthread_attr_t,
1085 state: ::c_int,
1086 ) -> ::c_int;
476ff2be
SL
1087 pub fn pthread_detach(thread: ::pthread_t) -> ::c_int;
1088 #[cfg_attr(target_os = "netbsd", link_name = "__libc_thr_yield")]
1089 pub fn sched_yield() -> ::c_int;
e74abb32
XL
1090 pub fn pthread_key_create(
1091 key: *mut pthread_key_t,
1092 dtor: ::Option<unsafe extern "C" fn(*mut ::c_void)>,
1093 ) -> ::c_int;
476ff2be
SL
1094 pub fn pthread_key_delete(key: pthread_key_t) -> ::c_int;
1095 pub fn pthread_getspecific(key: pthread_key_t) -> *mut ::c_void;
e74abb32
XL
1096 pub fn pthread_setspecific(
1097 key: pthread_key_t,
1098 value: *const ::c_void,
1099 ) -> ::c_int;
1100 pub fn pthread_mutex_init(
1101 lock: *mut pthread_mutex_t,
1102 attr: *const pthread_mutexattr_t,
1103 ) -> ::c_int;
476ff2be
SL
1104 pub fn pthread_mutex_destroy(lock: *mut pthread_mutex_t) -> ::c_int;
1105 pub fn pthread_mutex_lock(lock: *mut pthread_mutex_t) -> ::c_int;
1106 pub fn pthread_mutex_trylock(lock: *mut pthread_mutex_t) -> ::c_int;
1107 pub fn pthread_mutex_unlock(lock: *mut pthread_mutex_t) -> ::c_int;
1108
1109 pub fn pthread_mutexattr_init(attr: *mut pthread_mutexattr_t) -> ::c_int;
e74abb32
XL
1110 #[cfg_attr(
1111 all(target_os = "macos", target_arch = "x86"),
1112 link_name = "pthread_mutexattr_destroy$UNIX2003"
1113 )]
1114 pub fn pthread_mutexattr_destroy(
1115 attr: *mut pthread_mutexattr_t,
1116 ) -> ::c_int;
1117 pub fn pthread_mutexattr_settype(
1118 attr: *mut pthread_mutexattr_t,
1119 _type: ::c_int,
1120 ) -> ::c_int;
1121
1122 #[cfg_attr(
1123 all(target_os = "macos", target_arch = "x86"),
1124 link_name = "pthread_cond_init$UNIX2003"
1125 )]
1126 pub fn pthread_cond_init(
1127 cond: *mut pthread_cond_t,
1128 attr: *const pthread_condattr_t,
1129 ) -> ::c_int;
1130 #[cfg_attr(
1131 all(target_os = "macos", target_arch = "x86"),
1132 link_name = "pthread_cond_wait$UNIX2003"
1133 )]
1134 pub fn pthread_cond_wait(
1135 cond: *mut pthread_cond_t,
1136 lock: *mut pthread_mutex_t,
1137 ) -> ::c_int;
1138 #[cfg_attr(
1139 all(target_os = "macos", target_arch = "x86"),
1140 link_name = "pthread_cond_timedwait$UNIX2003"
1141 )]
1142 pub fn pthread_cond_timedwait(
1143 cond: *mut pthread_cond_t,
1144 lock: *mut pthread_mutex_t,
1145 abstime: *const ::timespec,
1146 ) -> ::c_int;
476ff2be
SL
1147 pub fn pthread_cond_signal(cond: *mut pthread_cond_t) -> ::c_int;
1148 pub fn pthread_cond_broadcast(cond: *mut pthread_cond_t) -> ::c_int;
1149 pub fn pthread_cond_destroy(cond: *mut pthread_cond_t) -> ::c_int;
1150 pub fn pthread_condattr_init(attr: *mut pthread_condattr_t) -> ::c_int;
1151 pub fn pthread_condattr_destroy(attr: *mut pthread_condattr_t) -> ::c_int;
e74abb32
XL
1152 #[cfg_attr(
1153 all(target_os = "macos", target_arch = "x86"),
1154 link_name = "pthread_rwlock_init$UNIX2003"
1155 )]
1156 pub fn pthread_rwlock_init(
1157 lock: *mut pthread_rwlock_t,
1158 attr: *const pthread_rwlockattr_t,
1159 ) -> ::c_int;
1160 #[cfg_attr(
1161 all(target_os = "macos", target_arch = "x86"),
1162 link_name = "pthread_rwlock_destroy$UNIX2003"
1163 )]
476ff2be 1164 pub fn pthread_rwlock_destroy(lock: *mut pthread_rwlock_t) -> ::c_int;
e74abb32
XL
1165 #[cfg_attr(
1166 all(target_os = "macos", target_arch = "x86"),
1167 link_name = "pthread_rwlock_rdlock$UNIX2003"
1168 )]
476ff2be 1169 pub fn pthread_rwlock_rdlock(lock: *mut pthread_rwlock_t) -> ::c_int;
e74abb32
XL
1170 #[cfg_attr(
1171 all(target_os = "macos", target_arch = "x86"),
1172 link_name = "pthread_rwlock_tryrdlock$UNIX2003"
1173 )]
476ff2be 1174 pub fn pthread_rwlock_tryrdlock(lock: *mut pthread_rwlock_t) -> ::c_int;
e74abb32
XL
1175 #[cfg_attr(
1176 all(target_os = "macos", target_arch = "x86"),
1177 link_name = "pthread_rwlock_wrlock$UNIX2003"
1178 )]
476ff2be 1179 pub fn pthread_rwlock_wrlock(lock: *mut pthread_rwlock_t) -> ::c_int;
e74abb32
XL
1180 #[cfg_attr(
1181 all(target_os = "macos", target_arch = "x86"),
1182 link_name = "pthread_rwlock_trywrlock$UNIX2003"
1183 )]
476ff2be 1184 pub fn pthread_rwlock_trywrlock(lock: *mut pthread_rwlock_t) -> ::c_int;
e74abb32
XL
1185 #[cfg_attr(
1186 all(target_os = "macos", target_arch = "x86"),
1187 link_name = "pthread_rwlock_unlock$UNIX2003"
1188 )]
476ff2be 1189 pub fn pthread_rwlock_unlock(lock: *mut pthread_rwlock_t) -> ::c_int;
e74abb32
XL
1190 pub fn pthread_rwlockattr_init(attr: *mut pthread_rwlockattr_t)
1191 -> ::c_int;
1192 pub fn pthread_rwlockattr_destroy(
1193 attr: *mut pthread_rwlockattr_t,
1194 ) -> ::c_int;
476ff2be 1195
532ac7d7 1196 #[cfg_attr(target_os = "illumos", link_name = "__xnet_getsockopt")]
e74abb32
XL
1197 pub fn getsockopt(
1198 sockfd: ::c_int,
1199 level: ::c_int,
1200 optname: ::c_int,
1201 optval: *mut ::c_void,
1202 optlen: *mut ::socklen_t,
1203 ) -> ::c_int;
476ff2be
SL
1204 pub fn raise(signum: ::c_int) -> ::c_int;
1205 #[cfg_attr(target_os = "netbsd", link_name = "__sigaction14")]
e74abb32
XL
1206 pub fn sigaction(
1207 signum: ::c_int,
1208 act: *const sigaction,
1209 oldact: *mut sigaction,
1210 ) -> ::c_int;
476ff2be
SL
1211
1212 #[cfg_attr(target_os = "netbsd", link_name = "__utimes50")]
e74abb32
XL
1213 pub fn utimes(
1214 filename: *const ::c_char,
1215 times: *const ::timeval,
1216 ) -> ::c_int;
1217 pub fn dlopen(filename: *const ::c_char, flag: ::c_int) -> *mut ::c_void;
476ff2be 1218 pub fn dlerror() -> *mut ::c_char;
e74abb32
XL
1219 pub fn dlsym(
1220 handle: *mut ::c_void,
1221 symbol: *const ::c_char,
1222 ) -> *mut ::c_void;
476ff2be
SL
1223 pub fn dlclose(handle: *mut ::c_void) -> ::c_int;
1224 pub fn dladdr(addr: *const ::c_void, info: *mut Dl_info) -> ::c_int;
1225
ba9703b0 1226 #[cfg_attr(target_os = "illumos", link_name = "__xnet_getaddrinfo")]
e74abb32
XL
1227 pub fn getaddrinfo(
1228 node: *const c_char,
1229 service: *const c_char,
1230 hints: *const addrinfo,
1231 res: *mut *mut addrinfo,
1232 ) -> ::c_int;
476ff2be
SL
1233 pub fn freeaddrinfo(res: *mut addrinfo);
1234 pub fn gai_strerror(errcode: ::c_int) -> *const ::c_char;
e74abb32
XL
1235 #[cfg_attr(
1236 any(
1237 all(target_os = "linux", not(target_env = "musl")),
1238 target_os = "freebsd",
1239 target_os = "dragonfly",
1240 target_os = "haiku"
1241 ),
1242 link_name = "__res_init"
1243 )]
1244 #[cfg_attr(
1245 any(target_os = "macos", target_os = "ios"),
1246 link_name = "res_9_init"
1247 )]
041b39d2 1248 pub fn res_init() -> ::c_int;
476ff2be
SL
1249
1250 #[cfg_attr(target_os = "netbsd", link_name = "__gmtime_r50")]
1251 pub fn gmtime_r(time_p: *const time_t, result: *mut tm) -> *mut tm;
1252 #[cfg_attr(target_os = "netbsd", link_name = "__localtime_r50")]
1253 pub fn localtime_r(time_p: *const time_t, result: *mut tm) -> *mut tm;
e74abb32
XL
1254 #[cfg_attr(
1255 all(target_os = "macos", target_arch = "x86"),
1256 link_name = "mktime$UNIX2003"
1257 )]
476ff2be
SL
1258 #[cfg_attr(target_os = "netbsd", link_name = "__mktime50")]
1259 pub fn mktime(tm: *mut tm) -> time_t;
1260 #[cfg_attr(target_os = "netbsd", link_name = "__time50")]
1261 pub fn time(time: *mut time_t) -> time_t;
041b39d2
XL
1262 #[cfg_attr(target_os = "netbsd", link_name = "__gmtime50")]
1263 pub fn gmtime(time_p: *const time_t) -> *mut tm;
476ff2be 1264 #[cfg_attr(target_os = "netbsd", link_name = "__locatime50")]
041b39d2 1265 pub fn localtime(time_p: *const time_t) -> *mut tm;
2c00a5a8
XL
1266 #[cfg_attr(target_os = "netbsd", link_name = "__difftime50")]
1267 pub fn difftime(time1: time_t, time0: time_t) -> ::c_double;
476ff2be
SL
1268
1269 #[cfg_attr(target_os = "netbsd", link_name = "__mknod50")]
416331ca 1270 #[cfg_attr(
e74abb32 1271 all(target_os = "freebsd", any(freebsd11, freebsd10)),
416331ca
XL
1272 link_name = "mknod@FBSD_1.0"
1273 )]
e74abb32
XL
1274 pub fn mknod(
1275 pathname: *const ::c_char,
1276 mode: ::mode_t,
1277 dev: ::dev_t,
1278 ) -> ::c_int;
476ff2be 1279 pub fn gethostname(name: *mut ::c_char, len: ::size_t) -> ::c_int;
e74abb32
XL
1280 pub fn getservbyname(
1281 name: *const ::c_char,
1282 proto: *const ::c_char,
1283 ) -> *mut servent;
abe05a73
XL
1284 pub fn getprotobyname(name: *const ::c_char) -> *mut protoent;
1285 pub fn getprotobynumber(proto: ::c_int) -> *mut protoent;
476ff2be 1286 pub fn chroot(name: *const ::c_char) -> ::c_int;
e74abb32
XL
1287 #[cfg_attr(
1288 all(target_os = "macos", target_arch = "x86"),
1289 link_name = "usleep$UNIX2003"
1290 )]
476ff2be 1291 pub fn usleep(secs: ::c_uint) -> ::c_int;
e74abb32
XL
1292 #[cfg_attr(
1293 all(target_os = "macos", target_arch = "x86"),
1294 link_name = "send$UNIX2003"
1295 )]
1296 pub fn send(
1297 socket: ::c_int,
1298 buf: *const ::c_void,
1299 len: ::size_t,
1300 flags: ::c_int,
1301 ) -> ::ssize_t;
1302 #[cfg_attr(
1303 all(target_os = "macos", target_arch = "x86"),
1304 link_name = "recv$UNIX2003"
1305 )]
1306 pub fn recv(
1307 socket: ::c_int,
1308 buf: *mut ::c_void,
1309 len: ::size_t,
1310 flags: ::c_int,
1311 ) -> ::ssize_t;
1312 #[cfg_attr(
1313 all(target_os = "macos", target_arch = "x86"),
1314 link_name = "putenv$UNIX2003"
1315 )]
476ff2be
SL
1316 #[cfg_attr(target_os = "netbsd", link_name = "__putenv50")]
1317 pub fn putenv(string: *mut c_char) -> ::c_int;
e74abb32
XL
1318 #[cfg_attr(
1319 all(target_os = "macos", target_arch = "x86"),
1320 link_name = "poll$UNIX2003"
1321 )]
476ff2be 1322 pub fn poll(fds: *mut pollfd, nfds: nfds_t, timeout: ::c_int) -> ::c_int;
e74abb32
XL
1323 #[cfg_attr(
1324 all(target_os = "macos", target_arch = "x86_64"),
1325 link_name = "select$1050"
1326 )]
1327 #[cfg_attr(
1328 all(target_os = "macos", target_arch = "x86"),
1329 link_name = "select$UNIX2003"
1330 )]
476ff2be 1331 #[cfg_attr(target_os = "netbsd", link_name = "__select50")]
e74abb32
XL
1332 pub fn select(
1333 nfds: ::c_int,
1334 readfs: *mut fd_set,
1335 writefds: *mut fd_set,
1336 errorfds: *mut fd_set,
1337 timeout: *mut timeval,
1338 ) -> ::c_int;
476ff2be 1339 #[cfg_attr(target_os = "netbsd", link_name = "__setlocale50")]
e74abb32
XL
1340 pub fn setlocale(
1341 category: ::c_int,
1342 locale: *const ::c_char,
1343 ) -> *mut ::c_char;
476ff2be
SL
1344 pub fn localeconv() -> *mut lconv;
1345
e74abb32
XL
1346 #[cfg_attr(
1347 all(target_os = "macos", target_arch = "x86"),
1348 link_name = "sem_wait$UNIX2003"
1349 )]
476ff2be
SL
1350 pub fn sem_wait(sem: *mut sem_t) -> ::c_int;
1351 pub fn sem_trywait(sem: *mut sem_t) -> ::c_int;
1352 pub fn sem_post(sem: *mut sem_t) -> ::c_int;
8bb4bdeb
XL
1353 pub fn statvfs(path: *const c_char, buf: *mut statvfs) -> ::c_int;
1354 pub fn fstatvfs(fd: ::c_int, buf: *mut statvfs) -> ::c_int;
476ff2be 1355
e74abb32
XL
1356 pub fn readlink(
1357 path: *const c_char,
1358 buf: *mut c_char,
1359 bufsz: ::size_t,
1360 ) -> ::ssize_t;
476ff2be 1361
476ff2be
SL
1362 #[cfg_attr(target_os = "netbsd", link_name = "__sigemptyset14")]
1363 pub fn sigemptyset(set: *mut sigset_t) -> ::c_int;
1364 #[cfg_attr(target_os = "netbsd", link_name = "__sigaddset14")]
1365 pub fn sigaddset(set: *mut sigset_t, signum: ::c_int) -> ::c_int;
1366 #[cfg_attr(target_os = "netbsd", link_name = "__sigfillset14")]
1367 pub fn sigfillset(set: *mut sigset_t) -> ::c_int;
1368 #[cfg_attr(target_os = "netbsd", link_name = "__sigdelset14")]
1369 pub fn sigdelset(set: *mut sigset_t, signum: ::c_int) -> ::c_int;
1370 #[cfg_attr(target_os = "netbsd", link_name = "__sigismember14")]
1371 pub fn sigismember(set: *const sigset_t, signum: ::c_int) -> ::c_int;
8bb4bdeb 1372
7cac9316 1373 #[cfg_attr(target_os = "netbsd", link_name = "__sigprocmask14")]
e74abb32
XL
1374 pub fn sigprocmask(
1375 how: ::c_int,
1376 set: *const sigset_t,
1377 oldset: *mut sigset_t,
1378 ) -> ::c_int;
041b39d2
XL
1379 #[cfg_attr(target_os = "netbsd", link_name = "__sigpending14")]
1380 pub fn sigpending(set: *mut sigset_t) -> ::c_int;
7cac9316 1381
8bb4bdeb
XL
1382 #[cfg_attr(target_os = "netbsd", link_name = "__timegm50")]
1383 pub fn timegm(tm: *mut ::tm) -> time_t;
1384
8bb4bdeb
XL
1385 pub fn sysconf(name: ::c_int) -> ::c_long;
1386
1387 pub fn mkfifo(path: *const c_char, mode: mode_t) -> ::c_int;
1388
e74abb32
XL
1389 #[cfg_attr(
1390 all(target_os = "macos", target_arch = "x86_64"),
1391 link_name = "pselect$1050"
1392 )]
1393 #[cfg_attr(
1394 all(target_os = "macos", target_arch = "x86"),
1395 link_name = "pselect$UNIX2003"
1396 )]
476ff2be 1397 #[cfg_attr(target_os = "netbsd", link_name = "__pselect50")]
e74abb32
XL
1398 pub fn pselect(
1399 nfds: ::c_int,
1400 readfs: *mut fd_set,
1401 writefds: *mut fd_set,
1402 errorfds: *mut fd_set,
1403 timeout: *const timespec,
1404 sigmask: *const sigset_t,
1405 ) -> ::c_int;
1406 pub fn fseeko(
1407 stream: *mut ::FILE,
1408 offset: ::off_t,
1409 whence: ::c_int,
1410 ) -> ::c_int;
476ff2be 1411 pub fn ftello(stream: *mut ::FILE) -> ::off_t;
e74abb32
XL
1412 #[cfg_attr(
1413 all(target_os = "macos", target_arch = "x86"),
1414 link_name = "tcdrain$UNIX2003"
1415 )]
476ff2be
SL
1416 pub fn tcdrain(fd: ::c_int) -> ::c_int;
1417 pub fn cfgetispeed(termios: *const ::termios) -> ::speed_t;
1418 pub fn cfgetospeed(termios: *const ::termios) -> ::speed_t;
1419 pub fn cfsetispeed(termios: *mut ::termios, speed: ::speed_t) -> ::c_int;
1420 pub fn cfsetospeed(termios: *mut ::termios, speed: ::speed_t) -> ::c_int;
1421 pub fn tcgetattr(fd: ::c_int, termios: *mut ::termios) -> ::c_int;
e74abb32
XL
1422 pub fn tcsetattr(
1423 fd: ::c_int,
1424 optional_actions: ::c_int,
1425 termios: *const ::termios,
1426 ) -> ::c_int;
476ff2be
SL
1427 pub fn tcflow(fd: ::c_int, action: ::c_int) -> ::c_int;
1428 pub fn tcflush(fd: ::c_int, action: ::c_int) -> ::c_int;
041b39d2 1429 pub fn tcgetsid(fd: ::c_int) -> ::pid_t;
476ff2be
SL
1430 pub fn tcsendbreak(fd: ::c_int, duration: ::c_int) -> ::c_int;
1431 pub fn mkstemp(template: *mut ::c_char) -> ::c_int;
476ff2be 1432 pub fn mkdtemp(template: *mut ::c_char) -> *mut ::c_char;
8bb4bdeb
XL
1433
1434 pub fn tmpnam(ptr: *mut ::c_char) -> *mut ::c_char;
476ff2be
SL
1435
1436 pub fn openlog(ident: *const ::c_char, logopt: ::c_int, facility: ::c_int);
1437 pub fn closelog();
1438 pub fn setlogmask(maskpri: ::c_int) -> ::c_int;
b7449926 1439 #[cfg_attr(target_os = "macos", link_name = "syslog$DARWIN_EXTSN")]
476ff2be 1440 pub fn syslog(priority: ::c_int, message: *const ::c_char, ...);
e74abb32
XL
1441 #[cfg_attr(
1442 all(target_os = "macos", target_arch = "x86"),
1443 link_name = "nice$UNIX2003"
1444 )]
476ff2be 1445 pub fn nice(incr: ::c_int) -> ::c_int;
8bb4bdeb
XL
1446
1447 pub fn grantpt(fd: ::c_int) -> ::c_int;
1448 pub fn posix_openpt(flags: ::c_int) -> ::c_int;
1449 pub fn ptsname(fd: ::c_int) -> *mut ::c_char;
1450 pub fn unlockpt(fd: ::c_int) -> ::c_int;
69743fb6
XL
1451
1452 pub fn strcasestr(cs: *const c_char, ct: *const c_char) -> *mut c_char;
e74abb32
XL
1453 pub fn getline(
1454 lineptr: *mut *mut c_char,
1455 n: *mut size_t,
1456 stream: *mut FILE,
1457 ) -> ssize_t;
ba9703b0
XL
1458
1459 pub fn lockf(
1460 fd: ::c_int,
1461 cmd: ::c_int,
1462 len: ::off_t,
1463 ) -> ::c_int;
476ff2be
SL
1464}
1465
e1599b0c
XL
1466cfg_if! {
1467 if #[cfg(not(target_os = "redox"))] {
1468 extern {
1469 pub fn getsid(pid: pid_t) -> pid_t;
1470 pub fn truncate(path: *const c_char, length: off_t) -> ::c_int;
1471 #[cfg_attr(all(target_os = "macos", target_arch = "x86"),
1472 link_name = "pause$UNIX2003")]
1473 pub fn pause() -> ::c_int;
1474
1475 pub fn readlinkat(dirfd: ::c_int,
1476 pathname: *const ::c_char,
1477 buf: *mut ::c_char,
1478 bufsiz: ::size_t) -> ::ssize_t;
1479 pub fn mkdirat(dirfd: ::c_int, pathname: *const ::c_char,
1480 mode: ::mode_t) -> ::c_int;
1481 pub fn openat(dirfd: ::c_int, pathname: *const ::c_char,
1482 flags: ::c_int, ...) -> ::c_int;
1483
1484 #[cfg_attr(all(target_os = "macos", target_arch = "x86_64"),
1485 link_name = "fdopendir$INODE64")]
1486 #[cfg_attr(all(target_os = "macos", target_arch = "x86"),
1487 link_name = "fdopendir$INODE64$UNIX2003")]
1488 pub fn fdopendir(fd: ::c_int) -> *mut ::DIR;
1489
1490 #[cfg_attr(target_os = "macos", link_name = "readdir_r$INODE64")]
1491 #[cfg_attr(target_os = "netbsd", link_name = "__readdir_r30")]
1492 #[cfg_attr(
e74abb32 1493 all(target_os = "freebsd", any(freebsd11, freebsd10)),
e1599b0c
XL
1494 link_name = "readdir_r@FBSD_1.0"
1495 )]
1496 /// The 64-bit libc on Solaris and illumos only has readdir_r. If a
1497 /// 32-bit Solaris or illumos target is ever created, it should use
1498 /// __posix_readdir_r. See libc(3LIB) on Solaris or illumos:
1499 /// https://illumos.org/man/3lib/libc
1500 /// https://docs.oracle.com/cd/E36784_01/html/E36873/libc-3lib.html
1501 /// https://www.unix.com/man-page/opensolaris/3LIB/libc/
1502 pub fn readdir_r(dirp: *mut ::DIR, entry: *mut ::dirent,
1503 result: *mut *mut ::dirent) -> ::c_int;
1504 }
1505 }
1506}
1507
532ac7d7
XL
1508cfg_if! {
1509 if #[cfg(not(any(target_os = "solaris", target_os = "illumos")))] {
1510 extern {
1511 pub fn cfmakeraw(termios: *mut ::termios);
1512 pub fn cfsetspeed(termios: *mut ::termios,
1513 speed: ::speed_t) -> ::c_int;
1514 }
1515 }
1516}
1517
476ff2be 1518cfg_if! {
041b39d2
XL
1519 if #[cfg(target_env = "uclibc")] {
1520 mod uclibc;
1521 pub use self::uclibc::*;
1522 } else if #[cfg(target_env = "newlib")] {
1523 mod newlib;
1524 pub use self::newlib::*;
1525 } else if #[cfg(any(target_os = "linux",
1526 target_os = "android",
69743fb6 1527 target_os = "emscripten"))] {
416331ca
XL
1528 mod linux_like;
1529 pub use self::linux_like::*;
476ff2be
SL
1530 } else if #[cfg(any(target_os = "macos",
1531 target_os = "ios",
1532 target_os = "freebsd",
1533 target_os = "dragonfly",
1534 target_os = "openbsd",
416331ca 1535 target_os = "netbsd"))] {
476ff2be
SL
1536 mod bsd;
1537 pub use self::bsd::*;
532ac7d7
XL
1538 } else if #[cfg(any(target_os = "solaris",
1539 target_os = "illumos"))] {
1540 mod solarish;
1541 pub use self::solarish::*;
476ff2be
SL
1542 } else if #[cfg(target_os = "haiku")] {
1543 mod haiku;
1544 pub use self::haiku::*;
b7449926
XL
1545 } else if #[cfg(target_os = "hermit")] {
1546 mod hermit;
1547 pub use self::hermit::*;
416331ca
XL
1548 } else if #[cfg(target_os = "redox")] {
1549 mod redox;
1550 pub use self::redox::*;
476ff2be
SL
1551 } else {
1552 // Unknown target_os
1553 }
1554}
69743fb6
XL
1555
1556cfg_if! {
532ac7d7
XL
1557 if #[cfg(libc_core_cvoid)] {
1558 pub use ::ffi::c_void;
69743fb6
XL
1559 } else {
1560 // Use repr(u8) as LLVM expects `void*` to be the same as `i8*` to help
1561 // enable more optimization opportunities around it recognizing things
1562 // like malloc/free.
1563 #[repr(u8)]
532ac7d7
XL
1564 #[allow(missing_copy_implementations)]
1565 #[allow(missing_debug_implementations)]
69743fb6
XL
1566 pub enum c_void {
1567 // Two dummy variants so the #[repr] attribute can be used.
1568 #[doc(hidden)]
1569 __variant1,
1570 #[doc(hidden)]
1571 __variant2,
1572 }
1573 }
1574}
532ac7d7
XL
1575
1576cfg_if! {
1577 if #[cfg(libc_align)] {
1578 mod align;
1579 pub use self::align::*;
1580 } else {
1581 mod no_align;
1582 pub use self::no_align::*;
1583 }
1584}