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