]> git.lizzy.rs Git - rust.git/blob - src/liblibc/lib.rs
Auto merge of #28938 - GlenDC:master, r=Manishearth
[rust.git] / src / liblibc / lib.rs
1 // Copyright 2012-2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 // Do not remove on snapshot creation. Needed for bootstrap. (Issue #22364)
12 #![cfg_attr(stage0, feature(custom_attribute))]
13 #![crate_name = "libc"]
14 #![crate_type = "rlib"]
15 #![cfg_attr(not(feature = "cargo-build"),
16             unstable(feature = "libc", reason = "use `libc` from crates.io",
17                      issue = "27783"))]
18 #![cfg_attr(not(feature = "cargo-build"), feature(staged_api, no_std))]
19 #![cfg_attr(not(feature = "cargo-build"), staged_api)]
20 #![cfg_attr(not(feature = "cargo-build"), no_std)]
21 #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
22        html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
23        html_root_url = "https://doc.rust-lang.org/nightly/",
24        html_playground_url = "https://play.rust-lang.org/",
25        issue_tracker_base_url = "https://github.com/rust-lang/rust/issues/")]
26 #![cfg_attr(test, feature(test))]
27 #![feature(cfg_target_vendor)]
28
29 //! Bindings for the C standard library and other platform libraries
30 //!
31 //! **NOTE:** These are *architecture and libc* specific. On Linux, these
32 //! bindings are only correct for glibc.
33 //!
34 //! This module contains bindings to the C standard library, organized into
35 //! modules by their defining standard.  Additionally, it contains some assorted
36 //! platform-specific definitions.  For convenience, most functions and types
37 //! are reexported, so `use libc::*` will import the available C bindings as
38 //! appropriate for the target platform. The exact set of functions available
39 //! are platform specific.
40 //!
41 //! *Note:* Because these definitions are platform-specific, some may not appear
42 //! in the generated documentation.
43 //!
44 //! We consider the following specs reasonably normative with respect to
45 //! interoperating with the C standard library (libc/msvcrt):
46 //!
47 //! * ISO 9899:1990 ('C95', 'ANSI C', 'Standard C'), NA1, 1995.
48 //! * ISO 9899:1999 ('C99' or 'C9x').
49 //! * ISO 9945:1988 / IEEE 1003.1-1988 ('POSIX.1').
50 //! * ISO 9945:2001 / IEEE 1003.1-2001 ('POSIX:2001', 'SUSv3').
51 //! * ISO 9945:2008 / IEEE 1003.1-2008 ('POSIX:2008', 'SUSv4').
52 //!
53 //! Note that any reference to the 1996 revision of POSIX, or any revs between
54 //! 1990 (when '88 was approved at ISO) and 2001 (when the next actual
55 //! revision-revision happened), are merely additions of other chapters (1b and
56 //! 1c) outside the core interfaces.
57 //!
58 //! Despite having several names each, these are *reasonably* coherent
59 //! point-in-time, list-of-definition sorts of specs. You can get each under a
60 //! variety of names but will wind up with the same definition in each case.
61 //!
62 //! See standards(7) in linux-manpages for more details.
63 //!
64 //! Our interface to these libraries is complicated by the non-universality of
65 //! conformance to any of them. About the only thing universally supported is
66 //! the first (C95), beyond that definitions quickly become absent on various
67 //! platforms.
68 //!
69 //! We therefore wind up dividing our module-space up (mostly for the sake of
70 //! sanity while editing, filling-in-details and eliminating duplication) into
71 //! definitions common-to-all (held in modules named c95, c99, posix88, posix01
72 //! and posix08) and definitions that appear only on *some* platforms (named
73 //! 'extra'). This would be things like significant OSX foundation kit, or Windows
74 //! library kernel32.dll, or various fancy glibc, Linux or BSD extensions.
75 //!
76 //! In addition to the per-platform 'extra' modules, we define a module of
77 //! 'common BSD' libc routines that never quite made it into POSIX but show up
78 //! in multiple derived systems. This is the 4.4BSD r2 / 1995 release, the final
79 //! one from Berkeley after the lawsuits died down and the CSRG dissolved.
80
81 #![allow(bad_style, raw_pointer_derive)]
82 #![cfg_attr(target_os = "nacl", allow(unused_imports))]
83 #[cfg(feature = "cargo-build")] extern crate std as core;
84
85 #[cfg(test)] extern crate std;
86 #[cfg(test)] extern crate test;
87
88 // Explicit export lists for the intersection (provided here) mean that
89 // you can write more-platform-agnostic code if you stick to just these
90 // symbols.
91
92 pub use types::common::c95::*;
93 pub use types::common::c99::*;
94 pub use types::common::posix88::*;
95 pub use types::os::common::posix01::*;
96 pub use types::os::common::bsd44::*;
97 pub use types::os::arch::c95::*;
98 pub use types::os::arch::c99::*;
99 pub use types::os::arch::posix88::*;
100 pub use types::os::arch::posix01::*;
101 pub use types::os::arch::extra::*;
102
103 pub use consts::os::c95::*;
104 pub use consts::os::posix88::*;
105 pub use consts::os::posix01::*;
106 pub use consts::os::posix08::*;
107 pub use consts::os::bsd44::*;
108 pub use consts::os::extra::*;
109
110 pub use funcs::c95::ctype::*;
111 pub use funcs::c95::stdio::*;
112 pub use funcs::c95::stdlib::*;
113 pub use funcs::c95::string::*;
114 pub use funcs::posix88::fcntl::*;
115 pub use funcs::posix88::stat_::*;
116 pub use funcs::posix88::stdio::*;
117 pub use funcs::posix88::unistd::*;
118
119 pub use funcs::bsd43::*;
120
121 // But we also reexport most everything
122 // if you're interested in writing platform-specific code.
123
124 // FIXME: This is a mess, but the design of this entire module needs to be
125 // reconsidered, so I'm not inclined to do better right now. As part of
126 // #11870 I removed all the pub globs here, leaving explicit reexports
127 // of everything that is actually used in-tree.
128 //
129 // So the following exports don't follow any particular plan.
130
131 #[cfg(unix)] pub use consts::os::sysconf::*;
132
133 #[cfg(unix)] pub use funcs::posix88::mman::*;
134 #[cfg(unix)] pub use funcs::posix88::dirent::*;
135 #[cfg(unix)] pub use funcs::posix88::net::*;
136 #[cfg(unix)] pub use funcs::posix01::stat_::*;
137 #[cfg(unix)] pub use funcs::posix01::unistd::*;
138 #[cfg(unix)] pub use funcs::posix01::resource::*;
139
140
141 #[cfg(windows)] pub use funcs::extra::kernel32::*;
142 #[cfg(windows)] pub use funcs::extra::winsock::*;
143 #[cfg(windows)] pub use funcs::extra::msvcrt::*;
144
145 // On NaCl, these libraries are static. Thus it would be a Bad Idea to link them
146 // in when creating a test crate.
147 #[cfg(not(any(windows,
148               target_env = "musl",
149               all(target_os = "nacl", test),
150               all(target_os = "netbsd", target_vendor = "rumprun"))))]
151 #[link(name = "c")]
152 #[link(name = "m")]
153 extern {}
154
155 // When compiling rust with musl, statically include libc.a in liblibc.rlib.
156 // A cargo build of the libc crate will therefore automatically pick up the
157 // libc.a symbols because liblibc is transitively linked to by the stdlib.
158 #[cfg(all(target_env = "musl", not(feature = "cargo-build"), not(test)))]
159 #[link(name = "c", kind = "static")]
160 extern {}
161
162 #[cfg(all(windows, target_env = "msvc"))]
163 #[link(name = "kernel32")]
164 #[link(name = "shell32")]
165 #[link(name = "msvcrt")]
166 extern {}
167
168 // libnacl provides functions that require a trip through the IRT to work.
169 // ie: _exit, mmap, nanosleep, etc. Anything that would otherwise require a trip
170 // to the kernel.
171 #[cfg(all(target_os = "nacl", not(feature = "cargo-build"), not(test)))]
172 #[link(name = "nacl", kind = "static")]
173 extern {}
174
175 // pnaclmm provides a number of functions that the toolchain's Clang emits calls
176 // to when codegening atomic ops. All the functions within wrap various atomic
177 // operations.
178 // Yes, it could be linked by rustc explicitly, however by linking it here
179 // instead we save a bit of time where bins are involved (by not running the
180 // optimizations on the whole pnaclmm foreach binary built).
181 #[cfg(all(target_os = "nacl", not(feature = "cargo-build"), not(test)))]
182 #[link(name = "pnaclmm", kind = "static")]
183 extern {}
184
185 pub mod types {
186
187     // Types tend to vary *per architecture* so we pull their definitions out
188     // into this module.
189
190     // Standard types that are opaque or common, so are not per-target.
191     pub mod common {
192         pub mod c95 {
193             /// Type used to construct void pointers for use with C.
194             ///
195             /// This type is only useful as a pointer target. Do not use it as a
196             /// return type for FFI functions which have the `void` return type in
197             /// C. Use the unit type `()` or omit the return type instead.
198             ///
199             /// For LLVM to recognize the void pointer type and by extension
200             /// functions like malloc(), we need to have it represented as i8*
201             /// in LLVM bitcode. The enum used here ensures this. We need two
202             /// variants, because the compiler complains about the `repr`
203             /// attribute otherwise.
204             #[repr(u8)]
205             pub enum c_void {
206                 #[doc(hidden)]
207                 __variant1,
208                 #[doc(hidden)]
209                 __variant2,
210             }
211
212             pub enum FILE {}
213             pub enum fpos_t {}
214         }
215         pub mod c99 {
216             pub type int8_t = i8;
217             pub type int16_t = i16;
218             pub type int32_t = i32;
219             pub type int64_t = i64;
220             pub type uint8_t = u8;
221             pub type uint16_t = u16;
222             pub type uint32_t = u32;
223             pub type uint64_t = u64;
224         }
225         pub mod posix88 {
226             pub enum DIR {}
227             pub enum dirent_t {}
228         }
229         pub mod posix01 {}
230         pub mod posix08 {}
231         pub mod bsd44 {}
232     }
233
234     // Standard types that are scalar but vary by OS and arch.
235
236     #[cfg(any(target_os = "linux", target_os = "android", target_os = "nacl"))]
237     pub mod os {
238         pub mod common {
239             pub mod posix01 {
240                 use types::common::c95::{c_void};
241                 use types::os::arch::c95::{c_char, c_ulong, size_t,
242                                                  time_t, suseconds_t, c_long};
243
244                 #[cfg(not(target_os = "nacl"))]
245                 pub type pthread_t = c_ulong;
246                 #[cfg(target_os = "nacl")]
247                 pub type pthread_t = *mut c_void;
248                 pub type rlim_t = u64;
249
250                 #[repr(C)]
251                 #[derive(Copy, Clone)] pub struct glob_t {
252                     pub gl_pathc: size_t,
253                     pub gl_pathv: *mut *mut c_char,
254                     pub gl_offs:  size_t,
255
256                     pub __unused1: *mut c_void,
257                     pub __unused2: *mut c_void,
258                     pub __unused3: *mut c_void,
259                     pub __unused4: *mut c_void,
260                     pub __unused5: *mut c_void,
261                 }
262
263                 #[repr(C)]
264                 #[derive(Copy, Clone)] pub struct timeval {
265                     pub tv_sec: time_t,
266                     pub tv_usec: suseconds_t,
267                 }
268
269                 #[repr(C)]
270                 #[derive(Copy, Clone)] pub struct timespec {
271                     pub tv_sec: time_t,
272                     pub tv_nsec: c_long,
273                 }
274
275                 pub enum timezone {}
276
277                 pub type sighandler_t = size_t;
278
279                 #[repr(C)]
280                 #[derive(Copy, Clone)]
281                 pub struct rlimit {
282                     pub rlim_cur: rlim_t,
283                     pub rlim_max: rlim_t,
284                 }
285             }
286
287             pub mod bsd43 {
288                 use types::os::common::posix01::timeval;
289                 use types::os::arch::c95::c_long;
290                 // This is also specified in POSIX 2001, but only has two fields. All implementors
291                 // implement BSD 4.3 version.
292                 #[repr(C)]
293                 #[derive(Copy, Clone)]
294                 pub struct rusage {
295                     pub ru_utime: timeval,
296                     pub ru_stime: timeval,
297                     pub ru_maxrss: c_long,
298                     pub ru_ixrss: c_long,
299                     pub ru_idrss: c_long,
300                     pub ru_isrss: c_long,
301                     pub ru_minflt: c_long,
302                     pub ru_majflt: c_long,
303                     pub ru_nswap: c_long,
304                     pub ru_inblock: c_long,
305                     pub ru_oublock: c_long,
306                     pub ru_msgsnd: c_long,
307                     pub ru_msgrcv: c_long,
308                     pub ru_nsignals: c_long,
309                     pub ru_nvcsw: c_long,
310                     pub ru_nivcsw: c_long
311                 }
312             }
313
314             pub mod bsd44 {
315                 use types::common::c95::{c_void};
316                 use types::os::arch::c95::{c_char, c_int, c_uint};
317
318                 pub type socklen_t = u32;
319                 pub type sa_family_t = u16;
320                 pub type in_port_t = u16;
321                 pub type in_addr_t = u32;
322                 #[repr(C)]
323                 #[derive(Copy, Clone)] pub struct sockaddr {
324                     pub sa_family: sa_family_t,
325                     pub sa_data: [u8; 14],
326                 }
327                 #[repr(C)]
328                 #[derive(Copy)] pub struct sockaddr_storage {
329                     pub ss_family: sa_family_t,
330                     pub __ss_align: isize,
331                     #[cfg(target_pointer_width = "32")]
332                     pub __ss_pad2: [u8; 128 - 2 * 4],
333                     #[cfg(target_pointer_width = "64")]
334                     pub __ss_pad2: [u8; 128 - 2 * 8],
335                 }
336                 impl ::core::clone::Clone for sockaddr_storage {
337                     fn clone(&self) -> sockaddr_storage { *self }
338                 }
339                 #[repr(C)]
340                 #[derive(Copy, Clone)] pub struct sockaddr_in {
341                     pub sin_family: sa_family_t,
342                     pub sin_port: in_port_t,
343                     pub sin_addr: in_addr,
344                     pub sin_zero: [u8; 8],
345                 }
346                 #[repr(C)]
347                 #[derive(Copy, Clone)] pub struct in_addr {
348                     pub s_addr: in_addr_t,
349                 }
350                 #[repr(C)]
351                 #[derive(Copy, Clone)] pub struct sockaddr_in6 {
352                     pub sin6_family: sa_family_t,
353                     pub sin6_port: in_port_t,
354                     pub sin6_flowinfo: u32,
355                     pub sin6_addr: in6_addr,
356                     pub sin6_scope_id: u32,
357                 }
358                 #[repr(C)]
359                 #[derive(Copy, Clone)] pub struct in6_addr {
360                     pub s6_addr: [u16; 8]
361                 }
362                 #[repr(C)]
363                 #[derive(Copy, Clone)] pub struct ip_mreq {
364                     pub imr_multiaddr: in_addr,
365                     pub imr_interface: in_addr,
366                 }
367                 #[repr(C)]
368                 #[derive(Copy, Clone)] pub struct ip6_mreq {
369                     pub ipv6mr_multiaddr: in6_addr,
370                     pub ipv6mr_interface: c_uint,
371                 }
372                 #[repr(C)]
373                 #[derive(Copy, Clone)] pub struct addrinfo {
374                     pub ai_flags: c_int,
375                     pub ai_family: c_int,
376                     pub ai_socktype: c_int,
377                     pub ai_protocol: c_int,
378                     pub ai_addrlen: socklen_t,
379
380                     #[cfg(target_os = "linux")]
381                     pub ai_addr: *mut sockaddr,
382
383                     #[cfg(target_os = "linux")]
384                     pub ai_canonname: *mut c_char,
385
386                     #[cfg(any(target_os = "android", target_os = "nacl"))]
387                     pub ai_canonname: *mut c_char,
388
389                     #[cfg(any(target_os = "android", target_os = "nacl"))]
390                     pub ai_addr: *mut sockaddr,
391
392                     pub ai_next: *mut addrinfo,
393                 }
394                 #[repr(C)]
395                 #[derive(Copy)] pub struct sockaddr_un {
396                     pub sun_family: sa_family_t,
397                     pub sun_path: [c_char; 108]
398                 }
399                 impl ::core::clone::Clone for sockaddr_un {
400                     fn clone(&self) -> sockaddr_un { *self }
401                 }
402
403                 #[repr(C)]
404                 #[derive(Copy, Clone)] pub struct ifaddrs {
405                     pub ifa_next: *mut ifaddrs,
406                     pub ifa_name: *mut c_char,
407                     pub ifa_flags: c_uint,
408                     pub ifa_addr: *mut sockaddr,
409                     pub ifa_netmask: *mut sockaddr,
410                     pub ifa_ifu: *mut sockaddr, // FIXME This should be a union
411                     pub ifa_data: *mut c_void
412                 }
413
414             }
415         }
416
417         #[cfg(any(target_arch = "x86",
418                   target_arch = "arm",
419                   target_arch = "mips",
420                   target_arch = "mipsel",
421                   target_arch = "powerpc",
422                   target_arch = "le32"))]
423         pub mod arch {
424             pub mod c95 {
425                 pub type c_char = i8;
426                 pub type c_schar = i8;
427                 pub type c_uchar = u8;
428                 pub type c_short = i16;
429                 pub type c_ushort = u16;
430                 pub type c_int = i32;
431                 pub type c_uint = u32;
432                 pub type c_long = i32;
433                 pub type c_ulong = u32;
434                 pub type c_float = f32;
435                 pub type c_double = f64;
436                 pub type size_t = u32;
437                 pub type ptrdiff_t = i32;
438                 pub type clock_t = i32;
439                 pub type time_t = i32;
440                 pub type suseconds_t = i32;
441                 pub type wchar_t = i32;
442             }
443             pub mod c99 {
444                 pub type c_longlong = i64;
445                 pub type c_ulonglong = u64;
446                 pub type intptr_t = i32;
447                 pub type uintptr_t = u32;
448                 pub type intmax_t = i64;
449                 pub type uintmax_t = u64;
450             }
451             #[cfg(any(target_arch = "mips",
452                       target_arch = "mipsel",
453                       target_arch = "powerpc",
454                       target_arch = "le32",
455                       all(any(target_arch = "arm", target_arch = "x86"),
456                           not(target_os = "android"))))]
457             pub mod posix88 {
458                 pub type off_t = i32;
459                 pub type dev_t = u64;
460                 pub type ino_t = u32;
461                 pub type pid_t = i32;
462                 pub type uid_t = u32;
463                 pub type gid_t = u32;
464                 pub type useconds_t = u32;
465                 pub type mode_t = u32;
466                 pub type ssize_t = i32;
467             }
468             #[cfg(all(any(target_arch = "arm", target_arch = "x86"),
469                       target_os = "android"))]
470             pub mod posix88 {
471                 pub type off_t = i32;
472                 pub type dev_t = u32;
473                 pub type ino_t = u32;
474
475                 pub type pid_t = i32;
476                 pub type uid_t = u32;
477                 pub type gid_t = u32;
478                 pub type useconds_t = u32;
479
480                 pub type mode_t = u16;
481                 pub type ssize_t = i32;
482             }
483             #[cfg(any(all(any(target_arch = "arm", target_arch = "x86"),
484                           not(target_os = "android")),
485                       target_arch = "le32",
486                       target_arch = "powerpc"))]
487             pub mod posix01 {
488                 use types::os::arch::c95::{c_short, c_long, time_t};
489                 use types::os::arch::posix88::{dev_t, gid_t, ino_t};
490                 use types::os::arch::posix88::{mode_t, off_t};
491                 use types::os::arch::posix88::{uid_t};
492
493                 pub type nlink_t = u32;
494                 pub type blksize_t = i32;
495                 pub type blkcnt_t = i32;
496
497                 #[repr(C)]
498                 #[derive(Copy, Clone)] pub struct stat {
499                     pub st_dev: dev_t,
500                     pub __pad1: c_short,
501                     pub st_ino: ino_t,
502                     pub st_mode: mode_t,
503                     pub st_nlink: nlink_t,
504                     pub st_uid: uid_t,
505                     pub st_gid: gid_t,
506                     pub st_rdev: dev_t,
507                     pub __pad2: c_short,
508                     pub st_size: off_t,
509                     pub st_blksize: blksize_t,
510                     pub st_blocks: blkcnt_t,
511                     pub st_atime: time_t,
512                     pub st_atime_nsec: c_long,
513                     pub st_mtime: time_t,
514                     pub st_mtime_nsec: c_long,
515                     pub st_ctime: time_t,
516                     pub st_ctime_nsec: c_long,
517                     pub __unused4: c_long,
518                     pub __unused5: c_long,
519                 }
520
521                 #[repr(C)]
522                 #[derive(Copy, Clone)] pub struct utimbuf {
523                     pub actime: time_t,
524                     pub modtime: time_t,
525                 }
526
527                 #[repr(C)]
528                 #[derive(Copy, Clone)] pub struct pthread_attr_t {
529                     pub __size: [u32; 9]
530                 }
531             }
532
533             #[cfg(all(any(target_arch = "arm", target_arch = "x86"),
534                       target_os = "android"))]
535             pub mod posix01 {
536                 use types::os::arch::c95::{c_uchar, c_uint, c_ulong, c_long, time_t};
537                 use types::os::arch::c99::{c_longlong, c_ulonglong};
538                 use types::os::arch::posix88::{uid_t, gid_t};
539
540                 pub type nlink_t = u16;
541                 pub type blksize_t = u32;
542                 pub type blkcnt_t = u32;
543
544                 #[repr(C)]
545                 #[derive(Copy, Clone)] pub struct stat {
546                     pub st_dev: c_ulonglong,
547                     pub __pad0: [c_uchar; 4],
548                     pub __st_ino: c_long,
549                     pub st_mode: c_uint,
550                     pub st_nlink: c_uint,
551                     pub st_uid: uid_t,
552                     pub st_gid: gid_t,
553                     pub st_rdev: c_ulonglong,
554                     pub __pad3: [c_uchar; 4],
555                     pub st_size: c_longlong,
556                     pub st_blksize: c_ulong,
557                     pub st_blocks: c_ulonglong,
558                     pub st_atime: time_t,
559                     pub st_atime_nsec: c_ulong,
560                     pub st_mtime: time_t,
561                     pub st_mtime_nsec: c_ulong,
562                     pub st_ctime: time_t,
563                     pub st_ctime_nsec: c_ulong,
564                     pub st_ino: c_ulonglong,
565                 }
566
567                 #[repr(C)]
568                 #[derive(Copy, Clone)] pub struct utimbuf {
569                     pub actime: time_t,
570                     pub modtime: time_t,
571                 }
572
573                 #[repr(C)]
574                 #[derive(Copy, Clone)] pub struct pthread_attr_t {
575                     pub __size: [u32; 9]
576                 }
577             }
578
579             #[cfg(any(target_arch = "mips",
580                       target_arch = "mipsel"))]
581             pub mod posix01 {
582                 use types::os::arch::c95::{c_long, c_ulong, time_t};
583                 use types::os::arch::posix88::{gid_t, ino_t};
584                 use types::os::arch::posix88::{mode_t, off_t};
585                 use types::os::arch::posix88::{uid_t};
586
587                 pub type nlink_t = u32;
588                 pub type blksize_t = i32;
589                 pub type blkcnt_t = i32;
590
591                 #[repr(C)]
592                 #[derive(Copy, Clone)] pub struct stat {
593                     pub st_dev: c_ulong,
594                     pub st_pad1: [c_long; 3],
595                     pub st_ino: ino_t,
596                     pub st_mode: mode_t,
597                     pub st_nlink: nlink_t,
598                     pub st_uid: uid_t,
599                     pub st_gid: gid_t,
600                     pub st_rdev: c_ulong,
601                     pub st_pad2: [c_long; 2],
602                     pub st_size: off_t,
603                     pub st_pad3: c_long,
604                     pub st_atime: time_t,
605                     pub st_atime_nsec: c_long,
606                     pub st_mtime: time_t,
607                     pub st_mtime_nsec: c_long,
608                     pub st_ctime: time_t,
609                     pub st_ctime_nsec: c_long,
610                     pub st_blksize: blksize_t,
611                     pub st_blocks: blkcnt_t,
612                     pub st_pad5: [c_long; 14],
613                 }
614
615                 #[repr(C)]
616                 #[derive(Copy, Clone)] pub struct utimbuf {
617                     pub actime: time_t,
618                     pub modtime: time_t,
619                 }
620
621                 #[repr(C)]
622                 #[derive(Copy, Clone)] pub struct pthread_attr_t {
623                     pub __size: [u32; 9]
624                 }
625             }
626             pub mod posix08 {}
627             pub mod bsd44 {}
628             pub mod extra {
629                 use types::os::arch::c95::{c_ushort, c_int, c_uchar};
630                 #[repr(C)]
631                 #[derive(Copy, Clone)] pub struct sockaddr_ll {
632                     pub sll_family: c_ushort,
633                     pub sll_protocol: c_ushort,
634                     pub sll_ifindex: c_int,
635                     pub sll_hatype: c_ushort,
636                     pub sll_pkttype: c_uchar,
637                     pub sll_halen: c_uchar,
638                     pub sll_addr: [c_uchar; 8]
639                 }
640             }
641
642         }
643
644         #[cfg(any(target_arch = "x86_64",
645                   target_arch = "aarch64"))]
646         pub mod arch {
647             pub mod c95 {
648                 #[cfg(not(target_arch = "aarch64"))]
649                 pub type c_char = i8;
650                 #[cfg(target_arch = "aarch64")]
651                 pub type c_char = u8;
652                 pub type c_schar = i8;
653                 pub type c_uchar = u8;
654                 pub type c_short = i16;
655                 pub type c_ushort = u16;
656                 pub type c_int = i32;
657                 pub type c_uint = u32;
658                 pub type c_long = i64;
659                 pub type c_ulong = u64;
660                 pub type c_float = f32;
661                 pub type c_double = f64;
662                 pub type size_t = u64;
663                 pub type ptrdiff_t = i64;
664                 pub type clock_t = i64;
665                 pub type time_t = i64;
666                 pub type suseconds_t = i64;
667                 #[cfg(not(target_arch = "aarch64"))]
668                 pub type wchar_t = i32;
669                 #[cfg(target_arch = "aarch64")]
670                 pub type wchar_t = u32;
671             }
672             pub mod c99 {
673                 pub type c_longlong = i64;
674                 pub type c_ulonglong = u64;
675                 pub type intptr_t = i64;
676                 pub type uintptr_t = u64;
677                 pub type intmax_t = i64;
678                 pub type uintmax_t = u64;
679             }
680             pub mod posix88 {
681                 pub type off_t = i64;
682                 pub type dev_t = u64;
683                 pub type ino_t = u64;
684                 pub type pid_t = i32;
685                 pub type uid_t = u32;
686                 pub type gid_t = u32;
687                 pub type useconds_t = u32;
688                 pub type mode_t = u32;
689                 pub type ssize_t = i64;
690             }
691             #[cfg(not(target_arch = "aarch64"))]
692             pub mod posix01 {
693                 use types::os::arch::c95::{c_int, c_long, time_t};
694                 use types::os::arch::posix88::{dev_t, gid_t, ino_t};
695                 use types::os::arch::posix88::{mode_t, off_t};
696                 use types::os::arch::posix88::{uid_t};
697
698                 pub type nlink_t = u64;
699                 pub type blksize_t = i64;
700                 pub type blkcnt_t = i64;
701
702                 #[repr(C)]
703                 #[derive(Copy, Clone)] pub struct stat {
704                     pub st_dev: dev_t,
705                     pub st_ino: ino_t,
706                     pub st_nlink: nlink_t,
707                     pub st_mode: mode_t,
708                     pub st_uid: uid_t,
709                     pub st_gid: gid_t,
710                     pub __pad0: c_int,
711                     pub st_rdev: dev_t,
712                     pub st_size: off_t,
713                     pub st_blksize: blksize_t,
714                     pub st_blocks: blkcnt_t,
715                     pub st_atime: time_t,
716                     pub st_atime_nsec: c_long,
717                     pub st_mtime: time_t,
718                     pub st_mtime_nsec: c_long,
719                     pub st_ctime: time_t,
720                     pub st_ctime_nsec: c_long,
721                     pub __unused: [c_long; 3],
722                 }
723
724                 #[repr(C)]
725                 #[derive(Copy, Clone)] pub struct utimbuf {
726                     pub actime: time_t,
727                     pub modtime: time_t,
728                 }
729
730                 #[repr(C)]
731                 #[derive(Copy, Clone)] pub struct pthread_attr_t {
732                     pub __size: [u64; 7]
733                 }
734             }
735             #[cfg(target_arch = "aarch64")]
736             pub mod posix01 {
737                 use types::os::arch::c95::{c_int, c_long, time_t};
738                 use types::os::arch::posix88::{dev_t, gid_t, ino_t};
739                 use types::os::arch::posix88::{mode_t, off_t};
740                 use types::os::arch::posix88::{uid_t};
741
742                 pub type nlink_t = u32;
743                 pub type blksize_t = i32;
744                 pub type blkcnt_t = i64;
745
746                 #[repr(C)]
747                 #[derive(Copy, Clone)] pub struct stat {
748                     pub st_dev: dev_t,
749                     pub st_ino: ino_t,
750                     pub st_mode: mode_t,
751                     pub st_nlink: nlink_t,
752                     pub st_uid: uid_t,
753                     pub st_gid: gid_t,
754                     pub st_rdev: dev_t,
755                     pub __pad1: dev_t,
756                     pub st_size: off_t,
757                     pub st_blksize: blksize_t,
758                     pub __pad2: c_int,
759                     pub st_blocks: blkcnt_t,
760                     pub st_atime: time_t,
761                     pub st_atime_nsec: c_long,
762                     pub st_mtime: time_t,
763                     pub st_mtime_nsec: c_long,
764                     pub st_ctime: time_t,
765                     pub st_ctime_nsec: c_long,
766                     pub __unused: [c_int; 2],
767                 }
768
769                 #[repr(C)]
770                 #[derive(Copy, Clone)] pub struct utimbuf {
771                     pub actime: time_t,
772                     pub modtime: time_t,
773                 }
774
775                 #[repr(C)]
776                 #[derive(Copy, Clone)] pub struct pthread_attr_t {
777                     pub __size: [u64; 8]
778                 }
779             }
780             pub mod posix08 {
781             }
782             pub mod bsd44 {
783             }
784             pub mod extra {
785                 use types::os::arch::c95::{c_ushort, c_int, c_uchar};
786                 #[derive(Copy, Clone)] pub struct sockaddr_ll {
787                     pub sll_family: c_ushort,
788                     pub sll_protocol: c_ushort,
789                     pub sll_ifindex: c_int,
790                     pub sll_hatype: c_ushort,
791                     pub sll_pkttype: c_uchar,
792                     pub sll_halen: c_uchar,
793                     pub sll_addr: [c_uchar; 8]
794                 }
795
796             }
797         }
798     }
799
800     #[cfg(target_os = "freebsd")]
801     pub mod os {
802         pub mod common {
803             pub mod posix01 {
804                 use types::common::c95::{c_void};
805                 use types::os::arch::c95::{c_char, c_int, size_t,
806                                                  time_t, suseconds_t, c_long};
807                 use types::os::arch::c99::{uintptr_t};
808
809                 pub type pthread_t = uintptr_t;
810                 pub type rlim_t = i64;
811
812                 #[repr(C)]
813                 #[derive(Copy, Clone)] pub struct glob_t {
814                     pub gl_pathc:  size_t,
815                     pub __unused1: size_t,
816                     pub gl_offs:   size_t,
817                     pub __unused2: c_int,
818                     pub gl_pathv:  *mut *mut c_char,
819
820                     pub __unused3: *mut c_void,
821
822                     pub __unused4: *mut c_void,
823                     pub __unused5: *mut c_void,
824                     pub __unused6: *mut c_void,
825                     pub __unused7: *mut c_void,
826                     pub __unused8: *mut c_void,
827                 }
828
829                 #[repr(C)]
830                 #[derive(Copy, Clone)] pub struct timeval {
831                     pub tv_sec: time_t,
832                     pub tv_usec: suseconds_t,
833                 }
834
835                 #[repr(C)]
836                 #[derive(Copy, Clone)] pub struct timespec {
837                     pub tv_sec: time_t,
838                     pub tv_nsec: c_long,
839                 }
840
841                 pub enum timezone {}
842
843                 pub type sighandler_t = size_t;
844
845                 #[repr(C)]
846                 #[derive(Copy, Clone)]
847                 pub struct rlimit {
848                     pub rlim_cur: rlim_t,
849                     pub rlim_max: rlim_t,
850                 }
851             }
852
853             pub mod bsd43 {
854                 use types::os::common::posix01::timeval;
855                 use types::os::arch::c95::c_long;
856                 #[repr(C)]
857                 #[derive(Copy, Clone)]
858                 pub struct rusage {
859                     pub ru_utime: timeval,
860                     pub ru_stime: timeval,
861                     pub ru_maxrss: c_long,
862                     pub ru_ixrss: c_long,
863                     pub ru_idrss: c_long,
864                     pub ru_isrss: c_long,
865                     pub ru_minflt: c_long,
866                     pub ru_majflt: c_long,
867                     pub ru_nswap: c_long,
868                     pub ru_inblock: c_long,
869                     pub ru_oublock: c_long,
870                     pub ru_msgsnd: c_long,
871                     pub ru_msgrcv: c_long,
872                     pub ru_nsignals: c_long,
873                     pub ru_nvcsw: c_long,
874                     pub ru_nivcsw: c_long
875                 }
876             }
877
878             pub mod bsd44 {
879                 use types::common::c95::{c_void};
880                 use types::os::arch::c95::{c_char, c_int, c_uint};
881
882                 pub type socklen_t = u32;
883                 pub type sa_family_t = u8;
884                 pub type in_port_t = u16;
885                 pub type in_addr_t = u32;
886                 #[repr(C)]
887                 #[derive(Copy, Clone)] pub struct sockaddr {
888                     pub sa_len: u8,
889                     pub sa_family: sa_family_t,
890                     pub sa_data: [u8; 14],
891                 }
892                 #[repr(C)]
893                 #[derive(Copy)] pub struct sockaddr_storage {
894                     pub ss_len: u8,
895                     pub ss_family: sa_family_t,
896                     pub __ss_pad1: [u8; 6],
897                     pub __ss_align: i64,
898                     pub __ss_pad2: [u8; 112],
899                 }
900                 impl ::core::clone::Clone for sockaddr_storage {
901                     fn clone(&self) -> sockaddr_storage { *self }
902                 }
903                 #[repr(C)]
904                 #[derive(Copy, Clone)] pub struct sockaddr_in {
905                     pub sin_len: u8,
906                     pub sin_family: sa_family_t,
907                     pub sin_port: in_port_t,
908                     pub sin_addr: in_addr,
909                     pub sin_zero: [u8; 8],
910                 }
911                 #[repr(C)]
912                 #[derive(Copy, Clone)] pub struct in_addr {
913                     pub s_addr: in_addr_t,
914                 }
915                 #[repr(C)]
916                 #[derive(Copy, Clone)] pub struct sockaddr_in6 {
917                     pub sin6_len: u8,
918                     pub sin6_family: sa_family_t,
919                     pub sin6_port: in_port_t,
920                     pub sin6_flowinfo: u32,
921                     pub sin6_addr: in6_addr,
922                     pub sin6_scope_id: u32,
923                 }
924                 #[repr(C)]
925                 #[derive(Copy, Clone)] pub struct in6_addr {
926                     pub s6_addr: [u16; 8]
927                 }
928                 #[repr(C)]
929                 #[derive(Copy, Clone)] pub struct ip_mreq {
930                     pub imr_multiaddr: in_addr,
931                     pub imr_interface: in_addr,
932                 }
933                 #[repr(C)]
934                 #[derive(Copy, Clone)] pub struct ip6_mreq {
935                     pub ipv6mr_multiaddr: in6_addr,
936                     pub ipv6mr_interface: c_uint,
937                 }
938                 #[repr(C)]
939                 #[derive(Copy, Clone)] pub struct addrinfo {
940                     pub ai_flags: c_int,
941                     pub ai_family: c_int,
942                     pub ai_socktype: c_int,
943                     pub ai_protocol: c_int,
944                     pub ai_addrlen: socklen_t,
945                     pub ai_canonname: *mut c_char,
946                     pub ai_addr: *mut sockaddr,
947                     pub ai_next: *mut addrinfo,
948                 }
949                 #[repr(C)]
950                 #[derive(Copy)] pub struct sockaddr_un {
951                     pub sun_len: u8,
952                     pub sun_family: sa_family_t,
953                     pub sun_path: [c_char; 104]
954                 }
955                 impl ::core::clone::Clone for sockaddr_un {
956                     fn clone(&self) -> sockaddr_un { *self }
957                 }
958                 #[repr(C)]
959                 #[derive(Copy, Clone)] pub struct ifaddrs {
960                     pub ifa_next: *mut ifaddrs,
961                     pub ifa_name: *mut c_char,
962                     pub ifa_flags: c_uint,
963                     pub ifa_addr: *mut sockaddr,
964                     pub ifa_netmask: *mut sockaddr,
965                     pub ifa_dstaddr: *mut sockaddr,
966                     pub ifa_data: *mut c_void
967                 }
968
969
970             }
971         }
972
973         #[cfg(target_arch = "x86")]
974         pub mod arch {
975             pub mod c95 {
976                 pub type c_char = i8;
977                 pub type c_schar = i8;
978                 pub type c_uchar = u8;
979                 pub type c_short = i16;
980                 pub type c_ushort = u16;
981                 pub type c_int = i32;
982                 pub type c_uint = u32;
983                 pub type c_long = i32;
984                 pub type c_ulong = u32;
985                 pub type c_float = f32;
986                 pub type c_double = f64;
987                 pub type size_t = u32;
988                 pub type ptrdiff_t = i32;
989                 pub type clock_t = i32;
990                 pub type time_t = i32;
991                 pub type suseconds_t = i32;
992                 pub type wchar_t = i32;
993             }
994             pub mod c99 {
995                 pub type c_longlong = i64;
996                 pub type c_ulonglong = u64;
997                 pub type intptr_t = i32;
998                 pub type uintptr_t = u32;
999                 pub type intmax_t = i64;
1000                 pub type uintmax_t = u64;
1001             }
1002             pub mod posix88 {
1003                 pub type off_t = i64;
1004                 pub type dev_t = u32;
1005                 pub type ino_t = u32;
1006                 pub type pid_t = i32;
1007                 pub type uid_t = u32;
1008                 pub type gid_t = u32;
1009                 pub type useconds_t = u32;
1010                 pub type mode_t = u16;
1011                 pub type ssize_t = i32;
1012             }
1013             pub mod posix01 {
1014                 use types::common::c95::{c_void};
1015                 use types::common::c99::{uint32_t, int32_t};
1016                 use types::os::arch::c95::{c_long, time_t};
1017                 use types::os::arch::posix88::{dev_t, gid_t, ino_t};
1018                 use types::os::arch::posix88::{mode_t, off_t};
1019                 use types::os::arch::posix88::{uid_t};
1020
1021                 pub type nlink_t = u16;
1022                 pub type blksize_t = u32;
1023                 pub type blkcnt_t = i64;
1024                 pub type fflags_t = u32;
1025                 #[repr(C)]
1026                 #[derive(Copy, Clone)] pub struct stat {
1027                     pub st_dev: dev_t,
1028                     pub st_ino: ino_t,
1029                     pub st_mode: mode_t,
1030                     pub st_nlink: nlink_t,
1031                     pub st_uid: uid_t,
1032                     pub st_gid: gid_t,
1033                     pub st_rdev: dev_t,
1034                     pub st_atime: time_t,
1035                     pub st_atime_nsec: c_long,
1036                     pub st_mtime: time_t,
1037                     pub st_mtime_nsec: c_long,
1038                     pub st_ctime: time_t,
1039                     pub st_ctime_nsec: c_long,
1040                     pub st_size: off_t,
1041                     pub st_blocks: blkcnt_t,
1042                     pub st_blksize: blksize_t,
1043                     pub st_flags: fflags_t,
1044                     pub st_gen: uint32_t,
1045                     pub st_lspare: int32_t,
1046                     pub st_birthtime: time_t,
1047                     pub st_birthtime_nsec: c_long,
1048                     pub __unused: [u8; 8],
1049                 }
1050
1051                 #[repr(C)]
1052                 #[derive(Copy, Clone)] pub struct utimbuf {
1053                     pub actime: time_t,
1054                     pub modtime: time_t,
1055                 }
1056
1057                 pub type pthread_attr_t = *mut c_void;
1058             }
1059             pub mod posix08 {
1060             }
1061             pub mod bsd44 {
1062             }
1063             pub mod extra {
1064             }
1065         }
1066
1067         #[cfg(target_arch = "x86_64")]
1068         pub mod arch {
1069             pub mod c95 {
1070                 pub type c_char = i8;
1071                 pub type c_schar = i8;
1072                 pub type c_uchar = u8;
1073                 pub type c_short = i16;
1074                 pub type c_ushort = u16;
1075                 pub type c_int = i32;
1076                 pub type c_uint = u32;
1077                 pub type c_long = i64;
1078                 pub type c_ulong = u64;
1079                 pub type c_float = f32;
1080                 pub type c_double = f64;
1081                 pub type size_t = u64;
1082                 pub type ptrdiff_t = i64;
1083                 pub type clock_t = i32;
1084                 pub type time_t = i64;
1085                 pub type suseconds_t = i64;
1086                 pub type wchar_t = i32;
1087             }
1088             pub mod c99 {
1089                 pub type c_longlong = i64;
1090                 pub type c_ulonglong = u64;
1091                 pub type intptr_t = i64;
1092                 pub type uintptr_t = u64;
1093                 pub type intmax_t = i64;
1094                 pub type uintmax_t = u64;
1095             }
1096             pub mod posix88 {
1097                 pub type off_t = i64;
1098                 pub type dev_t = u32;
1099                 pub type ino_t = u32;
1100                 pub type pid_t = i32;
1101                 pub type uid_t = u32;
1102                 pub type gid_t = u32;
1103                 pub type useconds_t = u32;
1104                 pub type mode_t = u16;
1105                 pub type ssize_t = i64;
1106             }
1107             pub mod posix01 {
1108                 use types::common::c95::{c_void};
1109                 use types::common::c99::{uint32_t, int32_t};
1110                 use types::os::arch::c95::{c_long, time_t};
1111                 use types::os::arch::posix88::{dev_t, gid_t, ino_t};
1112                 use types::os::arch::posix88::{mode_t, off_t};
1113                 use types::os::arch::posix88::{uid_t};
1114
1115                 pub type nlink_t = u16;
1116                 pub type blksize_t = u32;
1117                 pub type blkcnt_t = i64;
1118                 pub type fflags_t = u32;
1119                 #[repr(C)]
1120                 #[derive(Copy, Clone)] pub struct stat {
1121                     pub st_dev: dev_t,
1122                     pub st_ino: ino_t,
1123                     pub st_mode: mode_t,
1124                     pub st_nlink: nlink_t,
1125                     pub st_uid: uid_t,
1126                     pub st_gid: gid_t,
1127                     pub st_rdev: dev_t,
1128                     pub st_atime: time_t,
1129                     pub st_atime_nsec: c_long,
1130                     pub st_mtime: time_t,
1131                     pub st_mtime_nsec: c_long,
1132                     pub st_ctime: time_t,
1133                     pub st_ctime_nsec: c_long,
1134                     pub st_size: off_t,
1135                     pub st_blocks: blkcnt_t,
1136                     pub st_blksize: blksize_t,
1137                     pub st_flags: fflags_t,
1138                     pub st_gen: uint32_t,
1139                     pub st_lspare: int32_t,
1140                     pub st_birthtime: time_t,
1141                     pub st_birthtime_nsec: c_long,
1142                 }
1143
1144                 #[repr(C)]
1145                 #[derive(Copy, Clone)] pub struct utimbuf {
1146                     pub actime: time_t,
1147                     pub modtime: time_t,
1148                 }
1149
1150                 pub type pthread_attr_t = *mut c_void;
1151             }
1152             pub mod posix08 {
1153             }
1154             pub mod bsd44 {
1155             }
1156             pub mod extra {
1157             }
1158         }
1159     }
1160
1161     #[cfg(target_os = "dragonfly")]
1162     pub mod os {
1163         pub mod common {
1164             pub mod posix01 {
1165                 use types::common::c95::{c_void};
1166                 use types::os::arch::c95::{c_char, c_int, size_t,
1167                                                  time_t, suseconds_t, c_long};
1168                 use types::os::arch::c99::{uintptr_t};
1169
1170                 pub type pthread_t = uintptr_t;
1171                 pub type rlim_t = i64;
1172
1173                 #[repr(C)]
1174                 #[derive(Copy, Clone)] pub struct glob_t {
1175                     pub gl_pathc:  size_t,
1176                     pub __unused1: size_t,
1177                     pub gl_offs:   size_t,
1178                     pub __unused2: c_int,
1179                     pub gl_pathv:  *mut *mut c_char,
1180
1181                     pub __unused3: *mut c_void,
1182
1183                     pub __unused4: *mut c_void,
1184                     pub __unused5: *mut c_void,
1185                     pub __unused6: *mut c_void,
1186                     pub __unused7: *mut c_void,
1187                     pub __unused8: *mut c_void,
1188                 }
1189
1190                 #[repr(C)]
1191                 #[derive(Copy, Clone)] pub struct timeval {
1192                     pub tv_sec: time_t,
1193                     pub tv_usec: suseconds_t,
1194                 }
1195
1196                 #[repr(C)]
1197                 #[derive(Copy, Clone)] pub struct timespec {
1198                     pub tv_sec: time_t,
1199                     pub tv_nsec: c_long,
1200                 }
1201
1202                 pub enum timezone {}
1203
1204                 pub type sighandler_t = size_t;
1205
1206                 #[repr(C)]
1207                 #[derive(Copy, Clone)]
1208                 pub struct rlimit {
1209                     pub rlim_cur: rlim_t,
1210                     pub rlim_max: rlim_t,
1211                 }
1212             }
1213
1214             pub mod bsd43 {
1215                 use types::os::common::posix01::timeval;
1216                 use types::os::arch::c95::c_long;
1217                 #[repr(C)]
1218                 #[derive(Copy, Clone)]
1219                 pub struct rusage {
1220                     pub ru_utime: timeval,
1221                     pub ru_stime: timeval,
1222                     pub ru_maxrss: c_long,
1223                     pub ru_ixrss: c_long,
1224                     pub ru_idrss: c_long,
1225                     pub ru_isrss: c_long,
1226                     pub ru_minflt: c_long,
1227                     pub ru_majflt: c_long,
1228                     pub ru_nswap: c_long,
1229                     pub ru_inblock: c_long,
1230                     pub ru_oublock: c_long,
1231                     pub ru_msgsnd: c_long,
1232                     pub ru_msgrcv: c_long,
1233                     pub ru_nsignals: c_long,
1234                     pub ru_nvcsw: c_long,
1235                     pub ru_nivcsw: c_long
1236                 }
1237             }
1238
1239             pub mod bsd44 {
1240                 use types::common::c95::{c_void};
1241                 use types::os::arch::c95::{c_char, c_int, c_uint};
1242
1243                 pub type socklen_t = u32;
1244                 pub type sa_family_t = u8;
1245                 pub type in_port_t = u16;
1246                 pub type in_addr_t = u32;
1247                 #[repr(C)]
1248                 #[derive(Copy, Clone)] pub struct sockaddr {
1249                     pub sa_len: u8,
1250                     pub sa_family: sa_family_t,
1251                     pub sa_data: [u8; 14],
1252                 }
1253                 #[repr(C)]
1254                 #[derive(Copy)] pub struct sockaddr_storage {
1255                     pub ss_len: u8,
1256                     pub ss_family: sa_family_t,
1257                     pub __ss_pad1: [u8; 6],
1258                     pub __ss_align: i64,
1259                     pub __ss_pad2: [u8; 112],
1260                 }
1261                 impl ::core::clone::Clone for sockaddr_storage {
1262                     fn clone(&self) -> sockaddr_storage { *self }
1263                 }
1264                 #[repr(C)]
1265                 #[derive(Copy, Clone)] pub struct sockaddr_in {
1266                     pub sin_len: u8,
1267                     pub sin_family: sa_family_t,
1268                     pub sin_port: in_port_t,
1269                     pub sin_addr: in_addr,
1270                     pub sin_zero: [u8; 8],
1271                 }
1272                 #[repr(C)]
1273                 #[derive(Copy, Clone)] pub struct in_addr {
1274                     pub s_addr: in_addr_t,
1275                 }
1276                 #[repr(C)]
1277                 #[derive(Copy, Clone)] pub struct sockaddr_in6 {
1278                     pub sin6_len: u8,
1279                     pub sin6_family: sa_family_t,
1280                     pub sin6_port: in_port_t,
1281                     pub sin6_flowinfo: u32,
1282                     pub sin6_addr: in6_addr,
1283                     pub sin6_scope_id: u32,
1284                 }
1285                 #[repr(C)]
1286                 #[derive(Copy, Clone)] pub struct in6_addr {
1287                     pub s6_addr: [u16; 8]
1288                 }
1289                 #[repr(C)]
1290                 #[derive(Copy, Clone)] pub struct ip_mreq {
1291                     pub imr_multiaddr: in_addr,
1292                     pub imr_interface: in_addr,
1293                 }
1294                 #[repr(C)]
1295                 #[derive(Copy, Clone)] pub struct ip6_mreq {
1296                     pub ipv6mr_multiaddr: in6_addr,
1297                     pub ipv6mr_interface: c_uint,
1298                 }
1299                 #[repr(C)]
1300                 #[derive(Copy, Clone)] pub struct addrinfo {
1301                     pub ai_flags: c_int,
1302                     pub ai_family: c_int,
1303                     pub ai_socktype: c_int,
1304                     pub ai_protocol: c_int,
1305                     pub ai_addrlen: socklen_t,
1306                     pub ai_canonname: *mut c_char,
1307                     pub ai_addr: *mut sockaddr,
1308                     pub ai_next: *mut addrinfo,
1309                 }
1310                 #[repr(C)]
1311                 #[derive(Copy)] pub struct sockaddr_un {
1312                     pub sun_len: u8,
1313                     pub sun_family: sa_family_t,
1314                     pub sun_path: [c_char; 104]
1315                 }
1316                 impl ::core::clone::Clone for sockaddr_un {
1317                     fn clone(&self) -> sockaddr_un { *self }
1318                 }
1319                 #[repr(C)]
1320                 #[derive(Copy, Clone)] pub struct ifaddrs {
1321                     pub ifa_next: *mut ifaddrs,
1322                     pub ifa_name: *mut c_char,
1323                     pub ifa_flags: c_uint,
1324                     pub ifa_addr: *mut sockaddr,
1325                     pub ifa_netmask: *mut sockaddr,
1326                     pub ifa_dstaddr: *mut sockaddr,
1327                     pub ifa_data: *mut c_void
1328                 }
1329
1330             }
1331         }
1332
1333         #[cfg(target_arch = "x86_64")]
1334         pub mod arch {
1335             pub mod c95 {
1336                 pub type c_char = i8;
1337                 pub type c_schar = i8;
1338                 pub type c_uchar = u8;
1339                 pub type c_short = i16;
1340                 pub type c_ushort = u16;
1341                 pub type c_int = i32;
1342                 pub type c_uint = u32;
1343                 pub type c_long = i64;
1344                 pub type c_ulong = u64;
1345                 pub type c_float = f32;
1346                 pub type c_double = f64;
1347                 pub type size_t = u64;
1348                 pub type ptrdiff_t = i64;
1349                 pub type clock_t = i32;
1350                 pub type time_t = i64;
1351                 pub type suseconds_t = i64;
1352                 pub type wchar_t = i32;
1353             }
1354             pub mod c99 {
1355                 pub type c_longlong = i64;
1356                 pub type c_ulonglong = u64;
1357                 pub type intptr_t = i64;
1358                 pub type uintptr_t = u64;
1359                 pub type intmax_t = i64;
1360                 pub type uintmax_t = u64;
1361             }
1362             pub mod posix88 {
1363                 pub type off_t = i64;
1364                 pub type dev_t = u32;
1365                 pub type pid_t = i32;
1366                 pub type uid_t = u32;
1367                 pub type gid_t = u32;
1368                 pub type useconds_t = u32;
1369                 pub type mode_t = u16;
1370                 pub type ssize_t = i64;
1371             }
1372             pub mod posix01 {
1373                 use types::common::c95::{c_void};
1374                 use types::common::c99::{uint16_t, uint32_t, int32_t, uint64_t, int64_t};
1375                 use types::os::arch::c95::{c_long, time_t};
1376                 use types::os::arch::posix88::{dev_t, gid_t};
1377                 use types::os::arch::posix88::{mode_t, off_t};
1378                 use types::os::arch::posix88::{uid_t};
1379
1380                 pub type nlink_t = u16;
1381                 pub type blksize_t = uint32_t;
1382                 pub type ino_t = uint64_t;
1383                 pub type blkcnt_t = i64;
1384                 pub type fflags_t = u32;
1385
1386                 #[repr(C)]
1387                 #[derive(Copy, Clone)] pub struct stat {
1388                     pub st_ino: ino_t,
1389                     pub st_nlink: nlink_t,
1390                     pub st_dev: dev_t,
1391                     pub st_mode: mode_t,
1392                     pub st_padding1: uint16_t,
1393                     pub st_uid: uid_t,
1394                     pub st_gid: gid_t,
1395                     pub st_rdev: dev_t,
1396                     pub st_atime: time_t,
1397                     pub st_atime_nsec: c_long,
1398                     pub st_mtime: time_t,
1399                     pub st_mtime_nsec: c_long,
1400                     pub st_ctime: time_t,
1401                     pub st_ctime_nsec: c_long,
1402                     pub st_size: off_t,
1403                     pub st_blocks: blkcnt_t,
1404                     pub st_blksize: blksize_t,
1405                     pub st_flags: fflags_t,
1406                     pub st_gen: uint32_t,
1407                     pub st_lspare: int32_t,
1408                     pub st_qspare1: int64_t,
1409                     pub st_qspare2: int64_t,
1410                 }
1411                 #[repr(C)]
1412                 #[derive(Copy, Clone)] pub struct utimbuf {
1413                     pub actime: time_t,
1414                     pub modtime: time_t,
1415                 }
1416
1417                 pub type pthread_attr_t = *mut c_void;
1418             }
1419             pub mod posix08 {
1420             }
1421             pub mod bsd44 {
1422             }
1423             pub mod extra {
1424             }
1425         }
1426     }
1427
1428     #[cfg(any(target_os = "bitrig", target_os = "netbsd", target_os ="openbsd"))]
1429     pub mod os {
1430         pub mod common {
1431             pub mod posix01 {
1432                 use types::common::c95::{c_void};
1433                 use types::os::arch::c95::{c_char, c_int, size_t,
1434                                                  time_t, suseconds_t, c_long};
1435                 use types::os::arch::c99::{uintptr_t};
1436
1437                 pub type pthread_t = uintptr_t;
1438                 pub type rlim_t = u64;
1439
1440                 #[cfg(target_os = "bitrig")]
1441                 #[repr(C)]
1442                 #[derive(Copy, Clone)] pub struct glob_t {
1443                     pub gl_pathc:  c_int,
1444                     pub gl_matchc: c_int,
1445                     pub gl_offs:   c_int,
1446                     pub gl_flags:  c_int,
1447                     pub gl_pathv:  *mut *mut c_char,
1448                     pub __unused1: *mut c_void,
1449                     pub __unused2: *mut c_void,
1450                     pub __unused3: *mut c_void,
1451                     pub __unused4: *mut c_void,
1452                     pub __unused5: *mut c_void,
1453                     pub __unused6: *mut c_void,
1454                     pub __unused7: *mut c_void,
1455                 }
1456
1457                 #[cfg(target_os = "netbsd")]
1458                 #[repr(C)]
1459                 #[derive(Copy, Clone)] pub struct glob_t {
1460                     pub gl_pathc:  size_t,
1461                     pub gl_matchc: size_t,
1462                     pub gl_offs:   size_t,
1463                     pub gl_flags:  c_int,
1464                     pub gl_pathv:  *mut *mut c_char,
1465                     pub __unused1: *mut c_void,
1466                     pub __unused2: *mut c_void,
1467                     pub __unused3: *mut c_void,
1468                     pub __unused4: *mut c_void,
1469                     pub __unused5: *mut c_void,
1470                     pub __unused6: *mut c_void,
1471                 }
1472
1473                 #[cfg(target_os = "openbsd")]
1474                 #[repr(C)]
1475                 #[derive(Copy, Clone)] pub struct glob_t {
1476                     pub gl_pathc:  c_int,
1477                     pub __unused1: c_int,
1478                     pub gl_offs:   c_int,
1479                     pub __unused2: c_int,
1480                     pub gl_pathv:  *mut *mut c_char,
1481
1482                     pub __unused3: *mut c_void,
1483
1484                     pub __unused4: *mut c_void,
1485                     pub __unused5: *mut c_void,
1486                     pub __unused6: *mut c_void,
1487                     pub __unused7: *mut c_void,
1488                     pub __unused8: *mut c_void,
1489                     pub __unused9: *mut c_void,
1490                 }
1491
1492                 #[repr(C)]
1493                 #[derive(Copy, Clone)] pub struct timeval {
1494                     pub tv_sec: time_t,
1495                     pub tv_usec: suseconds_t,
1496                 }
1497
1498                 #[repr(C)]
1499                 #[derive(Copy, Clone)] pub struct timespec {
1500                     pub tv_sec: time_t,
1501                     pub tv_nsec: c_long,
1502                 }
1503
1504                 pub enum timezone {}
1505
1506                 pub type sighandler_t = size_t;
1507
1508                 #[repr(C)]
1509                 #[derive(Copy, Clone)]
1510                 pub struct rlimit {
1511                     pub rlim_cur: rlim_t,
1512                     pub rlim_max: rlim_t,
1513                 }
1514             }
1515
1516             pub mod bsd43 {
1517                 use types::os::common::posix01::timeval;
1518                 use types::os::arch::c95::c_long;
1519                 #[repr(C)]
1520                 #[derive(Copy, Clone)]
1521                 pub struct rusage {
1522                     pub ru_utime: timeval,
1523                     pub ru_stime: timeval,
1524                     pub ru_maxrss: c_long,
1525                     pub ru_ixrss: c_long,
1526                     pub ru_idrss: c_long,
1527                     pub ru_isrss: c_long,
1528                     pub ru_minflt: c_long,
1529                     pub ru_majflt: c_long,
1530                     pub ru_nswap: c_long,
1531                     pub ru_inblock: c_long,
1532                     pub ru_oublock: c_long,
1533                     pub ru_msgsnd: c_long,
1534                     pub ru_msgrcv: c_long,
1535                     pub ru_nsignals: c_long,
1536                     pub ru_nvcsw: c_long,
1537                     pub ru_nivcsw: c_long
1538                 }
1539             }
1540
1541             pub mod bsd44 {
1542                 use types::common::c95::{c_void};
1543                 use types::os::arch::c95::{c_char, c_int, c_uint};
1544
1545                 pub type socklen_t = u32;
1546                 pub type sa_family_t = u8;
1547                 pub type in_port_t = u16;
1548                 pub type in_addr_t = u32;
1549                 #[repr(C)]
1550                 #[derive(Copy, Clone)] pub struct sockaddr {
1551                     pub sa_len: u8,
1552                     pub sa_family: sa_family_t,
1553                     pub sa_data: [u8; 14],
1554                 }
1555                 #[repr(C)]
1556                 #[derive(Copy)] pub struct sockaddr_storage {
1557                     pub ss_len: u8,
1558                     pub ss_family: sa_family_t,
1559                     pub __ss_pad1: [u8; 6],
1560                     pub __ss_pad2: i64,
1561                     pub __ss_pad3: [u8; 240],
1562                 }
1563                 impl ::core::clone::Clone for sockaddr_storage {
1564                     fn clone(&self) -> sockaddr_storage { *self }
1565                 }
1566                 #[repr(C)]
1567                 #[derive(Copy, Clone)] pub struct sockaddr_in {
1568                     pub sin_len: u8,
1569                     pub sin_family: sa_family_t,
1570                     pub sin_port: in_port_t,
1571                     pub sin_addr: in_addr,
1572                     pub sin_zero: [u8; 8],
1573                 }
1574                 #[repr(C)]
1575                 #[derive(Copy, Clone)] pub struct in_addr {
1576                     pub s_addr: in_addr_t,
1577                 }
1578                 #[repr(C)]
1579                 #[derive(Copy, Clone)] pub struct sockaddr_in6 {
1580                     pub sin6_len: u8,
1581                     pub sin6_family: sa_family_t,
1582                     pub sin6_port: in_port_t,
1583                     pub sin6_flowinfo: u32,
1584                     pub sin6_addr: in6_addr,
1585                     pub sin6_scope_id: u32,
1586                 }
1587                 #[repr(C)]
1588                 #[derive(Copy, Clone)] pub struct in6_addr {
1589                     pub s6_addr: [u16; 8]
1590                 }
1591                 #[repr(C)]
1592                 #[derive(Copy, Clone)] pub struct ip_mreq {
1593                     pub imr_multiaddr: in_addr,
1594                     pub imr_interface: in_addr,
1595                 }
1596                 #[repr(C)]
1597                 #[derive(Copy, Clone)] pub struct ip6_mreq {
1598                     pub ipv6mr_multiaddr: in6_addr,
1599                     pub ipv6mr_interface: c_uint,
1600                 }
1601                 #[cfg(not(target_os = "netbsd"))]
1602                 #[repr(C)]
1603                 #[derive(Copy, Clone)] pub struct addrinfo {
1604                     pub ai_flags: c_int,
1605                     pub ai_family: c_int,
1606                     pub ai_socktype: c_int,
1607                     pub ai_protocol: c_int,
1608                     pub ai_addrlen: socklen_t,
1609                     pub ai_addr: *mut sockaddr,
1610                     pub ai_canonname: *mut c_char,
1611                     pub ai_next: *mut addrinfo,
1612                 }
1613                 #[cfg(target_os = "netbsd")]
1614                 #[repr(C)]
1615                 #[derive(Copy, Clone)] pub struct addrinfo {
1616                     pub ai_flags: c_int,
1617                     pub ai_family: c_int,
1618                     pub ai_socktype: c_int,
1619                     pub ai_protocol: c_int,
1620                     pub ai_addrlen: socklen_t,
1621                     pub ai_canonname: *mut c_char,
1622                     pub ai_addr: *mut sockaddr,
1623                     pub ai_next: *mut addrinfo,
1624                 }
1625                 #[repr(C)]
1626                 #[derive(Copy)] pub struct sockaddr_un {
1627                     pub sun_len: u8,
1628                     pub sun_family: sa_family_t,
1629                     pub sun_path: [c_char; 104]
1630                 }
1631                 impl ::core::clone::Clone for sockaddr_un {
1632                     fn clone(&self) -> sockaddr_un { *self }
1633                 }
1634                 #[repr(C)]
1635                 #[derive(Copy, Clone)] pub struct ifaddrs {
1636                     pub ifa_next: *mut ifaddrs,
1637                     pub ifa_name: *mut c_char,
1638                     pub ifa_flags: c_uint,
1639                     pub ifa_addr: *mut sockaddr,
1640                     pub ifa_netmask: *mut sockaddr,
1641                     pub ifa_dstaddr: *mut sockaddr,
1642                     pub ifa_data: *mut c_void
1643                 }
1644             }
1645         }
1646
1647         #[cfg(target_arch = "x86_64")]
1648         pub mod arch {
1649             pub mod c95 {
1650                 pub type c_char = i8;
1651                 pub type c_schar = i8;
1652                 pub type c_uchar = u8;
1653                 pub type c_short = i16;
1654                 pub type c_ushort = u16;
1655                 pub type c_int = i32;
1656                 pub type c_uint = u32;
1657                 pub type c_long = i64;
1658                 pub type c_ulong = u64;
1659                 pub type c_float = f32;
1660                 pub type c_double = f64;
1661                 pub type size_t = u64;
1662                 pub type ptrdiff_t = i64;
1663                 pub type clock_t = i64;
1664                 pub type time_t = i64;
1665                 pub type suseconds_t = i64;
1666                 pub type wchar_t = i32;
1667             }
1668             pub mod c99 {
1669                 pub type c_longlong = i64;
1670                 pub type c_ulonglong = u64;
1671                 pub type intptr_t = i64;
1672                 pub type uintptr_t = u64;
1673                 pub type intmax_t = i64;
1674                 pub type uintmax_t = u64;
1675             }
1676             pub mod posix88 {
1677                 use types::os::arch::c95::{c_long};
1678                 pub type off_t = i64;
1679                 pub type dev_t = i32;
1680                 pub type pid_t = i32;
1681                 pub type uid_t = u32;
1682                 pub type gid_t = u32;
1683                 pub type useconds_t = u32;
1684                 pub type mode_t = u32;
1685                 pub type ssize_t = c_long;
1686             }
1687             pub mod posix01 {
1688                 use types::common::c95::{c_void};
1689                 use types::common::c99::{uint32_t, uint64_t};
1690                 use types::os::arch::c95::{c_long, time_t};
1691                 use types::os::arch::posix88::{dev_t, gid_t};
1692                 use types::os::arch::posix88::{mode_t, off_t};
1693                 use types::os::arch::posix88::{uid_t};
1694                 #[cfg(target_os = "netbsd")]
1695                 use types::os::arch::c95::{c_int, c_uint};
1696
1697                 pub type nlink_t = uint32_t;
1698                 pub type blksize_t = uint32_t;
1699                 pub type ino_t = uint64_t;
1700                 pub type blkcnt_t = i64;
1701                 pub type fflags_t = u32; // type not declared, but struct stat have u_int32_t
1702
1703                 #[cfg(not(target_os = "netbsd"))]
1704                 #[repr(C)]
1705                 #[derive(Copy, Clone)] pub struct stat {
1706                     pub st_mode: mode_t,
1707                     pub st_dev: dev_t,
1708                     pub st_ino: ino_t,
1709                     pub st_nlink: nlink_t,
1710                     pub st_uid: uid_t,
1711                     pub st_gid: gid_t,
1712                     pub st_rdev: dev_t,
1713                     pub st_atime: time_t,
1714                     pub st_atime_nsec: c_long,
1715                     pub st_mtime: time_t,
1716                     pub st_mtime_nsec: c_long,
1717                     pub st_ctime: time_t,
1718                     pub st_ctime_nsec: c_long,
1719                     pub st_size: off_t,
1720                     pub st_blocks: blkcnt_t,
1721                     pub st_blksize: blksize_t,
1722                     pub st_flags: fflags_t,
1723                     pub st_gen: uint32_t,
1724                     pub st_birthtime: time_t,
1725                     pub st_birthtime_nsec: c_long,
1726                 }
1727                 #[cfg(target_os = "netbsd")]
1728                 #[repr(C)]
1729                 #[derive(Copy, Clone)] pub struct stat {
1730                     pub st_mode: mode_t,
1731                     pub st_dev: dev_t,
1732                     pub st_ino: ino_t,
1733                     pub st_nlink: nlink_t,
1734                     pub st_uid: uid_t,
1735                     pub st_gid: gid_t,
1736                     pub st_rdev: dev_t,
1737                     pub st_atime: time_t,
1738                     pub st_atime_nsec: c_long,
1739                     pub st_mtime: time_t,
1740                     pub st_mtime_nsec: c_long,
1741                     pub st_ctime: time_t,
1742                     pub st_ctime_nsec: c_long,
1743                     pub st_birthtime: time_t,
1744                     pub st_birthtime_nsec: c_long,
1745                     pub st_size: off_t,
1746                     pub st_blocks: blkcnt_t,
1747                     pub st_blksize: blksize_t,
1748                     pub st_flags: fflags_t,
1749                     pub st_gen: uint32_t,
1750                     st_spare: [uint32_t; 2],
1751                 }
1752
1753                 #[repr(C)]
1754                 #[derive(Copy, Clone)] pub struct utimbuf {
1755                     pub actime: time_t,
1756                     pub modtime: time_t,
1757                 }
1758
1759                 #[cfg(not(target_os = "netbsd"))]
1760                 pub type pthread_attr_t = *mut c_void;
1761                 #[cfg(target_os = "netbsd")]
1762                 #[repr(C)]
1763                 #[derive(Copy, Clone)] pub struct pthread_attr_t {
1764                     pta_magic: c_uint,
1765                     pta_flags: c_int,
1766                     pta_private: *mut c_void,
1767                 }
1768             }
1769             pub mod posix08 {
1770             }
1771             pub mod bsd44 {
1772             }
1773             pub mod extra {
1774             }
1775         }
1776     }
1777
1778     #[cfg(target_os = "windows")]
1779     pub mod os {
1780         pub mod common {
1781             pub mod posix01 {
1782                 use types::os::arch::c95::{c_short, time_t, c_long};
1783                 use types::os::arch::extra::{int64, time64_t};
1784                 use types::os::arch::posix88::{dev_t, ino_t};
1785
1786                 // pub Note: this is the struct called stat64 in Windows. Not stat,
1787                 // nor stati64.
1788                 #[repr(C)]
1789                 #[derive(Copy, Clone)] pub struct stat {
1790                     pub st_dev: dev_t,
1791                     pub st_ino: ino_t,
1792                     pub st_mode: u16,
1793                     pub st_nlink: c_short,
1794                     pub st_uid: c_short,
1795                     pub st_gid: c_short,
1796                     pub st_rdev: dev_t,
1797                     pub st_size: int64,
1798                     pub st_atime: time64_t,
1799                     pub st_mtime: time64_t,
1800                     pub st_ctime: time64_t,
1801                 }
1802
1803                 // note that this is called utimbuf64 in Windows
1804                 #[repr(C)]
1805                 #[derive(Copy, Clone)] pub struct utimbuf {
1806                     pub actime: time64_t,
1807                     pub modtime: time64_t,
1808                 }
1809
1810                 #[repr(C)]
1811                 #[derive(Copy, Clone)] pub struct timeval {
1812                     pub tv_sec: c_long,
1813                     pub tv_usec: c_long,
1814                 }
1815
1816                 #[repr(C)]
1817                 #[derive(Copy, Clone)] pub struct timespec {
1818                     pub tv_sec: time_t,
1819                     pub tv_nsec: c_long,
1820                 }
1821
1822                 pub enum timezone {}
1823             }
1824
1825             pub mod bsd44 {
1826                 use types::os::arch::c95::{c_char, c_int, c_uint, size_t};
1827                 use types::os::arch::c99::uintptr_t;
1828
1829                 pub type SOCKET = uintptr_t;
1830                 pub type socklen_t = c_int;
1831                 pub type sa_family_t = u16;
1832                 pub type in_port_t = u16;
1833                 pub type in_addr_t = u32;
1834                 #[repr(C)]
1835                 #[derive(Copy, Clone)] pub struct sockaddr {
1836                     pub sa_family: sa_family_t,
1837                     pub sa_data: [u8; 14],
1838                 }
1839                 #[repr(C)]
1840                 #[derive(Copy)] pub struct sockaddr_storage {
1841                     pub ss_family: sa_family_t,
1842                     pub __ss_pad1: [u8; 6],
1843                     pub __ss_align: i64,
1844                     pub __ss_pad2: [u8; 112],
1845                 }
1846                 impl ::core::clone::Clone for sockaddr_storage {
1847                     fn clone(&self) -> sockaddr_storage { *self }
1848                 }
1849                 #[repr(C)]
1850                 #[derive(Copy, Clone)] pub struct sockaddr_in {
1851                     pub sin_family: sa_family_t,
1852                     pub sin_port: in_port_t,
1853                     pub sin_addr: in_addr,
1854                     pub sin_zero: [u8; 8],
1855                 }
1856                 #[repr(C)]
1857                 #[derive(Copy, Clone)] pub struct in_addr {
1858                     pub s_addr: in_addr_t,
1859                 }
1860                 #[repr(C)]
1861                 #[derive(Copy, Clone)] pub struct sockaddr_in6 {
1862                     pub sin6_family: sa_family_t,
1863                     pub sin6_port: in_port_t,
1864                     pub sin6_flowinfo: u32,
1865                     pub sin6_addr: in6_addr,
1866                     pub sin6_scope_id: u32,
1867                 }
1868                 #[repr(C)]
1869                 #[derive(Copy, Clone)] pub struct in6_addr {
1870                     pub s6_addr: [u16; 8]
1871                 }
1872                 #[repr(C)]
1873                 #[derive(Copy, Clone)] pub struct ip_mreq {
1874                     pub imr_multiaddr: in_addr,
1875                     pub imr_interface: in_addr,
1876                 }
1877                 #[repr(C)]
1878                 #[derive(Copy, Clone)] pub struct ip6_mreq {
1879                     pub ipv6mr_multiaddr: in6_addr,
1880                     pub ipv6mr_interface: c_uint,
1881                 }
1882                 #[repr(C)]
1883                 #[derive(Copy, Clone)] pub struct addrinfo {
1884                     pub ai_flags: c_int,
1885                     pub ai_family: c_int,
1886                     pub ai_socktype: c_int,
1887                     pub ai_protocol: c_int,
1888                     pub ai_addrlen: size_t,
1889                     pub ai_canonname: *mut c_char,
1890                     pub ai_addr: *mut sockaddr,
1891                     pub ai_next: *mut addrinfo,
1892                 }
1893                 #[repr(C)]
1894                 #[derive(Copy)] pub struct sockaddr_un {
1895                     pub sun_family: sa_family_t,
1896                     pub sun_path: [c_char; 108]
1897                 }
1898                 impl ::core::clone::Clone for sockaddr_un {
1899                     fn clone(&self) -> sockaddr_un { *self }
1900                 }
1901             }
1902         }
1903
1904         pub mod arch {
1905             pub mod c95 {
1906                 pub type c_char = i8;
1907                 pub type c_schar = i8;
1908                 pub type c_uchar = u8;
1909                 pub type c_short = i16;
1910                 pub type c_ushort = u16;
1911                 pub type c_int = i32;
1912                 pub type c_uint = u32;
1913                 pub type c_long = i32;
1914                 pub type c_ulong = u32;
1915                 pub type c_float = f32;
1916                 pub type c_double = f64;
1917
1918                 #[cfg(target_arch = "x86")]
1919                 pub type size_t = u32;
1920                 #[cfg(target_arch = "x86_64")]
1921                 pub type size_t = u64;
1922
1923                 #[cfg(target_arch = "x86")]
1924                 pub type ptrdiff_t = i32;
1925                 #[cfg(target_arch = "x86_64")]
1926                 pub type ptrdiff_t = i64;
1927
1928                 pub type clock_t = i32;
1929
1930                 #[cfg(target_arch = "x86")]
1931                 pub type time_t = i32;
1932                 #[cfg(target_arch = "x86_64")]
1933                 pub type time_t = i64;
1934
1935                 #[cfg(target_arch = "x86")]
1936                 pub type suseconds_t = i32;
1937                 #[cfg(target_arch = "x86_64")]
1938                 pub type suseconds_t = i64;
1939
1940                 pub type wchar_t = u16;
1941             }
1942
1943             pub mod c99 {
1944                 pub type c_longlong = i64;
1945                 pub type c_ulonglong = u64;
1946
1947                 #[cfg(target_arch = "x86")]
1948                 pub type intptr_t = i32;
1949                 #[cfg(target_arch = "x86_64")]
1950                 pub type intptr_t = i64;
1951
1952                 #[cfg(target_arch = "x86")]
1953                 pub type uintptr_t = u32;
1954                 #[cfg(target_arch = "x86_64")]
1955                 pub type uintptr_t = u64;
1956
1957                 pub type intmax_t = i64;
1958                 pub type uintmax_t = u64;
1959             }
1960
1961             pub mod posix88 {
1962                 pub type off_t = i32;
1963                 pub type dev_t = u32;
1964                 pub type ino_t = u16;
1965
1966                 pub type pid_t = u32;
1967
1968                 pub type useconds_t = u32;
1969                 pub type mode_t = u16;
1970
1971                 #[cfg(target_arch = "x86")]
1972                 pub type ssize_t = i32;
1973                 #[cfg(target_arch = "x86_64")]
1974                 pub type ssize_t = i64;
1975             }
1976
1977             pub mod posix01 {
1978             }
1979             pub mod posix08 {
1980             }
1981             pub mod bsd44 {
1982             }
1983             pub mod extra {
1984                 use consts::os::extra::{MAX_PROTOCOL_CHAIN,
1985                                               WSAPROTOCOL_LEN};
1986                 use types::common::c95::c_void;
1987                 use types::os::arch::c95::{c_char, c_int, c_uint, size_t};
1988                 use types::os::arch::c95::{c_long, c_ulong};
1989                 use types::os::arch::c95::{wchar_t};
1990                 use types::os::arch::c99::{c_ulonglong, c_longlong, uintptr_t};
1991
1992                 pub type BOOL = c_int;
1993                 pub type BYTE = u8;
1994                 pub type BOOLEAN = BYTE;
1995                 pub type CCHAR = c_char;
1996                 pub type CHAR = c_char;
1997
1998                 pub type DWORD = c_ulong;
1999                 pub type DWORDLONG = c_ulonglong;
2000
2001                 pub type HANDLE = LPVOID;
2002                 pub type HINSTANCE = HANDLE;
2003                 pub type HMODULE = HINSTANCE;
2004
2005                 pub type LONG = c_long;
2006                 pub type PLONG = *mut c_long;
2007
2008                 #[cfg(target_arch = "x86")]
2009                 pub type LONG_PTR = c_long;
2010                 #[cfg(target_arch = "x86_64")]
2011                 pub type LONG_PTR = i64;
2012
2013                 pub type LARGE_INTEGER = c_longlong;
2014                 pub type PLARGE_INTEGER = *mut c_longlong;
2015
2016                 pub type LPCWSTR = *const WCHAR;
2017                 pub type LPCSTR = *const CHAR;
2018
2019                 pub type LPWSTR = *mut WCHAR;
2020                 pub type LPSTR = *mut CHAR;
2021
2022                 pub type LPWCH = *mut WCHAR;
2023                 pub type LPCH = *mut CHAR;
2024
2025                 #[repr(C)]
2026                 #[derive(Copy, Clone)] pub struct SECURITY_ATTRIBUTES {
2027                     pub nLength: DWORD,
2028                     pub lpSecurityDescriptor: LPVOID,
2029                     pub bInheritHandle: BOOL,
2030                 }
2031                 pub type LPSECURITY_ATTRIBUTES = *mut SECURITY_ATTRIBUTES;
2032
2033                 pub type LPVOID = *mut c_void;
2034                 pub type LPCVOID = *const c_void;
2035                 pub type LPBYTE = *mut BYTE;
2036                 pub type LPWORD = *mut WORD;
2037                 pub type LPDWORD = *mut DWORD;
2038                 pub type LPHANDLE = *mut HANDLE;
2039
2040                 pub type LRESULT = LONG_PTR;
2041                 pub type PBOOL = *mut BOOL;
2042                 pub type WCHAR = wchar_t;
2043                 pub type WORD = u16;
2044                 pub type SIZE_T = size_t;
2045
2046                 pub type time64_t = i64;
2047                 pub type int64 = i64;
2048
2049                 #[repr(C)]
2050                 #[derive(Copy, Clone)] pub struct STARTUPINFO {
2051                     pub cb: DWORD,
2052                     pub lpReserved: LPWSTR,
2053                     pub lpDesktop: LPWSTR,
2054                     pub lpTitle: LPWSTR,
2055                     pub dwX: DWORD,
2056                     pub dwY: DWORD,
2057                     pub dwXSize: DWORD,
2058                     pub dwYSize: DWORD,
2059                     pub dwXCountChars: DWORD,
2060                     pub dwYCountCharts: DWORD,
2061                     pub dwFillAttribute: DWORD,
2062                     pub dwFlags: DWORD,
2063                     pub wShowWindow: WORD,
2064                     pub cbReserved2: WORD,
2065                     pub lpReserved2: LPBYTE,
2066                     pub hStdInput: HANDLE,
2067                     pub hStdOutput: HANDLE,
2068                     pub hStdError: HANDLE,
2069                 }
2070                 pub type LPSTARTUPINFO = *mut STARTUPINFO;
2071
2072                 #[repr(C)]
2073                 #[derive(Copy, Clone)] pub struct PROCESS_INFORMATION {
2074                     pub hProcess: HANDLE,
2075                     pub hThread: HANDLE,
2076                     pub dwProcessId: DWORD,
2077                     pub dwThreadId: DWORD,
2078                 }
2079                 pub type LPPROCESS_INFORMATION = *mut PROCESS_INFORMATION;
2080
2081                 #[repr(C)]
2082                 #[derive(Copy, Clone)] pub struct SYSTEM_INFO {
2083                     pub wProcessorArchitecture: WORD,
2084                     pub wReserved: WORD,
2085                     pub dwPageSize: DWORD,
2086                     pub lpMinimumApplicationAddress: LPVOID,
2087                     pub lpMaximumApplicationAddress: LPVOID,
2088                     pub dwActiveProcessorMask: uintptr_t,
2089                     pub dwNumberOfProcessors: DWORD,
2090                     pub dwProcessorType: DWORD,
2091                     pub dwAllocationGranularity: DWORD,
2092                     pub wProcessorLevel: WORD,
2093                     pub wProcessorRevision: WORD,
2094                 }
2095                 pub type LPSYSTEM_INFO = *mut SYSTEM_INFO;
2096
2097                 #[repr(C)]
2098                 #[derive(Copy, Clone)] pub struct MEMORY_BASIC_INFORMATION {
2099                     pub BaseAddress: LPVOID,
2100                     pub AllocationBase: LPVOID,
2101                     pub AllocationProtect: DWORD,
2102                     pub RegionSize: SIZE_T,
2103                     pub State: DWORD,
2104                     pub Protect: DWORD,
2105                     pub Type: DWORD,
2106                 }
2107                 pub type LPMEMORY_BASIC_INFORMATION = *mut MEMORY_BASIC_INFORMATION;
2108
2109                 #[repr(C)]
2110                 #[derive(Copy, Clone)] pub struct OVERLAPPED {
2111                     pub Internal: *mut c_ulong,
2112                     pub InternalHigh: *mut c_ulong,
2113                     pub Offset: DWORD,
2114                     pub OffsetHigh: DWORD,
2115                     pub hEvent: HANDLE,
2116                 }
2117
2118                 pub type LPOVERLAPPED = *mut OVERLAPPED;
2119
2120                 #[repr(C)]
2121                 #[derive(Copy, Clone)] pub struct FILETIME {
2122                     pub dwLowDateTime: DWORD,
2123                     pub dwHighDateTime: DWORD,
2124                 }
2125
2126                 pub type LPFILETIME = *mut FILETIME;
2127
2128                 #[repr(C)]
2129                 #[derive(Copy, Clone)] pub struct GUID {
2130                     pub Data1: DWORD,
2131                     pub Data2: WORD,
2132                     pub Data3: WORD,
2133                     pub Data4: [BYTE; 8],
2134                 }
2135
2136                 #[repr(C)]
2137                 #[derive(Copy, Clone)] pub struct WSAPROTOCOLCHAIN {
2138                     pub ChainLen: c_int,
2139                     pub ChainEntries: [DWORD; MAX_PROTOCOL_CHAIN as usize],
2140                 }
2141
2142                 pub type LPWSAPROTOCOLCHAIN = *mut WSAPROTOCOLCHAIN;
2143
2144                 #[repr(C)]
2145                 #[derive(Copy)] pub struct WSAPROTOCOL_INFO {
2146                     pub dwServiceFlags1: DWORD,
2147                     pub dwServiceFlags2: DWORD,
2148                     pub dwServiceFlags3: DWORD,
2149                     pub dwServiceFlags4: DWORD,
2150                     pub dwProviderFlags: DWORD,
2151                     pub ProviderId: GUID,
2152                     pub dwCatalogEntryId: DWORD,
2153                     pub ProtocolChain: WSAPROTOCOLCHAIN,
2154                     pub iVersion: c_int,
2155                     pub iAddressFamily: c_int,
2156                     pub iMaxSockAddr: c_int,
2157                     pub iMinSockAddr: c_int,
2158                     pub iSocketType: c_int,
2159                     pub iProtocol: c_int,
2160                     pub iProtocolMaxOffset: c_int,
2161                     pub iNetworkByteOrder: c_int,
2162                     pub iSecurityScheme: c_int,
2163                     pub dwMessageSize: DWORD,
2164                     pub dwProviderReserved: DWORD,
2165                     pub szProtocol: [u8; WSAPROTOCOL_LEN as usize + 1],
2166                 }
2167                 impl ::core::clone::Clone for WSAPROTOCOL_INFO {
2168                     fn clone(&self) -> WSAPROTOCOL_INFO { *self }
2169                 }
2170
2171                 pub type LPWSAPROTOCOL_INFO = *mut WSAPROTOCOL_INFO;
2172
2173                 pub type GROUP = c_uint;
2174
2175                 #[repr(C)]
2176                 #[derive(Copy)] pub struct WIN32_FIND_DATAW {
2177                     pub dwFileAttributes: DWORD,
2178                     pub ftCreationTime: FILETIME,
2179                     pub ftLastAccessTime: FILETIME,
2180                     pub ftLastWriteTime: FILETIME,
2181                     pub nFileSizeHigh: DWORD,
2182                     pub nFileSizeLow: DWORD,
2183                     pub dwReserved0: DWORD,
2184                     pub dwReserved1: DWORD,
2185                     pub cFileName: [wchar_t; 260], // #define MAX_PATH 260
2186                     pub cAlternateFileName: [wchar_t; 14],
2187                 }
2188                 impl ::core::clone::Clone for WIN32_FIND_DATAW {
2189                     fn clone(&self) -> WIN32_FIND_DATAW { *self }
2190                 }
2191
2192                 pub type LPWIN32_FIND_DATAW = *mut WIN32_FIND_DATAW;
2193             }
2194         }
2195     }
2196
2197     #[cfg(any(target_os = "macos", target_os = "ios"))]
2198     pub mod os {
2199         pub mod common {
2200             pub mod posix01 {
2201                 use types::common::c95::c_void;
2202                 use types::os::arch::c95::{c_char, c_int, size_t, time_t};
2203                 use types::os::arch::c95::{suseconds_t, c_long};
2204                 use types::os::arch::c99::{uintptr_t};
2205
2206                 pub type pthread_t = uintptr_t;
2207                 pub type rlim_t = u64;
2208
2209                 #[repr(C)]
2210                 #[derive(Copy, Clone)] pub struct glob_t {
2211                     pub gl_pathc:  size_t,
2212                     pub __unused1: c_int,
2213                     pub gl_offs:   size_t,
2214                     pub __unused2: c_int,
2215                     pub gl_pathv:  *mut *mut c_char,
2216
2217                     pub __unused3: *mut c_void,
2218
2219                     pub __unused4: *mut c_void,
2220                     pub __unused5: *mut c_void,
2221                     pub __unused6: *mut c_void,
2222                     pub __unused7: *mut c_void,
2223                     pub __unused8: *mut c_void,
2224                 }
2225
2226                 #[repr(C)]
2227                 #[derive(Copy, Clone)] pub struct timeval {
2228                     pub tv_sec: time_t,
2229                     pub tv_usec: suseconds_t,
2230                 }
2231
2232                 #[repr(C)]
2233                 #[derive(Copy, Clone)] pub struct timespec {
2234                     pub tv_sec: time_t,
2235                     pub tv_nsec: c_long,
2236                 }
2237
2238                 pub enum timezone {}
2239
2240                 pub type sighandler_t = size_t;
2241
2242                 #[repr(C)]
2243                 #[derive(Copy, Clone)]
2244                 pub struct rlimit {
2245                     pub rlim_cur: rlim_t,
2246                     pub rlim_max: rlim_t,
2247                 }
2248             }
2249
2250             pub mod bsd43 {
2251                 use types::os::common::posix01::timeval;
2252                 use types::os::arch::c95::c_long;
2253                 #[repr(C)]
2254                 #[derive(Copy, Clone)]
2255                 pub struct rusage {
2256                     pub ru_utime: timeval,
2257                     pub ru_stime: timeval,
2258                     pub ru_maxrss: c_long,
2259                     pub ru_ixrss: c_long,
2260                     pub ru_idrss: c_long,
2261                     pub ru_isrss: c_long,
2262                     pub ru_minflt: c_long,
2263                     pub ru_majflt: c_long,
2264                     pub ru_nswap: c_long,
2265                     pub ru_inblock: c_long,
2266                     pub ru_oublock: c_long,
2267                     pub ru_msgsnd: c_long,
2268                     pub ru_msgrcv: c_long,
2269                     pub ru_nsignals: c_long,
2270                     pub ru_nvcsw: c_long,
2271                     pub ru_nivcsw: c_long
2272                 }
2273             }
2274
2275             pub mod bsd44 {
2276                 use types::common::c95::{c_void};
2277                 use types::os::arch::c95::{c_char, c_int, c_uint};
2278
2279                 pub type socklen_t = u32;
2280                 pub type sa_family_t = u8;
2281                 pub type in_port_t = u16;
2282                 pub type in_addr_t = u32;
2283                 #[repr(C)]
2284                 #[derive(Copy, Clone)] pub struct sockaddr {
2285                     pub sa_len: u8,
2286                     pub sa_family: sa_family_t,
2287                     pub sa_data: [u8; 14],
2288                 }
2289
2290                 #[repr(C)]
2291                 #[derive(Copy)] pub struct sockaddr_storage {
2292                     pub ss_len: u8,
2293                     pub ss_family: sa_family_t,
2294                     pub __ss_pad1: [u8; 6],
2295                     pub __ss_align: i64,
2296                     pub __ss_pad2: [u8; 112],
2297                 }
2298                 impl ::core::clone::Clone for sockaddr_storage {
2299                     fn clone(&self) -> sockaddr_storage { *self }
2300                 }
2301
2302                 #[repr(C)]
2303                 #[derive(Copy, Clone)] pub struct sockaddr_in {
2304                     pub sin_len: u8,
2305                     pub sin_family: sa_family_t,
2306                     pub sin_port: in_port_t,
2307                     pub sin_addr: in_addr,
2308                     pub sin_zero: [u8; 8],
2309                 }
2310
2311                 #[repr(C)]
2312                 #[derive(Copy, Clone)] pub struct in_addr {
2313                     pub s_addr: in_addr_t,
2314                 }
2315
2316                 #[repr(C)]
2317                 #[derive(Copy, Clone)] pub struct sockaddr_in6 {
2318                     pub sin6_len: u8,
2319                     pub sin6_family: sa_family_t,
2320                     pub sin6_port: in_port_t,
2321                     pub sin6_flowinfo: u32,
2322                     pub sin6_addr: in6_addr,
2323                     pub sin6_scope_id: u32,
2324                 }
2325
2326                 #[repr(C)]
2327                 #[derive(Copy, Clone)] pub struct in6_addr {
2328                     pub s6_addr: [u16; 8]
2329                 }
2330
2331                 #[repr(C)]
2332                 #[derive(Copy, Clone)] pub struct ip_mreq {
2333                     pub imr_multiaddr: in_addr,
2334                     pub imr_interface: in_addr,
2335                 }
2336
2337                 #[repr(C)]
2338                 #[derive(Copy, Clone)] pub struct ip6_mreq {
2339                     pub ipv6mr_multiaddr: in6_addr,
2340                     pub ipv6mr_interface: c_uint,
2341                 }
2342
2343                 #[repr(C)]
2344                 #[derive(Copy, Clone)] pub struct addrinfo {
2345                     pub ai_flags: c_int,
2346                     pub ai_family: c_int,
2347                     pub ai_socktype: c_int,
2348                     pub ai_protocol: c_int,
2349                     pub ai_addrlen: socklen_t,
2350                     pub ai_canonname: *mut c_char,
2351                     pub ai_addr: *mut sockaddr,
2352                     pub ai_next: *mut addrinfo,
2353                 }
2354
2355                 #[repr(C)]
2356                 #[derive(Copy)] pub struct sockaddr_un {
2357                     pub sun_len: u8,
2358                     pub sun_family: sa_family_t,
2359                     pub sun_path: [c_char; 104]
2360                 }
2361                 impl ::core::clone::Clone for sockaddr_un {
2362                     fn clone(&self) -> sockaddr_un { *self }
2363                 }
2364
2365                 #[repr(C)]
2366                 #[derive(Copy, Clone)] pub struct ifaddrs {
2367                     pub ifa_next: *mut ifaddrs,
2368                     pub ifa_name: *mut c_char,
2369                     pub ifa_flags: c_uint,
2370                     pub ifa_addr: *mut sockaddr,
2371                     pub ifa_netmask: *mut sockaddr,
2372                     pub ifa_dstaddr: *mut sockaddr,
2373                     pub ifa_data: *mut c_void
2374                 }
2375             }
2376         }
2377
2378         #[cfg(any(target_arch = "arm", target_arch = "x86"))]
2379         pub mod arch {
2380             pub mod c95 {
2381                 pub type c_char = i8;
2382                 pub type c_schar = i8;
2383                 pub type c_uchar = u8;
2384                 pub type c_short = i16;
2385                 pub type c_ushort = u16;
2386                 pub type c_int = i32;
2387                 pub type c_uint = u32;
2388                 pub type c_long = i32;
2389                 pub type c_ulong = u32;
2390                 pub type c_float = f32;
2391                 pub type c_double = f64;
2392                 pub type size_t = u32;
2393                 pub type ptrdiff_t = i32;
2394                 pub type clock_t = c_ulong;
2395                 pub type time_t = c_long;
2396                 pub type suseconds_t = i32;
2397                 pub type wchar_t = i32;
2398             }
2399             pub mod c99 {
2400                 pub type c_longlong = i64;
2401                 pub type c_ulonglong = u64;
2402                 pub type intptr_t = i32;
2403                 pub type uintptr_t = u32;
2404                 pub type intmax_t = i64;
2405                 pub type uintmax_t = u64;
2406             }
2407             pub mod posix88 {
2408                 use types::os::arch::c95::c_long;
2409
2410                 pub type off_t = i64;
2411                 pub type dev_t = i32;
2412                 pub type ino_t = u64;
2413                 pub type pid_t = i32;
2414                 pub type uid_t = u32;
2415                 pub type gid_t = u32;
2416                 pub type useconds_t = u32;
2417                 pub type mode_t = u16;
2418                 pub type ssize_t = c_long;
2419             }
2420             pub mod posix01 {
2421                 use types::common::c99::{int32_t, int64_t, uint32_t};
2422                 use types::os::arch::c95::{c_char, c_long, time_t};
2423                 use types::os::arch::posix88::{dev_t, gid_t, ino_t,
2424                                                      mode_t, off_t, uid_t};
2425
2426                 pub type nlink_t = u16;
2427                 pub type blksize_t = i32;
2428                 pub type blkcnt_t = i64;
2429
2430                 #[repr(C)]
2431                 #[derive(Copy, Clone)] pub struct stat {
2432                     pub st_dev: dev_t,
2433                     pub st_mode: mode_t,
2434                     pub st_nlink: nlink_t,
2435                     pub st_ino: ino_t,
2436                     pub st_uid: uid_t,
2437                     pub st_gid: gid_t,
2438                     pub st_rdev: dev_t,
2439                     pub st_atime: time_t,
2440                     pub st_atime_nsec: c_long,
2441                     pub st_mtime: time_t,
2442                     pub st_mtime_nsec: c_long,
2443                     pub st_ctime: time_t,
2444                     pub st_ctime_nsec: c_long,
2445                     pub st_birthtime: time_t,
2446                     pub st_birthtime_nsec: c_long,
2447                     pub st_size: off_t,
2448                     pub st_blocks: blkcnt_t,
2449                     pub st_blksize: blksize_t,
2450                     pub st_flags: uint32_t,
2451                     pub st_gen: uint32_t,
2452                     pub st_lspare: int32_t,
2453                     pub st_qspare: [int64_t; 2],
2454                 }
2455
2456                 #[repr(C)]
2457                 #[derive(Copy, Clone)] pub struct utimbuf {
2458                     pub actime: time_t,
2459                     pub modtime: time_t,
2460                 }
2461
2462                 #[repr(C)]
2463                 #[derive(Copy)] pub struct pthread_attr_t {
2464                     pub __sig: c_long,
2465                     pub __opaque: [c_char; 36]
2466                 }
2467                 impl ::core::clone::Clone for pthread_attr_t {
2468                     fn clone(&self) -> pthread_attr_t { *self }
2469                 }
2470             }
2471             pub mod posix08 {
2472             }
2473             pub mod bsd44 {
2474             }
2475             pub mod extra {
2476                 #[repr(C)]
2477                 #[derive(Copy, Clone)] pub struct mach_timebase_info {
2478                     pub numer: u32,
2479                     pub denom: u32,
2480                 }
2481
2482                 pub type mach_timebase_info_data_t = mach_timebase_info;
2483             }
2484         }
2485
2486         #[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))]
2487         pub mod arch {
2488             pub mod c95 {
2489                 pub type c_char = i8;
2490                 pub type c_schar = i8;
2491                 pub type c_uchar = u8;
2492                 pub type c_short = i16;
2493                 pub type c_ushort = u16;
2494                 pub type c_int = i32;
2495                 pub type c_uint = u32;
2496                 pub type c_long = i64;
2497                 pub type c_ulong = u64;
2498                 pub type c_float = f32;
2499                 pub type c_double = f64;
2500                 pub type size_t = u64;
2501                 pub type ptrdiff_t = i64;
2502                 pub type clock_t = c_ulong;
2503                 pub type time_t = c_long;
2504                 pub type suseconds_t = i32;
2505                 pub type wchar_t = i32;
2506             }
2507             pub mod c99 {
2508                 pub type c_longlong = i64;
2509                 pub type c_ulonglong = u64;
2510                 pub type intptr_t = i64;
2511                 pub type uintptr_t = u64;
2512                 pub type intmax_t = i64;
2513                 pub type uintmax_t = u64;
2514             }
2515             pub mod posix88 {
2516                 use types::os::arch::c95::c_long;
2517
2518                 pub type off_t = i64;
2519                 pub type dev_t = i32;
2520                 pub type ino_t = u64;
2521                 pub type pid_t = i32;
2522                 pub type uid_t = u32;
2523                 pub type gid_t = u32;
2524                 pub type useconds_t = u32;
2525                 pub type mode_t = u16;
2526                 pub type ssize_t = c_long;
2527             }
2528             pub mod posix01 {
2529                 use types::common::c99::{int32_t, int64_t};
2530                 use types::common::c99::{uint32_t};
2531                 use types::os::arch::c95::{c_char, c_long, time_t};
2532                 use types::os::arch::posix88::{dev_t, gid_t, ino_t};
2533                 use types::os::arch::posix88::{mode_t, off_t, uid_t};
2534
2535                 pub type nlink_t = u16;
2536                 pub type blksize_t = i32;
2537                 pub type blkcnt_t = i64;
2538
2539                 #[repr(C)]
2540                 #[derive(Copy, Clone)] pub struct stat {
2541                     pub st_dev: dev_t,
2542                     pub st_mode: mode_t,
2543                     pub st_nlink: nlink_t,
2544                     pub st_ino: ino_t,
2545                     pub st_uid: uid_t,
2546                     pub st_gid: gid_t,
2547                     pub st_rdev: dev_t,
2548                     pub st_atime: time_t,
2549                     pub st_atime_nsec: c_long,
2550                     pub st_mtime: time_t,
2551                     pub st_mtime_nsec: c_long,
2552                     pub st_ctime: time_t,
2553                     pub st_ctime_nsec: c_long,
2554                     pub st_birthtime: time_t,
2555                     pub st_birthtime_nsec: c_long,
2556                     pub st_size: off_t,
2557                     pub st_blocks: blkcnt_t,
2558                     pub st_blksize: blksize_t,
2559                     pub st_flags: uint32_t,
2560                     pub st_gen: uint32_t,
2561                     pub st_lspare: int32_t,
2562                     pub st_qspare: [int64_t; 2],
2563                 }
2564
2565                 #[repr(C)]
2566                 #[derive(Copy, Clone)] pub struct utimbuf {
2567                     pub actime: time_t,
2568                     pub modtime: time_t,
2569                 }
2570
2571                 #[repr(C)]
2572                 #[derive(Copy)] pub struct pthread_attr_t {
2573                     pub __sig: c_long,
2574                     pub __opaque: [c_char; 56]
2575                 }
2576                 impl ::core::clone::Clone for pthread_attr_t {
2577                     fn clone(&self) -> pthread_attr_t { *self }
2578                 }
2579             }
2580             pub mod posix08 {
2581             }
2582             pub mod bsd44 {
2583             }
2584             pub mod extra {
2585                 #[repr(C)]
2586                 #[derive(Copy, Clone)] pub struct mach_timebase_info {
2587                     pub numer: u32,
2588                     pub denom: u32,
2589                 }
2590
2591                 pub type mach_timebase_info_data_t = mach_timebase_info;
2592             }
2593         }
2594     }
2595 }
2596
2597 pub mod consts {
2598     // Consts tend to vary per OS so we pull their definitions out
2599     // into this module.
2600
2601     #[cfg(target_os = "windows")]
2602     pub mod os {
2603         pub mod c95 {
2604             use types::os::arch::c95::{c_int, c_uint};
2605
2606             pub const EXIT_FAILURE : c_int = 1;
2607             pub const EXIT_SUCCESS : c_int = 0;
2608             pub const RAND_MAX : c_int = 32767;
2609             pub const EOF : c_int = -1;
2610             pub const SEEK_SET : c_int = 0;
2611             pub const SEEK_CUR : c_int = 1;
2612             pub const SEEK_END : c_int = 2;
2613             pub const _IOFBF : c_int = 0;
2614             pub const _IONBF : c_int = 4;
2615             pub const _IOLBF : c_int = 64;
2616             pub const BUFSIZ : c_uint = 512;
2617             pub const FOPEN_MAX : c_uint = 20;
2618             pub const FILENAME_MAX : c_uint = 260;
2619             pub const L_tmpnam : c_uint = 16;
2620             pub const TMP_MAX : c_uint = 32767;
2621
2622             pub const WSAEINTR: c_int = 10004;
2623             pub const WSAEBADF: c_int = 10009;
2624             pub const WSAEACCES: c_int = 10013;
2625             pub const WSAEFAULT: c_int = 10014;
2626             pub const WSAEINVAL: c_int = 10022;
2627             pub const WSAEMFILE: c_int = 10024;
2628             pub const WSAEWOULDBLOCK: c_int = 10035;
2629             pub const WSAEINPROGRESS: c_int = 10036;
2630             pub const WSAEALREADY: c_int = 10037;
2631             pub const WSAENOTSOCK: c_int = 10038;
2632             pub const WSAEDESTADDRREQ: c_int = 10039;
2633             pub const WSAEMSGSIZE: c_int = 10040;
2634             pub const WSAEPROTOTYPE: c_int = 10041;
2635             pub const WSAENOPROTOOPT: c_int = 10042;
2636             pub const WSAEPROTONOSUPPORT: c_int = 10043;
2637             pub const WSAESOCKTNOSUPPORT: c_int = 10044;
2638             pub const WSAEOPNOTSUPP: c_int = 10045;
2639             pub const WSAEPFNOSUPPORT: c_int = 10046;
2640             pub const WSAEAFNOSUPPORT: c_int = 10047;
2641             pub const WSAEADDRINUSE: c_int = 10048;
2642             pub const WSAEADDRNOTAVAIL: c_int = 10049;
2643             pub const WSAENETDOWN: c_int = 10050;
2644             pub const WSAENETUNREACH: c_int = 10051;
2645             pub const WSAENETRESET: c_int = 10052;
2646             pub const WSAECONNABORTED: c_int = 10053;
2647             pub const WSAECONNRESET: c_int = 10054;
2648             pub const WSAENOBUFS: c_int = 10055;
2649             pub const WSAEISCONN: c_int = 10056;
2650             pub const WSAENOTCONN: c_int = 10057;
2651             pub const WSAESHUTDOWN: c_int = 10058;
2652             pub const WSAETOOMANYREFS: c_int = 10059;
2653             pub const WSAETIMEDOUT: c_int = 10060;
2654             pub const WSAECONNREFUSED: c_int = 10061;
2655             pub const WSAELOOP: c_int = 10062;
2656             pub const WSAENAMETOOLONG: c_int = 10063;
2657             pub const WSAEHOSTDOWN: c_int = 10064;
2658             pub const WSAEHOSTUNREACH: c_int = 10065;
2659             pub const WSAENOTEMPTY: c_int = 10066;
2660             pub const WSAEPROCLIM: c_int = 10067;
2661             pub const WSAEUSERS: c_int = 10068;
2662             pub const WSAEDQUOT: c_int = 10069;
2663             pub const WSAESTALE: c_int = 10070;
2664             pub const WSAEREMOTE: c_int = 10071;
2665             pub const WSASYSNOTREADY: c_int = 10091;
2666             pub const WSAVERNOTSUPPORTED: c_int = 10092;
2667             pub const WSANOTINITIALISED: c_int = 10093;
2668             pub const WSAEDISCON: c_int = 10101;
2669             pub const WSAENOMORE: c_int = 10102;
2670             pub const WSAECANCELLED: c_int = 10103;
2671             pub const WSAEINVALIDPROCTABLE: c_int = 10104;
2672             pub const WSAEINVALIDPROVIDER: c_int = 10105;
2673             pub const WSAEPROVIDERFAILEDINIT: c_int = 10106;
2674         }
2675         pub mod c99 {
2676         }
2677         pub mod posix88 {
2678             use types::os::arch::c95::c_int;
2679             use types::os::arch::posix88::mode_t;
2680
2681             pub const O_RDONLY : c_int = 0;
2682             pub const O_WRONLY : c_int = 1;
2683             pub const O_RDWR : c_int = 2;
2684             pub const O_APPEND : c_int = 8;
2685             pub const O_CREAT : c_int = 256;
2686             pub const O_EXCL : c_int = 1024;
2687             pub const O_TRUNC : c_int = 512;
2688             pub const S_IFIFO : c_int = 4096;
2689             pub const S_IFCHR : c_int = 8192;
2690             pub const S_IFBLK : c_int = 12288;
2691             pub const S_IFDIR : c_int = 16384;
2692             pub const S_IFREG : c_int = 32768;
2693             pub const S_IFLNK : c_int = 40960;
2694             pub const S_IFSOCK : mode_t = 49152;
2695             pub const S_IFMT : c_int = 61440;
2696             pub const S_IEXEC : c_int = 64;
2697             pub const S_IWRITE : c_int = 128;
2698             pub const S_IREAD : c_int = 256;
2699             pub const S_IRWXU : c_int = 448;
2700             pub const S_IXUSR : c_int = 64;
2701             pub const S_IWUSR : c_int = 128;
2702             pub const S_IRUSR : c_int = 256;
2703             pub const S_IRWXG : mode_t = 56;
2704             pub const S_IXGRP : mode_t = 8;
2705             pub const S_IWGRP : mode_t = 16;
2706             pub const S_IRGRP : mode_t = 32;
2707             pub const S_IRWXO : mode_t = 7;
2708             pub const S_IXOTH : mode_t = 1;
2709             pub const S_IWOTH : mode_t = 2;
2710             pub const S_IROTH : mode_t = 4;
2711             pub const F_OK : c_int = 0;
2712             pub const R_OK : c_int = 4;
2713             pub const W_OK : c_int = 2;
2714             pub const X_OK : c_int = 1;
2715             pub const STDIN_FILENO : c_int = 0;
2716             pub const STDOUT_FILENO : c_int = 1;
2717             pub const STDERR_FILENO : c_int = 2;
2718         }
2719         pub mod posix01 {
2720         }
2721         pub mod posix08 {
2722         }
2723         pub mod bsd44 {
2724             use types::os::arch::c95::c_int;
2725
2726             pub const AF_INET: c_int = 2;
2727             pub const AF_INET6: c_int = 23;
2728             pub const SOCK_STREAM: c_int = 1;
2729             pub const SOCK_DGRAM: c_int = 2;
2730             pub const SOCK_RAW: c_int = 3;
2731             pub const IPPROTO_TCP: c_int = 6;
2732             pub const IPPROTO_IP: c_int = 0;
2733             pub const IPPROTO_IPV6: c_int = 41;
2734             pub const IP_MULTICAST_TTL: c_int = 10;
2735             pub const IP_MULTICAST_LOOP: c_int = 11;
2736             pub const IP_ADD_MEMBERSHIP: c_int = 12;
2737             pub const IP_DROP_MEMBERSHIP: c_int = 13;
2738             pub const IPV6_ADD_MEMBERSHIP: c_int = 5;
2739             pub const IPV6_DROP_MEMBERSHIP: c_int = 6;
2740             pub const IP_TTL: c_int = 4;
2741             pub const IP_HDRINCL: c_int = 2;
2742
2743             pub const TCP_NODELAY: c_int = 0x0001;
2744             pub const SOL_SOCKET: c_int = 0xffff;
2745
2746             pub const SO_DEBUG: c_int = 0x0001;
2747             pub const SO_ACCEPTCONN: c_int = 0x0002;
2748             pub const SO_REUSEADDR: c_int = 0x0004;
2749             pub const SO_KEEPALIVE: c_int = 0x0008;
2750             pub const SO_DONTROUTE: c_int = 0x0010;
2751             pub const SO_BROADCAST: c_int = 0x0020;
2752             pub const SO_USELOOPBACK: c_int = 0x0040;
2753             pub const SO_LINGER: c_int = 0x0080;
2754             pub const SO_OOBINLINE: c_int = 0x0100;
2755             pub const SO_SNDBUF: c_int = 0x1001;
2756             pub const SO_RCVBUF: c_int = 0x1002;
2757             pub const SO_SNDLOWAT: c_int = 0x1003;
2758             pub const SO_RCVLOWAT: c_int = 0x1004;
2759             pub const SO_SNDTIMEO: c_int = 0x1005;
2760             pub const SO_RCVTIMEO: c_int = 0x1006;
2761             pub const SO_ERROR: c_int = 0x1007;
2762             pub const SO_TYPE: c_int = 0x1008;
2763
2764             pub const IFF_LOOPBACK: c_int = 4;
2765
2766             pub const SHUT_RD: c_int = 0;
2767             pub const SHUT_WR: c_int = 1;
2768             pub const SHUT_RDWR: c_int = 2;
2769         }
2770         pub mod extra {
2771             use types::os::common::bsd44::SOCKET;
2772             use types::os::arch::c95::{c_int, c_long};
2773             use types::os::arch::extra::{WORD, DWORD, BOOL, HANDLE};
2774
2775             pub const TRUE : BOOL = 1;
2776             pub const FALSE : BOOL = 0;
2777
2778             pub const O_TEXT : c_int = 16384;
2779             pub const O_BINARY : c_int = 32768;
2780             pub const O_NOINHERIT: c_int = 128;
2781
2782             pub const ERROR_SUCCESS : c_int = 0;
2783             pub const ERROR_INVALID_FUNCTION: c_int = 1;
2784             pub const ERROR_FILE_NOT_FOUND: c_int = 2;
2785             pub const ERROR_ACCESS_DENIED: c_int = 5;
2786             pub const ERROR_INVALID_HANDLE : c_int = 6;
2787             pub const ERROR_BROKEN_PIPE: c_int = 109;
2788             pub const ERROR_DISK_FULL : c_int = 112;
2789             pub const ERROR_CALL_NOT_IMPLEMENTED : c_int = 120;
2790             pub const ERROR_INSUFFICIENT_BUFFER : c_int = 122;
2791             pub const ERROR_INVALID_NAME : c_int = 123;
2792             pub const ERROR_ALREADY_EXISTS : c_int = 183;
2793             pub const ERROR_PIPE_BUSY: c_int = 231;
2794             pub const ERROR_NO_DATA: c_int = 232;
2795             pub const ERROR_INVALID_ADDRESS : c_int = 487;
2796             pub const ERROR_PIPE_CONNECTED: c_int = 535;
2797             pub const ERROR_NOTHING_TO_TERMINATE: c_int = 758;
2798             pub const ERROR_OPERATION_ABORTED: c_int = 995;
2799             pub const ERROR_IO_PENDING: c_int = 997;
2800             pub const ERROR_FILE_INVALID : c_int = 1006;
2801             pub const ERROR_NOT_FOUND: c_int = 1168;
2802             pub const INVALID_HANDLE_VALUE: HANDLE = !0 as HANDLE;
2803
2804             pub const DELETE : DWORD = 0x00010000;
2805             pub const READ_CONTROL : DWORD = 0x00020000;
2806             pub const SYNCHRONIZE : DWORD = 0x00100000;
2807             pub const WRITE_DAC : DWORD = 0x00040000;
2808             pub const WRITE_OWNER : DWORD = 0x00080000;
2809
2810             pub const PROCESS_CREATE_PROCESS : DWORD = 0x0080;
2811             pub const PROCESS_CREATE_THREAD : DWORD = 0x0002;
2812             pub const PROCESS_DUP_HANDLE : DWORD = 0x0040;
2813             pub const PROCESS_QUERY_INFORMATION : DWORD = 0x0400;
2814             pub const PROCESS_QUERY_LIMITED_INFORMATION : DWORD = 0x1000;
2815             pub const PROCESS_SET_INFORMATION : DWORD = 0x0200;
2816             pub const PROCESS_SET_QUOTA : DWORD = 0x0100;
2817             pub const PROCESS_SUSPEND_RESUME : DWORD = 0x0800;
2818             pub const PROCESS_TERMINATE : DWORD = 0x0001;
2819             pub const PROCESS_VM_OPERATION : DWORD = 0x0008;
2820             pub const PROCESS_VM_READ : DWORD = 0x0010;
2821             pub const PROCESS_VM_WRITE : DWORD = 0x0020;
2822
2823             pub const STARTF_FORCEONFEEDBACK : DWORD = 0x00000040;
2824             pub const STARTF_FORCEOFFFEEDBACK : DWORD = 0x00000080;
2825             pub const STARTF_PREVENTPINNING : DWORD = 0x00002000;
2826             pub const STARTF_RUNFULLSCREEN : DWORD = 0x00000020;
2827             pub const STARTF_TITLEISAPPID : DWORD = 0x00001000;
2828             pub const STARTF_TITLEISLINKNAME : DWORD = 0x00000800;
2829             pub const STARTF_USECOUNTCHARS : DWORD = 0x00000008;
2830             pub const STARTF_USEFILLATTRIBUTE : DWORD = 0x00000010;
2831             pub const STARTF_USEHOTKEY : DWORD = 0x00000200;
2832             pub const STARTF_USEPOSITION : DWORD = 0x00000004;
2833             pub const STARTF_USESHOWWINDOW : DWORD = 0x00000001;
2834             pub const STARTF_USESIZE : DWORD = 0x00000002;
2835             pub const STARTF_USESTDHANDLES : DWORD = 0x00000100;
2836
2837             pub const WAIT_ABANDONED : DWORD = 0x00000080;
2838             pub const WAIT_OBJECT_0 : DWORD = 0x00000000;
2839             pub const WAIT_TIMEOUT : DWORD = 0x00000102;
2840             pub const WAIT_FAILED : DWORD = !0;
2841
2842             pub const DUPLICATE_CLOSE_SOURCE : DWORD = 0x00000001;
2843             pub const DUPLICATE_SAME_ACCESS : DWORD = 0x00000002;
2844
2845             pub const INFINITE : DWORD = !0;
2846             pub const STILL_ACTIVE : DWORD = 259;
2847
2848             pub const MEM_COMMIT : DWORD = 0x00001000;
2849             pub const MEM_RESERVE : DWORD = 0x00002000;
2850             pub const MEM_DECOMMIT : DWORD = 0x00004000;
2851             pub const MEM_RELEASE : DWORD = 0x00008000;
2852             pub const MEM_RESET : DWORD = 0x00080000;
2853             pub const MEM_RESET_UNDO : DWORD = 0x1000000;
2854             pub const MEM_LARGE_PAGES : DWORD = 0x20000000;
2855             pub const MEM_PHYSICAL : DWORD = 0x00400000;
2856             pub const MEM_TOP_DOWN : DWORD = 0x00100000;
2857             pub const MEM_WRITE_WATCH : DWORD = 0x00200000;
2858
2859             pub const PAGE_EXECUTE : DWORD = 0x10;
2860             pub const PAGE_EXECUTE_READ : DWORD = 0x20;
2861             pub const PAGE_EXECUTE_READWRITE : DWORD = 0x40;
2862             pub const PAGE_EXECUTE_WRITECOPY : DWORD = 0x80;
2863             pub const PAGE_NOACCESS : DWORD = 0x01;
2864             pub const PAGE_READONLY : DWORD = 0x02;
2865             pub const PAGE_READWRITE : DWORD = 0x04;
2866             pub const PAGE_WRITECOPY : DWORD = 0x08;
2867             pub const PAGE_GUARD : DWORD = 0x100;
2868             pub const PAGE_NOCACHE : DWORD = 0x200;
2869             pub const PAGE_WRITECOMBINE : DWORD = 0x400;
2870
2871             pub const SEC_COMMIT : DWORD = 0x8000000;
2872             pub const SEC_IMAGE : DWORD = 0x1000000;
2873             pub const SEC_IMAGE_NO_EXECUTE : DWORD = 0x11000000;
2874             pub const SEC_LARGE_PAGES : DWORD = 0x80000000;
2875             pub const SEC_NOCACHE : DWORD = 0x10000000;
2876             pub const SEC_RESERVE : DWORD = 0x4000000;
2877             pub const SEC_WRITECOMBINE : DWORD = 0x40000000;
2878
2879             pub const FILE_MAP_ALL_ACCESS : DWORD = 0xf001f;
2880             pub const FILE_MAP_READ : DWORD = 0x4;
2881             pub const FILE_MAP_WRITE : DWORD = 0x2;
2882             pub const FILE_MAP_COPY : DWORD = 0x1;
2883             pub const FILE_MAP_EXECUTE : DWORD = 0x20;
2884
2885             pub const PROCESSOR_ARCHITECTURE_INTEL : WORD = 0;
2886             pub const PROCESSOR_ARCHITECTURE_ARM : WORD = 5;
2887             pub const PROCESSOR_ARCHITECTURE_IA64 : WORD = 6;
2888             pub const PROCESSOR_ARCHITECTURE_AMD64 : WORD = 9;
2889             pub const PROCESSOR_ARCHITECTURE_UNKNOWN : WORD = 0xffff;
2890
2891             pub const MOVEFILE_COPY_ALLOWED: DWORD = 2;
2892             pub const MOVEFILE_CREATE_HARDLINK: DWORD = 16;
2893             pub const MOVEFILE_DELAY_UNTIL_REBOOT: DWORD = 4;
2894             pub const MOVEFILE_FAIL_IF_NOT_TRACKABLE: DWORD = 32;
2895             pub const MOVEFILE_REPLACE_EXISTING: DWORD = 1;
2896             pub const MOVEFILE_WRITE_THROUGH: DWORD = 8;
2897
2898             pub const SYMBOLIC_LINK_FLAG_DIRECTORY: DWORD = 1;
2899
2900             pub const FILE_SHARE_DELETE: DWORD = 0x4;
2901             pub const FILE_SHARE_READ: DWORD = 0x1;
2902             pub const FILE_SHARE_WRITE: DWORD = 0x2;
2903
2904             pub const CREATE_ALWAYS: DWORD = 2;
2905             pub const CREATE_NEW: DWORD = 1;
2906             pub const OPEN_ALWAYS: DWORD = 4;
2907             pub const OPEN_EXISTING: DWORD = 3;
2908             pub const TRUNCATE_EXISTING: DWORD = 5;
2909
2910             pub const FILE_APPEND_DATA: DWORD = 0x00000004;
2911             pub const FILE_READ_DATA: DWORD = 0x00000001;
2912             pub const FILE_WRITE_DATA: DWORD = 0x00000002;
2913
2914             pub const FILE_ATTRIBUTE_ARCHIVE: DWORD = 0x20;
2915             pub const FILE_ATTRIBUTE_COMPRESSED: DWORD = 0x800;
2916             pub const FILE_ATTRIBUTE_DEVICE: DWORD = 0x40;
2917             pub const FILE_ATTRIBUTE_DIRECTORY: DWORD = 0x10;
2918             pub const FILE_ATTRIBUTE_ENCRYPTED: DWORD = 0x4000;
2919             pub const FILE_ATTRIBUTE_HIDDEN: DWORD = 0x2;
2920             pub const FILE_ATTRIBUTE_INTEGRITY_STREAM: DWORD = 0x8000;
2921             pub const FILE_ATTRIBUTE_NORMAL: DWORD = 0x80;
2922             pub const FILE_ATTRIBUTE_NOT_CONTENT_INDEXED: DWORD = 0x2000;
2923             pub const FILE_ATTRIBUTE_NO_SCRUB_DATA: DWORD = 0x20000;
2924             pub const FILE_ATTRIBUTE_OFFLINE: DWORD = 0x1000;
2925             pub const FILE_ATTRIBUTE_READONLY: DWORD = 0x1;
2926             pub const FILE_ATTRIBUTE_REPARSE_POINT: DWORD = 0x400;
2927             pub const FILE_ATTRIBUTE_SPARSE_FILE: DWORD = 0x200;
2928             pub const FILE_ATTRIBUTE_SYSTEM: DWORD = 0x4;
2929             pub const FILE_ATTRIBUTE_TEMPORARY: DWORD = 0x100;
2930             pub const FILE_ATTRIBUTE_VIRTUAL: DWORD = 0x10000;
2931
2932             pub const FILE_FLAG_BACKUP_SEMANTICS: DWORD = 0x02000000;
2933             pub const FILE_FLAG_DELETE_ON_CLOSE: DWORD = 0x04000000;
2934             pub const FILE_FLAG_NO_BUFFERING: DWORD = 0x20000000;
2935             pub const FILE_FLAG_OPEN_NO_RECALL: DWORD = 0x00100000;
2936             pub const FILE_FLAG_OPEN_REPARSE_POINT: DWORD = 0x00200000;
2937             pub const FILE_FLAG_OVERLAPPED: DWORD = 0x40000000;
2938             pub const FILE_FLAG_POSIX_SEMANTICS: DWORD = 0x0100000;
2939             pub const FILE_FLAG_RANDOM_ACCESS: DWORD = 0x10000000;
2940             pub const FILE_FLAG_SESSION_AWARE: DWORD = 0x00800000;
2941             pub const FILE_FLAG_SEQUENTIAL_SCAN: DWORD = 0x08000000;
2942             pub const FILE_FLAG_WRITE_THROUGH: DWORD = 0x80000000;
2943             pub const FILE_FLAG_FIRST_PIPE_INSTANCE: DWORD = 0x00080000;
2944
2945             pub const FILE_NAME_NORMALIZED: DWORD = 0x0;
2946             pub const FILE_NAME_OPENED: DWORD = 0x8;
2947
2948             pub const VOLUME_NAME_DOS: DWORD = 0x0;
2949             pub const VOLUME_NAME_GUID: DWORD = 0x1;
2950             pub const VOLUME_NAME_NONE: DWORD = 0x4;
2951             pub const VOLUME_NAME_NT: DWORD = 0x2;
2952
2953             pub const GENERIC_READ: DWORD = 0x80000000;
2954             pub const GENERIC_WRITE: DWORD = 0x40000000;
2955             pub const GENERIC_EXECUTE: DWORD = 0x20000000;
2956             pub const GENERIC_ALL: DWORD = 0x10000000;
2957             pub const FILE_WRITE_ATTRIBUTES: DWORD = 0x00000100;
2958             pub const FILE_READ_ATTRIBUTES: DWORD = 0x00000080;
2959
2960             pub const STANDARD_RIGHTS_READ: DWORD = 0x20000;
2961             pub const STANDARD_RIGHTS_WRITE: DWORD = 0x20000;
2962             pub const FILE_WRITE_EA: DWORD = 0x00000010;
2963             pub const FILE_READ_EA: DWORD = 0x00000008;
2964             pub const FILE_GENERIC_READ: DWORD =
2965                 STANDARD_RIGHTS_READ | FILE_READ_DATA |
2966                 FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE;
2967             pub const FILE_GENERIC_WRITE: DWORD =
2968                 STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA |
2969                 FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA |
2970                 SYNCHRONIZE;
2971
2972             pub const FILE_BEGIN: DWORD = 0;
2973             pub const FILE_CURRENT: DWORD = 1;
2974             pub const FILE_END: DWORD = 2;
2975
2976             pub const MAX_PROTOCOL_CHAIN: DWORD = 7;
2977             pub const WSAPROTOCOL_LEN: DWORD = 255;
2978             pub const INVALID_SOCKET: SOCKET = !0;
2979
2980             pub const DETACHED_PROCESS: DWORD = 0x00000008;
2981             pub const CREATE_NEW_PROCESS_GROUP: DWORD = 0x00000200;
2982             pub const CREATE_UNICODE_ENVIRONMENT: DWORD = 0x00000400;
2983
2984             pub const PIPE_ACCESS_DUPLEX: DWORD = 0x00000003;
2985             pub const PIPE_ACCESS_INBOUND: DWORD = 0x00000001;
2986             pub const PIPE_ACCESS_OUTBOUND: DWORD = 0x00000002;
2987             pub const PIPE_TYPE_BYTE: DWORD = 0x00000000;
2988             pub const PIPE_TYPE_MESSAGE: DWORD = 0x00000004;
2989             pub const PIPE_READMODE_BYTE: DWORD = 0x00000000;
2990             pub const PIPE_READMODE_MESSAGE: DWORD = 0x00000002;
2991             pub const PIPE_WAIT: DWORD = 0x00000000;
2992             pub const PIPE_NOWAIT: DWORD = 0x00000001;
2993             pub const PIPE_ACCEPT_REMOTE_CLIENTS: DWORD = 0x00000000;
2994             pub const PIPE_REJECT_REMOTE_CLIENTS: DWORD = 0x00000008;
2995             pub const PIPE_UNLIMITED_INSTANCES: DWORD = 255;
2996
2997             pub const IPPROTO_RAW: c_int = 255;
2998
2999             pub const FIONBIO: c_long = -0x7FFB9982;
3000         }
3001         pub mod sysconf {
3002         }
3003     }
3004
3005
3006     #[cfg(any(target_os = "linux", target_os = "android", target_os = "nacl"))]
3007     pub mod os {
3008         pub mod c95 {
3009             use types::os::arch::c95::{c_int, c_uint};
3010
3011             pub const EXIT_FAILURE : c_int = 1;
3012             pub const EXIT_SUCCESS : c_int = 0;
3013             pub const RAND_MAX : c_int = 2147483647;
3014             pub const EOF : c_int = -1;
3015             pub const SEEK_SET : c_int = 0;
3016             pub const SEEK_CUR : c_int = 1;
3017             pub const SEEK_END : c_int = 2;
3018             pub const _IOFBF : c_int = 0;
3019             pub const _IONBF : c_int = 2;
3020             pub const _IOLBF : c_int = 1;
3021             pub const BUFSIZ : c_uint = 8192;
3022             pub const FOPEN_MAX : c_uint = 16;
3023             pub const FILENAME_MAX : c_uint = 4096;
3024             pub const L_tmpnam : c_uint = 20;
3025             pub const TMP_MAX : c_uint = 238328;
3026         }
3027         pub mod c99 {
3028         }
3029         #[cfg(any(target_arch = "x86",
3030                   target_arch = "x86_64",
3031                   target_arch = "arm",
3032                   target_arch = "aarch64",
3033                   target_arch = "le32",
3034                   target_arch = "powerpc"))]
3035         pub mod posix88 {
3036             use types::os::arch::c95::c_int;
3037             use types::common::c95::c_void;
3038             use types::os::arch::posix88::mode_t;
3039
3040             pub const O_RDONLY : c_int = 0;
3041             pub const O_WRONLY : c_int = 1;
3042             pub const O_RDWR : c_int = 2;
3043             pub const O_APPEND : c_int = 1024;
3044             pub const O_CREAT : c_int = 64;
3045             pub const O_EXCL : c_int = 128;
3046             pub const O_NOCTTY : c_int = 256;
3047             pub const O_TRUNC : c_int = 512;
3048             pub const S_IFIFO : mode_t = 4096;
3049             pub const S_IFCHR : mode_t = 8192;
3050             pub const S_IFBLK : mode_t = 24576;
3051             pub const S_IFDIR : mode_t = 16384;
3052             pub const S_IFREG : mode_t = 32768;
3053             pub const S_IFLNK : mode_t = 40960;
3054             pub const S_IFSOCK : mode_t = 49152;
3055             pub const S_IFMT : mode_t = 61440;
3056             pub const S_IEXEC : mode_t = 64;
3057             pub const S_IWRITE : mode_t = 128;
3058             pub const S_IREAD : mode_t = 256;
3059             pub const S_IRWXU : mode_t = 448;
3060             pub const S_IXUSR : mode_t = 64;
3061             pub const S_IWUSR : mode_t = 128;
3062             pub const S_IRUSR : mode_t = 256;
3063             pub const S_IRWXG : mode_t = 56;
3064             pub const S_IXGRP : mode_t = 8;
3065             pub const S_IWGRP : mode_t = 16;
3066             pub const S_IRGRP : mode_t = 32;
3067             pub const S_IRWXO : mode_t = 7;
3068             pub const S_IXOTH : mode_t = 1;
3069             pub const S_IWOTH : mode_t = 2;
3070             pub const S_IROTH : mode_t = 4;
3071             pub const F_OK : c_int = 0;
3072             pub const R_OK : c_int = 4;
3073             pub const W_OK : c_int = 2;
3074             pub const X_OK : c_int = 1;
3075             pub const STDIN_FILENO : c_int = 0;
3076             pub const STDOUT_FILENO : c_int = 1;
3077             pub const STDERR_FILENO : c_int = 2;
3078             pub const F_LOCK : c_int = 1;
3079             pub const F_TEST : c_int = 3;
3080             pub const F_TLOCK : c_int = 2;
3081             pub const F_ULOCK : c_int = 0;
3082             pub const SIGHUP : c_int = 1;
3083             pub const SIGINT : c_int = 2;
3084             pub const SIGQUIT : c_int = 3;
3085             pub const SIGILL : c_int = 4;
3086             pub const SIGABRT : c_int = 6;
3087             pub const SIGFPE : c_int = 8;
3088             pub const SIGKILL : c_int = 9;
3089             pub const SIGSEGV : c_int = 11;
3090             pub const SIGPIPE : c_int = 13;
3091             pub const SIGALRM : c_int = 14;
3092             pub const SIGTERM : c_int = 15;
3093
3094             pub const PROT_NONE : c_int = 0;
3095             pub const PROT_READ : c_int = 1;
3096             pub const PROT_WRITE : c_int = 2;
3097             pub const PROT_EXEC : c_int = 4;
3098
3099             pub const MAP_FILE : c_int = 0x0000;
3100             pub const MAP_SHARED : c_int = 0x0001;
3101             pub const MAP_PRIVATE : c_int = 0x0002;
3102             pub const MAP_FIXED : c_int = 0x0010;
3103             pub const MAP_ANON : c_int = 0x0020;
3104
3105             pub const MAP_FAILED : *mut c_void = !0 as *mut c_void;
3106
3107             pub const MCL_CURRENT : c_int = 0x0001;
3108             pub const MCL_FUTURE : c_int = 0x0002;
3109
3110             pub const MS_ASYNC : c_int = 0x0001;
3111             pub const MS_INVALIDATE : c_int = 0x0002;
3112             pub const MS_SYNC : c_int = 0x0004;
3113
3114             pub const EPERM : c_int = 1;
3115             pub const ENOENT : c_int = 2;
3116             pub const ESRCH : c_int = 3;
3117             pub const EINTR : c_int = 4;
3118             pub const EIO : c_int = 5;
3119             pub const ENXIO : c_int = 6;
3120             pub const E2BIG : c_int = 7;
3121             pub const ENOEXEC : c_int = 8;
3122             pub const EBADF : c_int = 9;
3123             pub const ECHILD : c_int = 10;
3124             pub const EAGAIN : c_int = 11;
3125             pub const ENOMEM : c_int = 12;
3126             pub const EACCES : c_int = 13;
3127             pub const EFAULT : c_int = 14;
3128             pub const ENOTBLK : c_int = 15;
3129             pub const EBUSY : c_int = 16;
3130             pub const EEXIST : c_int = 17;
3131             pub const EXDEV : c_int = 18;
3132             pub const ENODEV : c_int = 19;
3133             pub const ENOTDIR : c_int = 20;
3134             pub const EISDIR : c_int = 21;
3135             pub const EINVAL : c_int = 22;
3136             pub const ENFILE : c_int = 23;
3137             pub const EMFILE : c_int = 24;
3138             pub const ENOTTY : c_int = 25;
3139             pub const ETXTBSY : c_int = 26;
3140             pub const EFBIG : c_int = 27;
3141             pub const ENOSPC : c_int = 28;
3142             pub const ESPIPE : c_int = 29;
3143             pub const EROFS : c_int = 30;
3144             pub const EMLINK : c_int = 31;
3145             pub const EPIPE : c_int = 32;
3146             pub const EDOM : c_int = 33;
3147             pub const ERANGE : c_int = 34;
3148
3149             pub const EDEADLK: c_int = 35;
3150             pub const ENAMETOOLONG: c_int = 36;
3151             pub const ENOLCK: c_int = 37;
3152             pub const ENOSYS: c_int = 38;
3153             pub const ENOTEMPTY: c_int = 39;
3154             pub const ELOOP: c_int = 40;
3155             pub const EWOULDBLOCK: c_int = EAGAIN;
3156             pub const ENOMSG: c_int = 42;
3157             pub const EIDRM: c_int = 43;
3158             pub const ECHRNG: c_int = 44;
3159             pub const EL2NSYNC: c_int = 45;
3160             pub const EL3HLT: c_int = 46;
3161             pub const EL3RST: c_int = 47;
3162             pub const ELNRNG: c_int = 48;
3163             pub const EUNATCH: c_int = 49;
3164             pub const ENOCSI: c_int = 50;
3165             pub const EL2HLT: c_int = 51;
3166             pub const EBADE: c_int = 52;
3167             pub const EBADR: c_int = 53;
3168             pub const EXFULL: c_int = 54;
3169             pub const ENOANO: c_int = 55;
3170             pub const EBADRQC: c_int = 56;
3171             pub const EBADSLT: c_int = 57;
3172
3173             pub const EDEADLOCK: c_int = EDEADLK;
3174
3175             pub const EBFONT: c_int = 59;
3176             pub const ENOSTR: c_int = 60;
3177             pub const ENODATA: c_int = 61;
3178             pub const ETIME: c_int = 62;
3179             pub const ENOSR: c_int = 63;
3180             pub const ENONET: c_int = 64;
3181             pub const ENOPKG: c_int = 65;
3182             pub const EREMOTE: c_int = 66;
3183             pub const ENOLINK: c_int = 67;
3184             pub const EADV: c_int = 68;
3185             pub const ESRMNT: c_int = 69;
3186             pub const ECOMM: c_int = 70;
3187             pub const EPROTO: c_int = 71;
3188             pub const EMULTIHOP: c_int = 72;
3189             pub const EDOTDOT: c_int = 73;
3190             pub const EBADMSG: c_int = 74;
3191             pub const EOVERFLOW: c_int = 75;
3192             pub const ENOTUNIQ: c_int = 76;
3193             pub const EBADFD: c_int = 77;
3194             pub const EREMCHG: c_int = 78;
3195             pub const ELIBACC: c_int = 79;
3196             pub const ELIBBAD: c_int = 80;
3197             pub const ELIBSCN: c_int = 81;
3198             pub const ELIBMAX: c_int = 82;
3199             pub const ELIBEXEC: c_int = 83;
3200             pub const EILSEQ: c_int = 84;
3201             pub const ERESTART: c_int = 85;
3202             pub const ESTRPIPE: c_int = 86;
3203             pub const EUSERS: c_int = 87;
3204             pub const ENOTSOCK: c_int = 88;
3205             pub const EDESTADDRREQ: c_int = 89;
3206             pub const EMSGSIZE: c_int = 90;
3207             pub const EPROTOTYPE: c_int = 91;
3208             pub const ENOPROTOOPT: c_int = 92;
3209             pub const EPROTONOSUPPORT: c_int = 93;
3210             pub const ESOCKTNOSUPPORT: c_int = 94;
3211             pub const EOPNOTSUPP: c_int = 95;
3212             pub const EPFNOSUPPORT: c_int = 96;
3213             pub const EAFNOSUPPORT: c_int = 97;
3214             pub const EADDRINUSE: c_int = 98;
3215             pub const EADDRNOTAVAIL: c_int = 99;
3216             pub const ENETDOWN: c_int = 100;
3217             pub const ENETUNREACH: c_int = 101;
3218             pub const ENETRESET: c_int = 102;
3219             pub const ECONNABORTED: c_int = 103;
3220             pub const ECONNRESET: c_int = 104;
3221             pub const ENOBUFS: c_int = 105;
3222             pub const EISCONN: c_int = 106;
3223             pub const ENOTCONN: c_int = 107;
3224             pub const ESHUTDOWN: c_int = 108;
3225             pub const ETOOMANYREFS: c_int = 109;
3226             pub const ETIMEDOUT: c_int = 110;
3227             pub const ECONNREFUSED: c_int = 111;
3228             pub const EHOSTDOWN: c_int = 112;
3229             pub const EHOSTUNREACH: c_int = 113;
3230             pub const EALREADY: c_int = 114;
3231             pub const EINPROGRESS: c_int = 115;
3232             pub const ESTALE: c_int = 116;
3233             pub const EUCLEAN: c_int = 117;
3234             pub const ENOTNAM: c_int = 118;
3235             pub const ENAVAIL: c_int = 119;
3236             pub const EISNAM: c_int = 120;
3237             pub const EREMOTEIO: c_int = 121;
3238             pub const EDQUOT: c_int = 122;
3239
3240             pub const ENOMEDIUM: c_int = 123;
3241             pub const EMEDIUMTYPE: c_int = 124;
3242             pub const ECANCELED: c_int = 125;
3243             pub const ENOKEY: c_int = 126;
3244             pub const EKEYEXPIRED: c_int = 127;
3245             pub const EKEYREVOKED: c_int = 128;
3246             pub const EKEYREJECTED: c_int = 129;
3247
3248             pub const EOWNERDEAD: c_int = 130;
3249             pub const ENOTRECOVERABLE: c_int = 131;
3250
3251             pub const ERFKILL: c_int = 132;
3252
3253             pub const EHWPOISON: c_int = 133;
3254         }
3255
3256         #[cfg(any(target_arch = "mips",
3257                   target_arch = "mipsel"))]
3258         pub mod posix88 {
3259             use types::os::arch::c95::c_int;
3260             use types::common::c95::c_void;
3261             use types::os::arch::posix88::mode_t;
3262
3263             pub const O_RDONLY : c_int = 0;
3264             pub const O_WRONLY : c_int = 1;
3265             pub const O_RDWR : c_int = 2;
3266             pub const O_APPEND : c_int = 8;
3267             pub const O_CREAT : c_int = 256;
3268             pub const O_EXCL : c_int = 1024;
3269             pub const O_NOCTTY : c_int = 2048;
3270             pub const O_TRUNC : c_int = 512;
3271             pub const S_IFIFO : mode_t = 4096;
3272             pub const S_IFCHR : mode_t = 8192;
3273             pub const S_IFBLK : mode_t = 24576;
3274             pub const S_IFDIR : mode_t = 16384;
3275             pub const S_IFREG : mode_t = 32768;
3276             pub const S_IFLNK : mode_t = 40960;
3277             pub const S_IFSOCK : mode_t = 49152;
3278             pub const S_IFMT : mode_t = 61440;
3279             pub const S_IEXEC : mode_t = 64;
3280             pub const S_IWRITE : mode_t = 128;
3281             pub const S_IREAD : mode_t = 256;
3282             pub const S_IRWXU : mode_t = 448;
3283             pub const S_IXUSR : mode_t = 64;
3284             pub const S_IWUSR : mode_t = 128;
3285             pub const S_IRUSR : mode_t = 256;
3286             pub const S_IRWXG : mode_t = 56;
3287             pub const S_IXGRP : mode_t = 8;
3288             pub const S_IWGRP : mode_t = 16;
3289             pub const S_IRGRP : mode_t = 32;
3290             pub const S_IRWXO : mode_t = 7;
3291             pub const S_IXOTH : mode_t = 1;
3292             pub const S_IWOTH : mode_t = 2;
3293             pub const S_IROTH : mode_t = 4;
3294             pub const F_OK : c_int = 0;
3295             pub const R_OK : c_int = 4;
3296             pub const W_OK : c_int = 2;
3297             pub const X_OK : c_int = 1;
3298             pub const STDIN_FILENO : c_int = 0;
3299             pub const STDOUT_FILENO : c_int = 1;
3300             pub const STDERR_FILENO : c_int = 2;
3301             pub const F_LOCK : c_int = 1;
3302             pub const F_TEST : c_int = 3;
3303             pub const F_TLOCK : c_int = 2;
3304             pub const F_ULOCK : c_int = 0;
3305             pub const SIGHUP : c_int = 1;
3306             pub const SIGINT : c_int = 2;
3307             pub const SIGQUIT : c_int = 3;
3308             pub const SIGILL : c_int = 4;
3309             pub const SIGABRT : c_int = 6;
3310             pub const SIGFPE : c_int = 8;
3311             pub const SIGKILL : c_int = 9;
3312             pub const SIGSEGV : c_int = 11;
3313             pub const SIGPIPE : c_int = 13;
3314             pub const SIGALRM : c_int = 14;
3315             pub const SIGTERM : c_int = 15;
3316
3317             pub const PROT_NONE : c_int = 0;
3318             pub const PROT_READ : c_int = 1;
3319             pub const PROT_WRITE : c_int = 2;
3320             pub const PROT_EXEC : c_int = 4;
3321
3322             pub const MAP_FILE : c_int = 0x0000;
3323             pub const MAP_SHARED : c_int = 0x0001;
3324             pub const MAP_PRIVATE : c_int = 0x0002;
3325             pub const MAP_FIXED : c_int = 0x0010;
3326             pub const MAP_ANON : c_int = 0x0800;
3327
3328             pub const MAP_FAILED : *mut c_void = !0 as *mut c_void;
3329
3330             pub const MCL_CURRENT : c_int = 0x0001;
3331             pub const MCL_FUTURE : c_int = 0x0002;
3332
3333             pub const MS_ASYNC : c_int = 0x0001;
3334             pub const MS_INVALIDATE : c_int = 0x0002;
3335             pub const MS_SYNC : c_int = 0x0004;
3336
3337             pub const EPERM : c_int = 1;
3338             pub const ENOENT : c_int = 2;
3339             pub const ESRCH : c_int = 3;
3340             pub const EINTR : c_int = 4;
3341             pub const EIO : c_int = 5;
3342             pub const ENXIO : c_int = 6;
3343             pub const E2BIG : c_int = 7;
3344             pub const ENOEXEC : c_int = 8;
3345             pub const EBADF : c_int = 9;
3346             pub const ECHILD : c_int = 10;
3347             pub const EAGAIN : c_int = 11;
3348             pub const ENOMEM : c_int = 12;
3349             pub const EACCES : c_int = 13;
3350             pub const EFAULT : c_int = 14;
3351             pub const ENOTBLK : c_int = 15;
3352             pub const EBUSY : c_int = 16;
3353             pub const EEXIST : c_int = 17;
3354             pub const EXDEV : c_int = 18;
3355             pub const ENODEV : c_int = 19;
3356             pub const ENOTDIR : c_int = 20;
3357             pub const EISDIR : c_int = 21;
3358             pub const EINVAL : c_int = 22;
3359             pub const ENFILE : c_int = 23;
3360             pub const EMFILE : c_int = 24;
3361             pub const ENOTTY : c_int = 25;
3362             pub const ETXTBSY : c_int = 26;
3363             pub const EFBIG : c_int = 27;
3364             pub const ENOSPC : c_int = 28;
3365             pub const ESPIPE : c_int = 29;
3366             pub const EROFS : c_int = 30;
3367             pub const EMLINK : c_int = 31;
3368             pub const EPIPE : c_int = 32;
3369             pub const EDOM : c_int = 33;
3370             pub const ERANGE : c_int = 34;
3371
3372             pub const ENOMSG: c_int = 35;
3373             pub const EIDRM: c_int = 36;
3374             pub const ECHRNG: c_int = 37;
3375             pub const EL2NSYNC: c_int = 38;
3376             pub const EL3HLT: c_int = 39;
3377             pub const EL3RST: c_int = 40;
3378             pub const ELNRNG: c_int = 41;
3379             pub const EUNATCH: c_int = 42;
3380             pub const ENOCSI: c_int = 43;
3381             pub const EL2HLT: c_int = 44;
3382             pub const EDEADLK: c_int = 45;
3383             pub const ENOLCK: c_int = 46;
3384             pub const EBADE: c_int = 50;
3385             pub const EBADR: c_int = 51;
3386             pub const EXFULL: c_int = 52;
3387             pub const ENOANO: c_int = 53;
3388             pub const EBADRQC: c_int = 54;
3389             pub const EBADSLT: c_int = 55;
3390             pub const EDEADLOCK: c_int = 56;
3391             pub const EBFONT: c_int = 59;
3392             pub const ENOSTR: c_int = 60;
3393             pub const ENODATA: c_int = 61;
3394             pub const ETIME: c_int = 62;
3395             pub const ENOSR: c_int = 63;
3396             pub const ENONET: c_int = 64;
3397             pub const ENOPKG: c_int = 65;
3398             pub const EREMOTE: c_int = 66;
3399             pub const ENOLINK: c_int = 67;
3400             pub const EADV: c_int = 68;
3401             pub const ESRMNT: c_int = 69;
3402             pub const ECOMM: c_int = 70;
3403             pub const EPROTO: c_int = 71;
3404             pub const EDOTDOT: c_int = 73;
3405             pub const EMULTIHOP: c_int = 74;
3406             pub const EBADMSG: c_int = 77;
3407             pub const ENAMETOOLONG: c_int = 78;
3408             pub const EOVERFLOW: c_int = 79;
3409             pub const ENOTUNIQ: c_int = 80;
3410             pub const EBADFD: c_int = 81;
3411             pub const EREMCHG: c_int = 82;
3412             pub const ELIBACC: c_int = 83;
3413             pub const ELIBBAD: c_int = 84;
3414             pub const ELIBSCN: c_int = 95;
3415             pub const ELIBMAX: c_int = 86;
3416             pub const ELIBEXEC: c_int = 87;
3417             pub const EILSEQ: c_int = 88;
3418             pub const ENOSYS: c_int = 89;
3419             pub const ELOOP: c_int = 90;
3420             pub const ERESTART: c_int = 91;
3421             pub const ESTRPIPE: c_int = 92;
3422             pub const ENOTEMPTY: c_int = 93;
3423             pub const EUSERS: c_int = 94;
3424             pub const ENOTSOCK: c_int = 95;
3425             pub const EDESTADDRREQ: c_int = 96;
3426             pub const EMSGSIZE: c_int = 97;
3427             pub const EPROTOTYPE: c_int = 98;
3428             pub const ENOPROTOOPT: c_int = 99;
3429             pub const EPROTONOSUPPORT: c_int = 120;
3430             pub const ESOCKTNOSUPPORT: c_int = 121;
3431             pub const EOPNOTSUPP: c_int = 122;
3432             pub const EPFNOSUPPORT: c_int = 123;
3433             pub const EAFNOSUPPORT: c_int = 124;
3434             pub const EADDRINUSE: c_int = 125;
3435             pub const EADDRNOTAVAIL: c_int = 126;
3436             pub const ENETDOWN: c_int = 127;
3437             pub const ENETUNREACH: c_int = 128;
3438             pub const ENETRESET: c_int = 129;
3439             pub const ECONNABORTED: c_int = 130;
3440             pub const ECONNRESET: c_int = 131;
3441             pub const ENOBUFS: c_int = 132;
3442             pub const EISCONN: c_int = 133;
3443             pub const ENOTCONN: c_int = 134;
3444             pub const EUCLEAN: c_int = 135;
3445             pub const ENOTNAM: c_int = 137;
3446             pub const ENAVAIL: c_int = 138;
3447             pub const EISNAM: c_int = 139;
3448             pub const EREMOTEIO: c_int = 140;
3449             pub const ESHUTDOWN: c_int = 143;
3450             pub const ETOOMANYREFS: c_int = 144;
3451             pub const ETIMEDOUT: c_int = 145;
3452             pub const ECONNREFUSED: c_int = 146;
3453             pub const EHOSTDOWN: c_int = 147;
3454             pub const EHOSTUNREACH: c_int = 148;
3455             pub const EWOULDBLOCK: c_int = EAGAIN;
3456             pub const EALREADY: c_int = 149;
3457             pub const EINPROGRESS: c_int = 150;
3458             pub const ESTALE: c_int = 151;
3459             pub const ECANCELED: c_int = 158;
3460
3461             pub const ENOMEDIUM: c_int = 159;
3462             pub const EMEDIUMTYPE: c_int = 160;
3463             pub const ENOKEY: c_int = 161;
3464             pub const EKEYEXPIRED: c_int = 162;
3465             pub const EKEYREVOKED: c_int = 163;
3466             pub const EKEYREJECTED: c_int = 164;
3467
3468             pub const EOWNERDEAD: c_int = 165;
3469             pub const ENOTRECOVERABLE: c_int = 166;
3470
3471             pub const ERFKILL: c_int = 167;
3472
3473             pub const EHWPOISON: c_int = 168;
3474
3475             pub const EDQUOT: c_int = 1133;
3476         }
3477         #[cfg(not(target_os = "nacl"))]
3478         pub mod posix01 {
3479             use types::os::arch::c95::{c_int, size_t};
3480             use types::os::common::posix01::rlim_t;
3481
3482             pub const F_DUPFD : c_int = 0;
3483             pub const F_GETFD : c_int = 1;
3484             pub const F_SETFD : c_int = 2;
3485             pub const F_GETFL : c_int = 3;
3486             pub const F_SETFL : c_int = 4;
3487
3488             pub const O_ACCMODE : c_int = 3;
3489
3490             pub const SIGTRAP : c_int = 5;
3491             pub const SIG_IGN: size_t = 1;
3492
3493             pub const GLOB_ERR      : c_int = 1 << 0;
3494             pub const GLOB_MARK     : c_int = 1 << 1;
3495             pub const GLOB_NOSORT   : c_int = 1 << 2;
3496             pub const GLOB_DOOFFS   : c_int = 1 << 3;
3497             pub const GLOB_NOCHECK  : c_int = 1 << 4;
3498             pub const GLOB_APPEND   : c_int = 1 << 5;
3499             pub const GLOB_NOESCAPE : c_int = 1 << 6;
3500
3501             pub const GLOB_NOSPACE  : c_int = 1;
3502             pub const GLOB_ABORTED  : c_int = 2;
3503             pub const GLOB_NOMATCH  : c_int = 3;
3504
3505             pub const POSIX_MADV_NORMAL : c_int = 0;
3506             pub const POSIX_MADV_RANDOM : c_int = 1;
3507             pub const POSIX_MADV_SEQUENTIAL : c_int = 2;
3508             pub const POSIX_MADV_WILLNEED : c_int = 3;
3509             pub const POSIX_MADV_DONTNEED : c_int = 4;
3510
3511             pub const _SC_MQ_PRIO_MAX : c_int = 28;
3512             pub const _SC_IOV_MAX : c_int = 60;
3513             pub const _SC_GETGR_R_SIZE_MAX : c_int = 69;
3514             pub const _SC_GETPW_R_SIZE_MAX : c_int = 70;
3515             pub const _SC_LOGIN_NAME_MAX : c_int = 71;
3516             pub const _SC_TTY_NAME_MAX : c_int = 72;
3517             pub const _SC_THREADS : c_int = 67;
3518             pub const _SC_THREAD_SAFE_FUNCTIONS : c_int = 68;
3519             pub const _SC_THREAD_DESTRUCTOR_ITERATIONS : c_int = 73;
3520             pub const _SC_THREAD_KEYS_MAX : c_int = 74;
3521             pub const _SC_THREAD_STACK_MIN : c_int = 75;
3522             pub const _SC_THREAD_THREADS_MAX : c_int = 76;
3523             pub const _SC_THREAD_ATTR_STACKADDR : c_int = 77;
3524             pub const _SC_THREAD_ATTR_STACKSIZE : c_int = 78;
3525             pub const _SC_THREAD_PRIORITY_SCHEDULING : c_int = 79;
3526             pub const _SC_THREAD_PRIO_INHERIT : c_int = 80;
3527             pub const _SC_THREAD_PRIO_PROTECT : c_int = 81;
3528             pub const _SC_THREAD_PROCESS_SHARED : c_int = 82;
3529             pub const _SC_ATEXIT_MAX : c_int = 87;
3530             pub const _SC_XOPEN_VERSION : c_int = 89;
3531             pub const _SC_XOPEN_XCU_VERSION : c_int = 90;
3532             pub const _SC_XOPEN_UNIX : c_int = 91;
3533             pub const _SC_XOPEN_CRYPT : c_int = 92;
3534             pub const _SC_XOPEN_ENH_I18N : c_int = 93;
3535             pub const _SC_XOPEN_SHM : c_int = 94;
3536             pub const _SC_XOPEN_LEGACY : c_int = 129;
3537             pub const _SC_XOPEN_REALTIME : c_int = 130;
3538             pub const _SC_XOPEN_REALTIME_THREADS : c_int = 131;
3539
3540
3541
3542             pub const PTHREAD_CREATE_JOINABLE: c_int = 0;
3543             pub const PTHREAD_CREATE_DETACHED: c_int = 1;
3544
3545             #[cfg(target_os = "android")]
3546             pub const PTHREAD_STACK_MIN: size_t = 8192;
3547
3548             #[cfg(all(target_os = "linux",
3549                       any(target_arch = "arm",
3550                           target_arch = "x86",
3551                           target_arch = "x86_64")))]
3552             pub const PTHREAD_STACK_MIN: size_t = 16384;
3553
3554             #[cfg(all(target_os = "linux",
3555                       any(target_arch = "mips",
3556                           target_arch = "mipsel",
3557                           target_arch = "aarch64",
3558                           target_arch = "powerpc")))]
3559             pub const PTHREAD_STACK_MIN: size_t = 131072;
3560
3561             pub const CLOCK_REALTIME: c_int = 0;
3562             pub const CLOCK_MONOTONIC: c_int = 1;
3563
3564             pub const RLIMIT_CPU: c_int = 0;
3565             pub const RLIMIT_FSIZE: c_int = 1;
3566             pub const RLIMIT_DATA: c_int = 2;
3567             pub const RLIMIT_STACK: c_int = 3;
3568             pub const RLIMIT_CORE: c_int = 4;
3569             pub const RLIMIT_RSS: c_int = 5;
3570             pub const RLIMIT_NOFILE: c_int = 7;
3571             pub const RLIMIT_AS: c_int = 9;
3572             pub const RLIMIT_NPROC: c_int = 6;
3573             pub const RLIMIT_MEMLOCK: c_int = 8;
3574             pub const RLIMIT_LOCKS: c_int = 10;
3575             pub const RLIMIT_SIGPENDING: c_int = 11;
3576             pub const RLIMIT_MSGQUEUE: c_int = 12;
3577             pub const RLIMIT_NICE: c_int = 13;
3578             pub const RLIMIT_RTPRIO: c_int = 14;
3579             pub const RLIMIT_RTTIME: c_int = 15;
3580             pub const RLIMIT_NLIMITS: c_int = 16;
3581             pub const RLIM_INFINITY: rlim_t = 0xffff_ffff_ffff_ffff;
3582             pub const RLIM_SAVED_MAX: rlim_t = RLIM_INFINITY;
3583             pub const RLIM_SAVED_CUR: rlim_t = RLIM_INFINITY;
3584
3585             pub const RUSAGE_SELF: c_int = 0;
3586             pub const RUSAGE_CHILDREN: c_int = -1;
3587             pub const RUSAGE_THREAD: c_int = 1;
3588         }
3589         #[cfg(target_os = "nacl")]
3590         pub mod posix01 {
3591             use types::os::arch::c95::{c_int, size_t};
3592             use types::os::common::posix01::rlim_t;
3593
3594             pub const F_DUPFD : c_int = 0;
3595             pub const F_GETFD : c_int = 1;
3596             pub const F_SETFD : c_int = 2;
3597             pub const F_GETFL : c_int = 3;
3598             pub const F_SETFL : c_int = 4;
3599
3600             pub const SIGTRAP : c_int = 5;
3601             pub const SIG_IGN: size_t = 1;
3602
3603             pub const GLOB_ERR      : c_int = 1 << 0;
3604             pub const GLOB_MARK     : c_int = 1 << 1;
3605             pub const GLOB_NOSORT   : c_int = 1 << 2;
3606             pub const GLOB_DOOFFS   : c_int = 1 << 3;
3607             pub const GLOB_NOCHECK  : c_int = 1 << 4;
3608             pub const GLOB_APPEND   : c_int = 1 << 5;
3609             pub const GLOB_NOESCAPE : c_int = 1 << 6;
3610
3611             pub const GLOB_NOSPACE  : c_int = 1;
3612             pub const GLOB_ABORTED  : c_int = 2;
3613             pub const GLOB_NOMATCH  : c_int = 3;
3614
3615             pub const POSIX_MADV_NORMAL : c_int = 0;
3616             pub const POSIX_MADV_RANDOM : c_int = 1;
3617             pub const POSIX_MADV_SEQUENTIAL : c_int = 2;
3618             pub const POSIX_MADV_WILLNEED : c_int = 3;
3619             pub const POSIX_MADV_DONTNEED : c_int = 4;
3620
3621             pub const _SC_MQ_PRIO_MAX : c_int = 28;
3622             pub const _SC_IOV_MAX : c_int = 60;
3623             pub const _SC_GETGR_R_SIZE_MAX : c_int = 69;
3624             pub const _SC_GETPW_R_SIZE_MAX : c_int = 70;
3625             pub const _SC_LOGIN_NAME_MAX : c_int = 71;
3626             pub const _SC_TTY_NAME_MAX : c_int = 72;
3627             pub const _SC_THREADS : c_int = 67;
3628             pub const _SC_THREAD_SAFE_FUNCTIONS : c_int = 68;
3629             pub const _SC_THREAD_DESTRUCTOR_ITERATIONS : c_int = 73;
3630             pub const _SC_THREAD_KEYS_MAX : c_int = 74;
3631             pub const _SC_THREAD_STACK_MIN : c_int = 75;
3632             pub const _SC_THREAD_THREADS_MAX : c_int = 76;
3633             pub const _SC_THREAD_ATTR_STACKADDR : c_int = 77;
3634             pub const _SC_THREAD_ATTR_STACKSIZE : c_int = 78;
3635             pub const _SC_THREAD_PRIORITY_SCHEDULING : c_int = 79;
3636             pub const _SC_THREAD_PRIO_INHERIT : c_int = 80;
3637             pub const _SC_THREAD_PRIO_PROTECT : c_int = 81;
3638             pub const _SC_THREAD_PROCESS_SHARED : c_int = 82;
3639             pub const _SC_ATEXIT_MAX : c_int = 87;
3640             pub const _SC_XOPEN_VERSION : c_int = 89;
3641             pub const _SC_XOPEN_XCU_VERSION : c_int = 90;
3642             pub const _SC_XOPEN_UNIX : c_int = 91;
3643             pub const _SC_XOPEN_CRYPT : c_int = 92;
3644             pub const _SC_XOPEN_ENH_I18N : c_int = 93;
3645             pub const _SC_XOPEN_SHM : c_int = 94;
3646             pub const _SC_XOPEN_LEGACY : c_int = 129;
3647             pub const _SC_XOPEN_REALTIME : c_int = 130;
3648             pub const _SC_XOPEN_REALTIME_THREADS : c_int = 131;
3649
3650             pub const PTHREAD_CREATE_JOINABLE: c_int = 1;
3651             pub const PTHREAD_CREATE_DETACHED: c_int = 0;
3652
3653             pub const PTHREAD_STACK_MIN: size_t = 1024;
3654
3655             pub const CLOCK_REALTIME: c_int = 0;
3656             pub const CLOCK_MONOTONIC: c_int = 1;
3657
3658             pub const RLIMIT_CPU: c_int = 0;
3659             pub const RLIMIT_FSIZE: c_int = 1;
3660             pub const RLIMIT_DATA: c_int = 2;
3661             pub const RLIMIT_STACK: c_int = 3;
3662             pub const RLIMIT_CORE: c_int = 4;
3663             pub const RLIMIT_RSS: c_int = 5;
3664             pub const RLIMIT_NOFILE: c_int = 7;
3665             pub const RLIMIT_AS: c_int = 9;
3666             pub const RLIMIT_NPROC: c_int = 6;
3667             pub const RLIMIT_MEMLOCK: c_int = 8;
3668             pub const RLIMIT_LOCKS: c_int = 10;
3669             pub const RLIMIT_SIGPENDING: c_int = 11;
3670             pub const RLIMIT_MSGQUEUE: c_int = 12;
3671             pub const RLIMIT_NICE: c_int = 13;
3672             pub const RLIMIT_RTPRIO: c_int = 14;
3673             pub const RLIMIT_RTTIME: c_int = 15;
3674             pub const RLIMIT_NLIMITS: c_int = 16;
3675
3676             pub const RLIM_INFINITY: rlim_t = 0xffff_ffff_ffff_ffff;
3677             pub const RLIM_SAVED_MAX: rlim_t = RLIM_INFINITY;
3678             pub const RLIM_SAVED_CUR: rlim_t = RLIM_INFINITY;
3679
3680             pub const RUSAGE_SELF: c_int = 0;
3681             pub const RUSAGE_CHILDREN: c_int = -1;
3682             pub const RUSAGE_THREAD: c_int = 1;
3683         }
3684         pub mod posix08 {
3685             use types::os::arch::c95::c_int;
3686             pub const O_CLOEXEC: c_int = 0x80000;
3687             pub const F_DUPFD_CLOEXEC: c_int = 1030;
3688         }
3689         #[cfg(any(target_arch = "arm",
3690                   target_arch = "aarch64",
3691                   target_arch = "x86",
3692                   target_arch = "x86_64",
3693                   target_arch = "le32",
3694                   target_arch = "powerpc"))]
3695         pub mod bsd44 {
3696             use types::os::arch::c95::c_int;
3697
3698             pub const MADV_NORMAL : c_int = 0;
3699             pub const MADV_RANDOM : c_int = 1;
3700             pub const MADV_SEQUENTIAL : c_int = 2;
3701             pub const MADV_WILLNEED : c_int = 3;
3702             pub const MADV_DONTNEED : c_int = 4;
3703             pub const MADV_REMOVE : c_int = 9;
3704             pub const MADV_DONTFORK : c_int = 10;
3705             pub const MADV_DOFORK : c_int = 11;
3706             pub const MADV_MERGEABLE : c_int = 12;
3707             pub const MADV_UNMERGEABLE : c_int = 13;
3708             pub const MADV_HWPOISON : c_int = 100;
3709
3710             pub const IFF_LOOPBACK: c_int = 0x8;
3711
3712             pub const AF_UNIX: c_int = 1;
3713             pub const AF_INET: c_int = 2;
3714             pub const AF_INET6: c_int = 10;
3715             pub const SOCK_STREAM: c_int = 1;
3716             pub const SOCK_DGRAM: c_int = 2;
3717             pub const SOCK_RAW: c_int = 3;
3718             pub const IPPROTO_TCP: c_int = 6;
3719             pub const IPPROTO_IP: c_int = 0;
3720             pub const IPPROTO_IPV6: c_int = 41;
3721             pub const IP_MULTICAST_TTL: c_int = 33;
3722             pub const IP_MULTICAST_LOOP: c_int = 34;
3723             pub const IP_TTL: c_int = 2;
3724             pub const IP_HDRINCL: c_int = 3;
3725             pub const IP_ADD_MEMBERSHIP: c_int = 35;
3726             pub const IP_DROP_MEMBERSHIP: c_int = 36;
3727             pub const IPV6_ADD_MEMBERSHIP: c_int = 20;
3728             pub const IPV6_DROP_MEMBERSHIP: c_int = 21;
3729
3730             pub const TCP_NODELAY: c_int = 1;
3731             pub const TCP_MAXSEG: c_int = 2;
3732             pub const TCP_CORK: c_int = 3;
3733             pub const TCP_KEEPIDLE: c_int = 4;
3734             pub const TCP_KEEPINTVL: c_int = 5;
3735             pub const TCP_KEEPCNT: c_int = 6;
3736             pub const TCP_SYNCNT: c_int = 7;
3737             pub const TCP_LINGER2: c_int = 8;
3738             pub const TCP_DEFER_ACCEPT: c_int = 9;
3739             pub const TCP_WINDOW_CLAMP: c_int = 10;
3740             pub const TCP_INFO: c_int = 11;
3741             pub const TCP_QUICKACK: c_int = 12;
3742             pub const TCP_CONGESTION: c_int = 13;
3743             pub const TCP_MD5SIG: c_int = 14;
3744             pub const TCP_COOKIE_TRANSACTIONS: c_int = 15;
3745             pub const TCP_THIN_LINEAR_TIMEOUTS: c_int = 16;
3746             pub const TCP_THIN_DUPACK: c_int = 17;
3747             pub const TCP_USER_TIMEOUT: c_int = 18;
3748             pub const TCP_REPAIR: c_int = 19;
3749             pub const TCP_REPAIR_QUEUE: c_int = 20;
3750             pub const TCP_QUEUE_SEQ: c_int = 21;
3751             pub const TCP_REPAIR_OPTIONS: c_int = 22;
3752             pub const TCP_FASTOPEN: c_int = 23;
3753             pub const TCP_TIMESTAMP: c_int = 24;
3754
3755             pub const SOL_SOCKET: c_int = 1;
3756
3757             pub const SO_DEBUG: c_int = 1;
3758             pub const SO_REUSEADDR: c_int = 2;
3759             pub const SO_TYPE: c_int = 3;
3760             pub const SO_ERROR: c_int = 4;
3761             pub const SO_DONTROUTE: c_int = 5;
3762             pub const SO_BROADCAST: c_int = 6;
3763             pub const SO_SNDBUF: c_int = 7;
3764             pub const SO_RCVBUF: c_int = 8;
3765             pub const SO_KEEPALIVE: c_int = 9;
3766             pub const SO_OOBINLINE: c_int = 10;
3767             pub const SO_LINGER: c_int = 13;
3768             pub const SO_REUSEPORT: c_int = 15;
3769             pub const SO_RCVLOWAT: c_int = 18;
3770             pub const SO_SNDLOWAT: c_int = 19;
3771             pub const SO_RCVTIMEO: c_int = 20;
3772             pub const SO_SNDTIMEO: c_int = 21;
3773             pub const SO_ACCEPTCONN: c_int = 30;
3774
3775             pub const SHUT_RD: c_int = 0;
3776             pub const SHUT_WR: c_int = 1;
3777             pub const SHUT_RDWR: c_int = 2;
3778
3779             pub const LOCK_SH: c_int = 1;
3780             pub const LOCK_EX: c_int = 2;
3781             pub const LOCK_NB: c_int = 4;
3782             pub const LOCK_UN: c_int = 8;
3783         }
3784         #[cfg(any(target_arch = "mips",
3785                   target_arch = "mipsel"))]
3786         pub mod bsd44 {
3787             use types::os::arch::c95::c_int;
3788
3789             pub const MADV_NORMAL : c_int = 0;
3790             pub const MADV_RANDOM : c_int = 1;
3791             pub const MADV_SEQUENTIAL : c_int = 2;
3792             pub const MADV_WILLNEED : c_int = 3;
3793             pub const MADV_DONTNEED : c_int = 4;
3794             pub const MADV_REMOVE : c_int = 9;
3795             pub const MADV_DONTFORK : c_int = 10;
3796             pub const MADV_DOFORK : c_int = 11;
3797             pub const MADV_MERGEABLE : c_int = 12;
3798             pub const MADV_UNMERGEABLE : c_int = 13;
3799             pub const MADV_HWPOISON : c_int = 100;
3800
3801             pub const AF_UNIX: c_int = 1;
3802             pub const AF_INET: c_int = 2;
3803             pub const AF_INET6: c_int = 10;
3804             pub const SOCK_STREAM: c_int = 2;
3805             pub const SOCK_DGRAM: c_int = 1;
3806             pub const SOCK_RAW: c_int = 3;
3807             pub const IPPROTO_TCP: c_int = 6;
3808             pub const IPPROTO_IP: c_int = 0;
3809             pub const IPPROTO_IPV6: c_int = 41;
3810             pub const IP_MULTICAST_TTL: c_int = 33;
3811             pub const IP_MULTICAST_LOOP: c_int = 34;
3812             pub const IP_TTL: c_int = 2;
3813             pub const IP_HDRINCL: c_int = 3;
3814             pub const IP_ADD_MEMBERSHIP: c_int = 35;
3815             pub const IP_DROP_MEMBERSHIP: c_int = 36;
3816             pub const IPV6_ADD_MEMBERSHIP: c_int = 20;
3817             pub const IPV6_DROP_MEMBERSHIP: c_int = 21;
3818
3819             pub const TCP_NODELAY: c_int = 1;
3820             pub const TCP_MAXSEG: c_int = 2;
3821             pub const TCP_CORK: c_int = 3;
3822             pub const TCP_KEEPIDLE: c_int = 4;
3823             pub const TCP_KEEPINTVL: c_int = 5;
3824             pub const TCP_KEEPCNT: c_int = 6;
3825             pub const TCP_SYNCNT: c_int = 7;
3826             pub const TCP_LINGER2: c_int = 8;
3827             pub const TCP_DEFER_ACCEPT: c_int = 9;
3828             pub const TCP_WINDOW_CLAMP: c_int = 10;
3829             pub const TCP_INFO: c_int = 11;
3830             pub const TCP_QUICKACK: c_int = 12;
3831             pub const TCP_CONGESTION: c_int = 13;
3832             pub const TCP_MD5SIG: c_int = 14;
3833             pub const TCP_COOKIE_TRANSACTIONS: c_int = 15;
3834             pub const TCP_THIN_LINEAR_TIMEOUTS: c_int = 16;
3835             pub const TCP_THIN_DUPACK: c_int = 17;
3836             pub const TCP_USER_TIMEOUT: c_int = 18;
3837             pub const TCP_REPAIR: c_int = 19;
3838             pub const TCP_REPAIR_QUEUE: c_int = 20;
3839             pub const TCP_QUEUE_SEQ: c_int = 21;
3840             pub const TCP_REPAIR_OPTIONS: c_int = 22;
3841             pub const TCP_FASTOPEN: c_int = 23;
3842             pub const TCP_TIMESTAMP: c_int = 24;
3843
3844             pub const SOL_SOCKET: c_int = 65535;
3845
3846             pub const SO_DEBUG: c_int = 0x0001;
3847             pub const SO_REUSEADDR: c_int = 0x0004;
3848             pub const SO_KEEPALIVE: c_int = 0x0008;
3849             pub const SO_DONTROUTE: c_int = 0x0010;
3850             pub const SO_BROADCAST: c_int = 0x0020;
3851             pub const SO_LINGER: c_int = 0x0080;
3852             pub const SO_OOBINLINE: c_int = 0x100;
3853             pub const SO_REUSEPORT: c_int = 0x0200;
3854             pub const SO_SNDBUF: c_int = 0x1001;
3855             pub const SO_RCVBUF: c_int = 0x1002;
3856             pub const SO_SNDLOWAT: c_int = 0x1003;
3857             pub const SO_RCVLOWAT: c_int = 0x1004;
3858             pub const SO_SNDTIMEO: c_int = 0x1005;
3859             pub const SO_RCVTIMEO: c_int = 0x1006;
3860             pub const SO_ERROR: c_int = 0x1007;
3861             pub const SO_TYPE: c_int = 0x1008;
3862             pub const SO_ACCEPTCONN: c_int = 0x1009;
3863
3864             pub const SHUT_RD: c_int = 0;
3865             pub const SHUT_WR: c_int = 1;
3866             pub const SHUT_RDWR: c_int = 2;
3867
3868             pub const LOCK_SH: c_int = 1;
3869             pub const LOCK_EX: c_int = 2;
3870             pub const LOCK_NB: c_int = 4;
3871             pub const LOCK_UN: c_int = 8;
3872         }
3873         #[cfg(any(target_arch = "x86",
3874                   target_arch = "x86_64",
3875                   target_arch = "arm",
3876                   target_arch = "aarch64",
3877                   target_arch = "le32",
3878                   target_arch = "powerpc"))]
3879         pub mod extra {
3880             use types::os::arch::c95::c_int;
3881
3882             pub const AF_PACKET : c_int = 17;
3883             pub const IPPROTO_RAW : c_int = 255;
3884
3885             pub const O_RSYNC : c_int = 1052672;
3886             pub const O_DSYNC : c_int = 4096;
3887             pub const O_NONBLOCK : c_int = 2048;
3888             pub const O_SYNC : c_int = 1052672;
3889
3890             pub const PROT_GROWSDOWN : c_int = 0x010000000;
3891             pub const PROT_GROWSUP : c_int = 0x020000000;
3892
3893             pub const MAP_TYPE : c_int = 0x000f;
3894             pub const MAP_ANONYMOUS : c_int = 0x0020;
3895             pub const MAP_32BIT : c_int = 0x0040;
3896             pub const MAP_GROWSDOWN : c_int = 0x0100;
3897             pub const MAP_DENYWRITE : c_int = 0x0800;
3898             pub const MAP_EXECUTABLE : c_int = 0x01000;
3899             pub const MAP_LOCKED : c_int = 0x02000;
3900             pub const MAP_NORESERVE : c_int = 0x04000;
3901             pub const MAP_POPULATE : c_int = 0x08000;
3902             pub const MAP_NONBLOCK : c_int = 0x010000;
3903             pub const MAP_STACK : c_int = 0x020000;
3904
3905             pub const PATH_MAX: c_int = 4096;
3906         }
3907         #[cfg(any(target_arch = "mips",
3908                   target_arch = "mipsel"))]
3909         pub mod extra {
3910             use types::os::arch::c95::c_int;
3911
3912             pub const AF_PACKET : c_int = 17;
3913             pub const IPPROTO_RAW : c_int = 255;
3914
3915             pub const O_RSYNC : c_int = 16400;
3916             pub const O_DSYNC : c_int = 16;
3917             pub const O_NONBLOCK : c_int = 128;
3918             pub const O_SYNC : c_int = 16400;
3919
3920             pub const PROT_GROWSDOWN : c_int = 0x01000000;
3921             pub const PROT_GROWSUP : c_int = 0x02000000;
3922
3923             pub const MAP_TYPE : c_int = 0x000f;
3924             pub const MAP_ANONYMOUS : c_int = 0x0800;
3925             pub const MAP_GROWSDOWN : c_int = 0x01000;
3926             pub const MAP_DENYWRITE : c_int = 0x02000;
3927             pub const MAP_EXECUTABLE : c_int = 0x04000;
3928             pub const MAP_LOCKED : c_int = 0x08000;
3929             pub const MAP_NORESERVE : c_int = 0x0400;
3930             pub const MAP_POPULATE : c_int = 0x010000;
3931             pub const MAP_NONBLOCK : c_int = 0x020000;
3932             pub const MAP_STACK : c_int = 0x040000;
3933
3934             pub const PATH_MAX: c_int = 4096;
3935         }
3936         #[cfg(target_os = "linux")]
3937         pub mod sysconf {
3938             use types::os::arch::c95::c_int;
3939
3940             pub const _SC_ARG_MAX : c_int = 0;
3941             pub const _SC_CHILD_MAX : c_int = 1;
3942             pub const _SC_CLK_TCK : c_int = 2;
3943             pub const _SC_NGROUPS_MAX : c_int = 3;
3944             pub const _SC_OPEN_MAX : c_int = 4;
3945             pub const _SC_STREAM_MAX : c_int = 5;
3946             pub const _SC_TZNAME_MAX : c_int = 6;
3947             pub const _SC_JOB_CONTROL : c_int = 7;
3948             pub const _SC_SAVED_IDS : c_int = 8;
3949             pub const _SC_REALTIME_SIGNALS : c_int = 9;
3950             pub const _SC_PRIORITY_SCHEDULING : c_int = 10;
3951             pub const _SC_TIMERS : c_int = 11;
3952             pub const _SC_ASYNCHRONOUS_IO : c_int = 12;
3953             pub const _SC_PRIORITIZED_IO : c_int = 13;
3954             pub const _SC_SYNCHRONIZED_IO : c_int = 14;
3955             pub const _SC_FSYNC : c_int = 15;
3956             pub const _SC_MAPPED_FILES : c_int = 16;
3957             pub const _SC_MEMLOCK : c_int = 17;
3958             pub const _SC_MEMLOCK_RANGE : c_int = 18;
3959             pub const _SC_MEMORY_PROTECTION : c_int = 19;
3960             pub const _SC_MESSAGE_PASSING : c_int = 20;
3961             pub const _SC_SEMAPHORES : c_int = 21;
3962             pub const _SC_SHARED_MEMORY_OBJECTS : c_int = 22;
3963             pub const _SC_AIO_LISTIO_MAX : c_int = 23;
3964             pub const _SC_AIO_MAX : c_int = 24;
3965             pub const _SC_AIO_PRIO_DELTA_MAX : c_int = 25;
3966             pub const _SC_DELAYTIMER_MAX : c_int = 26;
3967             pub const _SC_MQ_OPEN_MAX : c_int = 27;
3968             pub const _SC_VERSION : c_int = 29;
3969             pub const _SC_PAGESIZE : c_int = 30;
3970             pub const _SC_RTSIG_MAX : c_int = 31;
3971             pub const _SC_SEM_NSEMS_MAX : c_int = 32;
3972             pub const _SC_SEM_VALUE_MAX : c_int = 33;
3973             pub const _SC_SIGQUEUE_MAX : c_int = 34;
3974             pub const _SC_TIMER_MAX : c_int = 35;
3975             pub const _SC_BC_BASE_MAX : c_int = 36;
3976             pub const _SC_BC_DIM_MAX : c_int = 37;
3977             pub const _SC_BC_SCALE_MAX : c_int = 38;
3978             pub const _SC_BC_STRING_MAX : c_int = 39;
3979             pub const _SC_COLL_WEIGHTS_MAX : c_int = 40;
3980             pub const _SC_EXPR_NEST_MAX : c_int = 42;
3981             pub const _SC_LINE_MAX : c_int = 43;
3982             pub const _SC_RE_DUP_MAX : c_int = 44;
3983             pub const _SC_2_VERSION : c_int = 46;
3984             pub const _SC_2_C_BIND : c_int = 47;
3985             pub const _SC_2_C_DEV : c_int = 48;
3986             pub const _SC_2_FORT_DEV : c_int = 49;
3987             pub const _SC_2_FORT_RUN : c_int = 50;
3988             pub const _SC_2_SW_DEV : c_int = 51;
3989             pub const _SC_2_LOCALEDEF : c_int = 52;
3990             pub const _SC_NPROCESSORS_ONLN : c_int = 84;
3991             pub const _SC_2_CHAR_TERM : c_int = 95;
3992             pub const _SC_2_C_VERSION : c_int = 96;
3993             pub const _SC_2_UPE : c_int = 97;
3994             pub const _SC_XBS5_ILP32_OFF32 : c_int = 125;
3995             pub const _SC_XBS5_ILP32_OFFBIG : c_int = 126;
3996             pub const _SC_XBS5_LPBIG_OFFBIG : c_int = 128;
3997
3998             pub const _PC_NAME_MAX: c_int = 3;
3999             pub const _PC_PATH_MAX: c_int = 4;
4000         }
4001         #[cfg(target_os = "nacl")]
4002         pub mod sysconf {
4003             use types::os::arch::c95::c_int;
4004
4005             pub static _SC_SENDMSG_MAX_SIZE : c_int = 0;
4006             pub static _SC_NPROCESSORS_ONLN : c_int = 1;
4007             pub static _SC_PAGESIZE : c_int = 2;
4008
4009             pub const _PC_NAME_MAX: c_int = 3;
4010             pub const _PC_PATH_MAX: c_int = 4;
4011         }
4012
4013         #[cfg(target_os = "android")]
4014         pub mod sysconf {
4015             use types::os::arch::c95::c_int;
4016
4017             pub const _SC_ARG_MAX : c_int = 0;
4018             pub const _SC_BC_BASE_MAX : c_int = 1;
4019             pub const _SC_BC_DIM_MAX : c_int = 2;
4020             pub const _SC_BC_SCALE_MAX : c_int = 3;
4021             pub const _SC_BC_STRING_MAX : c_int = 4;
4022             pub const _SC_CHILD_MAX : c_int = 5;
4023             pub const _SC_CLK_TCK : c_int = 6;
4024             pub const _SC_COLL_WEIGHTS_MAX : c_int = 7;
4025             pub const _SC_EXPR_NEST_MAX : c_int = 8;
4026             pub const _SC_LINE_MAX : c_int = 9;
4027             pub const _SC_NGROUPS_MAX : c_int = 10;
4028             pub const _SC_OPEN_MAX : c_int = 11;
4029             pub const _SC_2_C_BIND : c_int = 13;
4030             pub const _SC_2_C_DEV : c_int = 14;
4031             pub const _SC_2_C_VERSION : c_int = 15;
4032             pub const _SC_2_CHAR_TERM : c_int = 16;
4033             pub const _SC_2_FORT_DEV : c_int = 17;
4034             pub const _SC_2_FORT_RUN : c_int = 18;
4035             pub const _SC_2_LOCALEDEF : c_int = 19;
4036             pub const _SC_2_SW_DEV : c_int = 20;
4037             pub const _SC_2_UPE : c_int = 21;
4038             pub const _SC_2_VERSION : c_int = 22;
4039             pub const _SC_JOB_CONTROL : c_int = 23;
4040             pub const _SC_SAVED_IDS : c_int = 24;
4041             pub const _SC_VERSION : c_int = 25;
4042             pub const _SC_RE_DUP_MAX : c_int = 26;
4043             pub const _SC_STREAM_MAX : c_int = 27;
4044             pub const _SC_TZNAME_MAX : c_int = 28;
4045             pub const _SC_PAGESIZE : c_int = 39;
4046
4047             pub const _PC_NAME_MAX: c_int = 4;
4048             pub const _PC_PATH_MAX: c_int = 5;
4049         }
4050     }
4051
4052     #[cfg(any(target_os = "freebsd",
4053               target_os = "dragonfly"))]
4054     pub mod os {
4055         pub mod c95 {
4056             use types::os::arch::c95::{c_int, c_uint};
4057
4058             pub const EXIT_FAILURE : c_int = 1;
4059             pub const EXIT_SUCCESS : c_int = 0;
4060             pub const RAND_MAX : c_int = 2147483647;
4061             pub const EOF : c_int = -1;
4062             pub const SEEK_SET : c_int = 0;
4063             pub const SEEK_CUR : c_int = 1;
4064             pub const SEEK_END : c_int = 2;
4065             pub const _IOFBF : c_int = 0;
4066             pub const _IONBF : c_int = 2;
4067             pub const _IOLBF : c_int = 1;
4068             pub const BUFSIZ : c_uint = 1024;
4069             pub const FOPEN_MAX : c_uint = 20;
4070             pub const FILENAME_MAX : c_uint = 1024;
4071             pub const L_tmpnam : c_uint = 1024;
4072             pub const TMP_MAX : c_uint = 308915776;
4073         }
4074         pub mod c99 {
4075         }
4076         pub mod posix88 {
4077             use types::common::c95::c_void;
4078             use types::os::arch::c95::c_int;
4079             use types::os::arch::posix88::mode_t;
4080
4081             pub const O_RDONLY : c_int = 0;
4082             pub const O_WRONLY : c_int = 1;
4083             pub const O_RDWR : c_int = 2;
4084             pub const O_APPEND : c_int = 8;
4085             pub const O_CREAT : c_int = 512;
4086             pub const O_EXCL : c_int = 2048;
4087             pub const O_NOCTTY : c_int = 32768;
4088             pub const O_TRUNC : c_int = 1024;
4089             pub const S_IFIFO : mode_t = 4096;
4090             pub const S_IFCHR : mode_t = 8192;
4091             pub const S_IFBLK : mode_t = 24576;
4092             pub const S_IFDIR : mode_t = 16384;
4093             pub const S_IFREG : mode_t = 32768;
4094             pub const S_IFLNK : mode_t = 40960;
4095             pub const S_IFSOCK : mode_t = 49152;
4096             pub const S_IFMT : mode_t = 61440;
4097             pub const S_IEXEC : mode_t = 64;
4098             pub const S_IWRITE : mode_t = 128;
4099             pub const S_IREAD : mode_t = 256;
4100             pub const S_IRWXU : mode_t = 448;
4101             pub const S_IXUSR : mode_t = 64;
4102             pub const S_IWUSR : mode_t = 128;
4103             pub const S_IRUSR : mode_t = 256;
4104             pub const S_IRWXG : mode_t = 56;
4105             pub const S_IXGRP : mode_t = 8;
4106             pub const S_IWGRP : mode_t = 16;
4107             pub const S_IRGRP : mode_t = 32;
4108             pub const S_IRWXO : mode_t = 7;
4109             pub const S_IXOTH : mode_t = 1;
4110             pub const S_IWOTH : mode_t = 2;
4111             pub const S_IROTH : mode_t = 4;
4112             pub const F_OK : c_int = 0;
4113             pub const R_OK : c_int = 4;
4114             pub const W_OK : c_int = 2;
4115             pub const X_OK : c_int = 1;
4116             pub const STDIN_FILENO : c_int = 0;
4117             pub const STDOUT_FILENO : c_int = 1;
4118             pub const STDERR_FILENO : c_int = 2;
4119             pub const F_LOCK : c_int = 1;
4120             pub const F_TEST : c_int = 3;
4121             pub const F_TLOCK : c_int = 2;
4122             pub const F_ULOCK : c_int = 0;
4123             pub const SIGHUP : c_int = 1;
4124             pub const SIGINT : c_int = 2;
4125             pub const SIGQUIT : c_int = 3;
4126             pub const SIGILL : c_int = 4;
4127             pub const SIGABRT : c_int = 6;
4128             pub const SIGFPE : c_int = 8;
4129             pub const SIGKILL : c_int = 9;
4130             pub const SIGSEGV : c_int = 11;
4131             pub const SIGPIPE : c_int = 13;
4132             pub const SIGALRM : c_int = 14;
4133             pub const SIGTERM : c_int = 15;
4134
4135             pub const PROT_NONE : c_int = 0;
4136             pub const PROT_READ : c_int = 1;
4137             pub const PROT_WRITE : c_int = 2;
4138             pub const PROT_EXEC : c_int = 4;
4139
4140             pub const MAP_FILE : c_int = 0x0000;
4141             pub const MAP_SHARED : c_int = 0x0001;
4142             pub const MAP_PRIVATE : c_int = 0x0002;
4143             pub const MAP_FIXED : c_int = 0x0010;
4144             pub const MAP_ANON : c_int = 0x1000;
4145
4146             pub const MAP_FAILED : *mut c_void = !0 as *mut c_void;
4147
4148             pub const MCL_CURRENT : c_int = 0x0001;
4149             pub const MCL_FUTURE : c_int = 0x0002;
4150
4151             pub const MS_SYNC : c_int = 0x0000;
4152             pub const MS_ASYNC : c_int = 0x0001;
4153             pub const MS_INVALIDATE : c_int = 0x0002;
4154
4155             pub const EPERM : c_int = 1;
4156             pub const ENOENT : c_int = 2;
4157             pub const ESRCH : c_int = 3;
4158             pub const EINTR : c_int = 4;
4159             pub const EIO : c_int = 5;
4160             pub const ENXIO : c_int = 6;
4161             pub const E2BIG : c_int = 7;
4162             pub const ENOEXEC : c_int = 8;
4163             pub const EBADF : c_int = 9;
4164             pub const ECHILD : c_int = 10;
4165             pub const EDEADLK : c_int = 11;
4166             pub const ENOMEM : c_int = 12;
4167             pub const EACCES : c_int = 13;
4168             pub const EFAULT : c_int = 14;
4169             pub const ENOTBLK : c_int = 15;
4170             pub const EBUSY : c_int = 16;
4171             pub const EEXIST : c_int = 17;
4172             pub const EXDEV : c_int = 18;
4173             pub const ENODEV : c_int = 19;
4174             pub const ENOTDIR : c_int = 20;
4175             pub const EISDIR : c_int = 21;
4176             pub const EINVAL : c_int = 22;
4177             pub const ENFILE : c_int = 23;
4178             pub const EMFILE : c_int = 24;
4179             pub const ENOTTY : c_int = 25;
4180             pub const ETXTBSY : c_int = 26;
4181             pub const EFBIG : c_int = 27;
4182             pub const ENOSPC : c_int = 28;
4183             pub const ESPIPE : c_int = 29;
4184             pub const EROFS : c_int = 30;
4185             pub const EMLINK : c_int = 31;
4186             pub const EPIPE : c_int = 32;
4187             pub const EDOM : c_int = 33;
4188             pub const ERANGE : c_int = 34;
4189             pub const EAGAIN : c_int = 35;
4190             pub const EWOULDBLOCK : c_int = 35;
4191             pub const EINPROGRESS : c_int = 36;
4192             pub const EALREADY : c_int = 37;
4193             pub const ENOTSOCK : c_int = 38;
4194             pub const EDESTADDRREQ : c_int = 39;
4195             pub const EMSGSIZE : c_int = 40;
4196             pub const EPROTOTYPE : c_int = 41;
4197             pub const ENOPROTOOPT : c_int = 42;
4198             pub const EPROTONOSUPPORT : c_int = 43;
4199             pub const ESOCKTNOSUPPORT : c_int = 44;
4200             pub const EOPNOTSUPP : c_int = 45;
4201             pub const EPFNOSUPPORT : c_int = 46;
4202             pub const EAFNOSUPPORT : c_int = 47;
4203             pub const EADDRINUSE : c_int = 48;
4204             pub const EADDRNOTAVAIL : c_int = 49;
4205             pub const ENETDOWN : c_int = 50;
4206             pub const ENETUNREACH : c_int = 51;
4207             pub const ENETRESET : c_int = 52;
4208             pub const ECONNABORTED : c_int = 53;
4209             pub const ECONNRESET : c_int = 54;
4210             pub const ENOBUFS : c_int = 55;
4211             pub const EISCONN : c_int = 56;
4212             pub const ENOTCONN : c_int = 57;
4213             pub const ESHUTDOWN : c_int = 58;
4214             pub const ETOOMANYREFS : c_int = 59;
4215             pub const ETIMEDOUT : c_int = 60;
4216             pub const ECONNREFUSED : c_int = 61;
4217             pub const ELOOP : c_int = 62;
4218             pub const ENAMETOOLONG : c_int = 63;
4219             pub const EHOSTDOWN : c_int = 64;
4220             pub const EHOSTUNREACH : c_int = 65;
4221             pub const ENOTEMPTY : c_int = 66;
4222             pub const EPROCLIM : c_int = 67;
4223             pub const EUSERS : c_int = 68;
4224             pub const EDQUOT : c_int = 69;
4225             pub const ESTALE : c_int = 70;
4226             pub const EREMOTE : c_int = 71;
4227             pub const EBADRPC : c_int = 72;
4228             pub const ERPCMISMATCH : c_int = 73;
4229             pub const EPROGUNAVAIL : c_int = 74;
4230             pub const EPROGMISMATCH : c_int = 75;
4231             pub const EPROCUNAVAIL : c_int = 76;
4232             pub const ENOLCK : c_int = 77;
4233             pub const ENOSYS : c_int = 78;
4234             pub const EFTYPE : c_int = 79;
4235             pub const EAUTH : c_int = 80;
4236             pub const ENEEDAUTH : c_int = 81;
4237             pub const EIDRM : c_int = 82;
4238             pub const ENOMSG : c_int = 83;
4239             pub const EOVERFLOW : c_int = 84;
4240             pub const ECANCELED : c_int = 85;
4241             pub const EILSEQ : c_int = 86;
4242             pub const ENOATTR : c_int = 87;
4243             pub const EDOOFUS : c_int = 88;
4244             pub const EBADMSG : c_int = 89;
4245             pub const EMULTIHOP : c_int = 90;
4246             pub const ENOLINK : c_int = 91;
4247             pub const EPROTO : c_int = 92;
4248             pub const ENOMEDIUM : c_int = 93;
4249             pub const EUNUSED94 : c_int = 94;
4250             pub const EUNUSED95 : c_int = 95;
4251             pub const EUNUSED96 : c_int = 96;
4252             pub const EUNUSED97 : c_int = 97;
4253             pub const EUNUSED98 : c_int = 98;
4254             pub const EASYNC : c_int = 99;
4255             pub const ELAST : c_int = 99;
4256         }
4257         pub mod posix01 {
4258             use types::os::arch::c95::{c_int, size_t};
4259             use types::os::common::posix01::rlim_t;
4260
4261             pub const F_DUPFD : c_int = 0;
4262             pub const F_GETFD : c_int = 1;
4263             pub const F_SETFD : c_int = 2;
4264             pub const F_GETFL : c_int = 3;
4265             pub const F_SETFL : c_int = 4;
4266
4267             pub const SIGTRAP : c_int = 5;
4268             pub const SIG_IGN: size_t = 1;
4269
4270             pub const GLOB_APPEND   : c_int = 0x0001;
4271             pub const GLOB_DOOFFS   : c_int = 0x0002;
4272             pub const GLOB_ERR      : c_int = 0x0004;
4273             pub const GLOB_MARK     : c_int = 0x0008;
4274             pub const GLOB_NOCHECK  : c_int = 0x0010;
4275             pub const GLOB_NOSORT   : c_int = 0x0020;
4276             pub const GLOB_NOESCAPE : c_int = 0x2000;
4277
4278             pub const GLOB_NOSPACE  : c_int = -1;
4279             pub const GLOB_ABORTED  : c_int = -2;
4280             pub const GLOB_NOMATCH  : c_int = -3;
4281
4282             pub const POSIX_MADV_NORMAL : c_int = 0;
4283             pub const POSIX_MADV_RANDOM : c_int = 1;
4284             pub const POSIX_MADV_SEQUENTIAL : c_int = 2;
4285             pub const POSIX_MADV_WILLNEED : c_int = 3;
4286             pub const POSIX_MADV_DONTNEED : c_int = 4;
4287
4288             pub const _SC_IOV_MAX : c_int = 56;
4289             pub const _SC_GETGR_R_SIZE_MAX : c_int = 70;
4290             pub const _SC_GETPW_R_SIZE_MAX : c_int = 71;
4291             pub const _SC_LOGIN_NAME_MAX : c_int = 73;
4292             pub const _SC_MQ_PRIO_MAX : c_int = 75;
4293             pub const _SC_THREAD_ATTR_STACKADDR : c_int = 82;
4294             pub const _SC_THREAD_ATTR_STACKSIZE : c_int = 83;
4295             pub const _SC_THREAD_DESTRUCTOR_ITERATIONS : c_int = 85;
4296             pub const _SC_THREAD_KEYS_MAX : c_int = 86;
4297             pub const _SC_THREAD_PRIO_INHERIT : c_int = 87;
4298             pub const _SC_THREAD_PRIO_PROTECT : c_int = 88;
4299             pub const _SC_THREAD_PRIORITY_SCHEDULING : c_int = 89;
4300             pub const _SC_THREAD_PROCESS_SHARED : c_int = 90;
4301             pub const _SC_THREAD_SAFE_FUNCTIONS : c_int = 91;
4302             pub const _SC_THREAD_STACK_MIN : c_int = 93;
4303             pub const _SC_THREAD_THREADS_MAX : c_int = 94;
4304             pub const _SC_THREADS : c_int = 96;
4305             pub const _SC_TTY_NAME_MAX : c_int = 101;
4306             pub const _SC_ATEXIT_MAX : c_int = 107;
4307             pub const _SC_XOPEN_CRYPT : c_int = 108;
4308             pub const _SC_XOPEN_ENH_I18N : c_int = 109;
4309             pub const _SC_XOPEN_LEGACY : c_int = 110;
4310             pub const _SC_XOPEN_REALTIME : c_int = 111;
4311             pub const _SC_XOPEN_REALTIME_THREADS : c_int = 112;
4312             pub const _SC_XOPEN_SHM : c_int = 113;
4313             pub const _SC_XOPEN_UNIX : c_int = 115;
4314             pub const _SC_XOPEN_VERSION : c_int = 116;
4315             pub const _SC_XOPEN_XCU_VERSION : c_int = 117;
4316
4317             pub const PTHREAD_CREATE_JOINABLE: c_int = 0;
4318             pub const PTHREAD_CREATE_DETACHED: c_int = 1;
4319
4320             #[cfg(target_arch = "arm")]
4321             pub const PTHREAD_STACK_MIN: size_t = 4096;
4322
4323             #[cfg(all(target_os = "freebsd",
4324                       any(target_arch = "mips",
4325                           target_arch = "mipsel",
4326                           target_arch = "x86",
4327                           target_arch = "x86_64")))]
4328             pub const PTHREAD_STACK_MIN: size_t = 2048;
4329
4330             #[cfg(target_os = "dragonfly")]
4331             pub const PTHREAD_STACK_MIN: size_t = 1024;
4332
4333             pub const CLOCK_REALTIME: c_int = 0;
4334             pub const CLOCK_MONOTONIC: c_int = 4;
4335
4336             pub const RLIMIT_CPU: c_int = 0;
4337             pub const RLIMIT_FSIZE: c_int = 1;
4338             pub const RLIMIT_DATA: c_int = 2;
4339             pub const RLIMIT_STACK: c_int = 3;
4340             pub const RLIMIT_CORE: c_int = 4;
4341             pub const RLIMIT_RSS: c_int = 5;
4342             pub const RLIMIT_MEMLOCK: c_int = 6;
4343             pub const RLIMIT_NPROC: c_int = 7;
4344             pub const RLIMIT_NOFILE: c_int = 8;
4345             pub const RLIMIT_SBSIZE: c_int = 9;
4346             pub const RLIMIT_VMEM: c_int = 10;
4347             pub const RLIMIT_AS: c_int = RLIMIT_VMEM;
4348             pub const RLIMIT_NPTS: c_int = 11;
4349             pub const RLIMIT_SWAP: c_int = 12;
4350             pub const RLIMIT_KQUEUES: c_int = 13;
4351
4352             pub const RLIM_NLIMITS: rlim_t = 14;
4353             pub const RLIM_INFINITY: rlim_t = 0x7fff_ffff_ffff_ffff;
4354
4355             pub const RUSAGE_SELF: c_int = 0;
4356             pub const RUSAGE_CHILDREN: c_int = -1;
4357             pub const RUSAGE_THREAD: c_int = 1;
4358         }
4359         #[cfg(target_os = "freebsd")]
4360         pub mod posix08 {
4361             use types::os::arch::c95::c_int;
4362             pub const O_CLOEXEC: c_int = 0x100000;
4363             pub const F_DUPFD_CLOEXEC: c_int = 17;
4364         }
4365         #[cfg(target_os = "dragonfly")]
4366         pub mod posix08 {
4367             use types::os::arch::c95::c_int;
4368             pub const O_CLOEXEC: c_int = 0x20000;
4369             pub const F_DUPFD_CLOEXEC: c_int = 17;
4370         }
4371         pub mod bsd44 {
4372             use types::os::arch::c95::c_int;
4373
4374             pub const MADV_NORMAL : c_int = 0;
4375             pub const MADV_RANDOM : c_int = 1;
4376             pub const MADV_SEQUENTIAL : c_int = 2;
4377             pub const MADV_WILLNEED : c_int = 3;
4378             pub const MADV_DONTNEED : c_int = 4;
4379             pub const MADV_FREE : c_int = 5;
4380             pub const MADV_NOSYNC : c_int = 6;
4381             pub const MADV_AUTOSYNC : c_int = 7;
4382             pub const MADV_NOCORE : c_int = 8;
4383             pub const MADV_CORE : c_int = 9;
4384             pub const MADV_PROTECT : c_int = 10;
4385
4386             pub const MINCORE_INCORE : c_int =  0x1;
4387             pub const MINCORE_REFERENCED : c_int = 0x2;
4388             pub const MINCORE_MODIFIED : c_int = 0x4;
4389             pub const MINCORE_REFERENCED_OTHER : c_int = 0x8;
4390             pub const MINCORE_MODIFIED_OTHER : c_int = 0x10;
4391             pub const MINCORE_SUPER : c_int = 0x20;
4392
4393             pub const AF_INET: c_int = 2;
4394             pub const AF_INET6: c_int = 28;
4395             pub const AF_UNIX: c_int = 1;
4396             pub const SOCK_STREAM: c_int = 1;
4397             pub const SOCK_DGRAM: c_int = 2;
4398             pub const SOCK_RAW: c_int = 3;
4399             pub const IPPROTO_TCP: c_int = 6;
4400             pub const IPPROTO_IP: c_int = 0;
4401             pub const IPPROTO_IPV6: c_int = 41;
4402             pub const IP_MULTICAST_TTL: c_int = 10;
4403             pub const IP_MULTICAST_LOOP: c_int = 11;
4404             pub const IP_TTL: c_int = 4;
4405             pub const IP_HDRINCL: c_int = 2;
4406             pub const IP_ADD_MEMBERSHIP: c_int = 12;
4407             pub const IP_DROP_MEMBERSHIP: c_int = 13;
4408             pub const IPV6_ADD_MEMBERSHIP: c_int = 12;
4409             pub const IPV6_DROP_MEMBERSHIP: c_int = 13;
4410
4411             pub const TCP_NODELAY: c_int = 1;
4412             pub const TCP_KEEPIDLE: c_int = 256;
4413             pub const SOL_SOCKET: c_int = 0xffff;
4414             pub const SO_DEBUG: c_int = 0x01;
4415             pub const SO_ACCEPTCONN: c_int = 0x0002;
4416             pub const SO_REUSEADDR: c_int = 0x0004;
4417             pub const SO_KEEPALIVE: c_int = 0x0008;
4418             pub const SO_DONTROUTE: c_int = 0x0010;
4419             pub const SO_BROADCAST: c_int = 0x0020;
4420             pub const SO_USELOOPBACK: c_int = 0x0040;
4421             pub const SO_LINGER: c_int = 0x0080;
4422             pub const SO_OOBINLINE: c_int = 0x0100;
4423             pub const SO_REUSEPORT: c_int = 0x0200;
4424             pub const SO_SNDBUF: c_int = 0x1001;
4425             pub const SO_RCVBUF: c_int = 0x1002;
4426             pub const SO_SNDLOWAT: c_int = 0x1003;
4427             pub const SO_RCVLOWAT: c_int = 0x1004;
4428             pub const SO_SNDTIMEO: c_int = 0x1005;
4429             pub const SO_RCVTIMEO: c_int = 0x1006;
4430             pub const SO_ERROR: c_int = 0x1007;
4431             pub const SO_TYPE: c_int = 0x1008;
4432
4433             pub const IFF_LOOPBACK: c_int = 0x8;
4434
4435             pub const SHUT_RD: c_int = 0;
4436             pub const SHUT_WR: c_int = 1;
4437             pub const SHUT_RDWR: c_int = 2;
4438
4439             pub const LOCK_SH: c_int = 1;
4440             pub const LOCK_EX: c_int = 2;
4441             pub const LOCK_NB: c_int = 4;
4442             pub const LOCK_UN: c_int = 8;
4443         }
4444         pub mod extra {
4445             use types::os::arch::c95::c_int;
4446
4447             pub const O_SYNC : c_int = 128;
4448             pub const O_NONBLOCK : c_int = 4;
4449             pub const CTL_KERN: c_int = 1;
4450             pub const KERN_PROC: c_int = 14;
4451             #[cfg(target_os = "freebsd")]
4452             pub const KERN_PROC_PATHNAME: c_int = 12;
4453             #[cfg(target_os = "dragonfly")]
4454             pub const KERN_PROC_PATHNAME: c_int = 9;
4455
4456             pub const MAP_COPY : c_int = 0x0002;
4457             pub const MAP_RENAME : c_int = 0x0020;
4458             pub const MAP_NORESERVE : c_int = 0x0040;
4459             pub const MAP_HASSEMAPHORE : c_int = 0x0200;
4460             pub const MAP_STACK : c_int = 0x0400;
4461             pub const MAP_NOSYNC : c_int = 0x0800;
4462             pub const MAP_NOCORE : c_int = 0x020000;
4463
4464             pub const IPPROTO_RAW : c_int = 255;
4465         }
4466         pub mod sysconf {
4467             use types::os::arch::c95::c_int;
4468
4469             pub const _SC_ARG_MAX : c_int = 1;
4470             pub const _SC_CHILD_MAX : c_int = 2;
4471             pub const _SC_CLK_TCK : c_int = 3;
4472             pub const _SC_NGROUPS_MAX : c_int = 4;
4473             pub const _SC_OPEN_MAX : c_int = 5;
4474             pub const _SC_JOB_CONTROL : c_int = 6;
4475             pub const _SC_SAVED_IDS : c_int = 7;
4476             pub const _SC_VERSION : c_int = 8;
4477             pub const _SC_BC_BASE_MAX : c_int = 9;
4478             pub const _SC_BC_DIM_MAX : c_int = 10;
4479             pub const _SC_BC_SCALE_MAX : c_int = 11;
4480             pub const _SC_BC_STRING_MAX : c_int = 12;
4481             pub const _SC_COLL_WEIGHTS_MAX : c_int = 13;
4482             pub const _SC_EXPR_NEST_MAX : c_int = 14;
4483             pub const _SC_LINE_MAX : c_int = 15;
4484             pub const _SC_RE_DUP_MAX : c_int = 16;
4485             pub const _SC_2_VERSION : c_int = 17;
4486             pub const _SC_2_C_BIND : c_int = 18;
4487             pub const _SC_2_C_DEV : c_int = 19;
4488             pub const _SC_2_CHAR_TERM : c_int = 20;
4489             pub const _SC_2_FORT_DEV : c_int = 21;
4490             pub const _SC_2_FORT_RUN : c_int = 22;
4491             pub const _SC_2_LOCALEDEF : c_int = 23;
4492             pub const _SC_2_SW_DEV : c_int = 24;
4493             pub const _SC_2_UPE : c_int = 25;
4494             pub const _SC_STREAM_MAX : c_int = 26;
4495             pub const _SC_TZNAME_MAX : c_int = 27;
4496             pub const _SC_ASYNCHRONOUS_IO : c_int = 28;
4497             pub const _SC_MAPPED_FILES : c_int = 29;
4498             pub const _SC_MEMLOCK : c_int = 30;
4499             pub const _SC_MEMLOCK_RANGE : c_int = 31;
4500             pub const _SC_MEMORY_PROTECTION : c_int = 32;
4501             pub const _SC_MESSAGE_PASSING : c_int = 33;
4502             pub const _SC_PRIORITIZED_IO : c_int = 34;
4503             pub const _SC_PRIORITY_SCHEDULING : c_int = 35;
4504             pub const _SC_REALTIME_SIGNALS : c_int = 36;
4505             pub const _SC_SEMAPHORES : c_int = 37;
4506             pub const _SC_FSYNC : c_int = 38;
4507             pub const _SC_SHARED_MEMORY_OBJECTS : c_int = 39;
4508             pub const _SC_SYNCHRONIZED_IO : c_int = 40;
4509             pub const _SC_TIMERS : c_int = 41;
4510             pub const _SC_AIO_LISTIO_MAX : c_int = 42;
4511             pub const _SC_AIO_MAX : c_int = 43;
4512             pub const _SC_AIO_PRIO_DELTA_MAX : c_int = 44;
4513             pub const _SC_DELAYTIMER_MAX : c_int = 45;
4514             pub const _SC_MQ_OPEN_MAX : c_int = 46;
4515             pub const _SC_PAGESIZE : c_int = 47;
4516             pub const _SC_RTSIG_MAX : c_int = 48;
4517             pub const _SC_SEM_NSEMS_MAX : c_int = 49;
4518             pub const _SC_SEM_VALUE_MAX : c_int = 50;
4519             pub const _SC_SIGQUEUE_MAX : c_int = 51;
4520             pub const _SC_TIMER_MAX : c_int = 52;
4521
4522             pub const _PC_NAME_MAX: c_int = 4;
4523             pub const _PC_PATH_MAX: c_int = 5;
4524         }
4525     }
4526
4527     #[cfg(any(target_os = "bitrig", target_os = "openbsd"))]
4528     pub mod os {
4529         pub mod c95 {
4530             use types::os::arch::c95::{c_int, c_uint};
4531
4532             pub const EXIT_FAILURE : c_int = 1;
4533             pub const EXIT_SUCCESS : c_int = 0;
4534             pub const RAND_MAX : c_int = 2147483647;
4535             pub const EOF : c_int = -1;
4536             pub const SEEK_SET : c_int = 0;
4537             pub const SEEK_CUR : c_int = 1;
4538             pub const SEEK_END : c_int = 2;
4539             pub const _IOFBF : c_int = 0;
4540             pub const _IONBF : c_int = 2;
4541             pub const _IOLBF : c_int = 1;
4542             pub const BUFSIZ : c_uint = 1024;
4543             pub const FOPEN_MAX : c_uint = 20;
4544             pub const FILENAME_MAX : c_uint = 1024;
4545             pub const L_tmpnam : c_uint = 1024;
4546             pub const TMP_MAX : c_uint = 308915776;
4547         }
4548         pub mod c99 {
4549         }
4550         pub mod posix88 {
4551             use types::common::c95::c_void;
4552             use types::os::arch::c95::c_int;
4553             use types::os::arch::posix88::mode_t;
4554
4555             pub const O_RDONLY : c_int = 0;
4556             pub const O_WRONLY : c_int = 1;
4557             pub const O_RDWR : c_int = 2;
4558             pub const O_APPEND : c_int = 8;
4559             pub const O_CREAT : c_int = 512;
4560             pub const O_EXCL : c_int = 2048;
4561             pub const O_NOCTTY : c_int = 32768;
4562             pub const O_TRUNC : c_int = 1024;
4563             pub const S_IFIFO : mode_t = 4096;
4564             pub const S_IFCHR : mode_t = 8192;
4565             pub const S_IFBLK : mode_t = 24576;
4566             pub const S_IFDIR : mode_t = 16384;
4567             pub const S_IFREG : mode_t = 32768;
4568             pub const S_IFLNK : mode_t = 40960;
4569             pub const S_IFSOCK : mode_t = 49152;
4570             pub const S_IFMT : mode_t = 61440;
4571             pub const S_IEXEC : mode_t = 64;
4572             pub const S_IWRITE : mode_t = 128;
4573             pub const S_IREAD : mode_t = 256;
4574             pub const S_IRWXU : mode_t = 448;
4575             pub const S_IXUSR : mode_t = 64;
4576             pub const S_IWUSR : mode_t = 128;
4577             pub const S_IRUSR : mode_t = 256;
4578             pub const S_IRWXG : mode_t = 56;
4579             pub const S_IXGRP : mode_t = 8;
4580             pub const S_IWGRP : mode_t = 16;
4581             pub const S_IRGRP : mode_t = 32;
4582             pub const S_IRWXO : mode_t = 7;
4583             pub const S_IXOTH : mode_t = 1;
4584             pub const S_IWOTH : mode_t = 2;
4585             pub const S_IROTH : mode_t = 4;
4586             pub const F_OK : c_int = 0;
4587             pub const R_OK : c_int = 4;
4588             pub const W_OK : c_int = 2;
4589             pub const X_OK : c_int = 1;
4590             pub const STDIN_FILENO : c_int = 0;
4591             pub const STDOUT_FILENO : c_int = 1;
4592             pub const STDERR_FILENO : c_int = 2;
4593             pub const F_LOCK : c_int = 1;
4594             pub const F_TEST : c_int = 3;
4595             pub const F_TLOCK : c_int = 2;
4596             pub const F_ULOCK : c_int = 0;
4597             pub const SIGHUP : c_int = 1;
4598             pub const SIGINT : c_int = 2;
4599             pub const SIGQUIT : c_int = 3;
4600             pub const SIGILL : c_int = 4;
4601             pub const SIGABRT : c_int = 6;
4602             pub const SIGFPE : c_int = 8;
4603             pub const SIGKILL : c_int = 9;
4604             pub const SIGSEGV : c_int = 11;
4605             pub const SIGPIPE : c_int = 13;
4606             pub const SIGALRM : c_int = 14;
4607             pub const SIGTERM : c_int = 15;
4608
4609             pub const PROT_NONE : c_int = 0;
4610             pub const PROT_READ : c_int = 1;
4611             pub const PROT_WRITE : c_int = 2;
4612             pub const PROT_EXEC : c_int = 4;
4613
4614             pub const MAP_FILE : c_int = 0x0000;
4615             pub const MAP_SHARED : c_int = 0x0001;
4616             pub const MAP_PRIVATE : c_int = 0x0002;
4617             pub const MAP_FIXED : c_int = 0x0010;
4618             pub const MAP_ANON : c_int = 0x1000;
4619
4620             pub const MAP_FAILED : *mut c_void = !0 as *mut c_void;
4621
4622             pub const MCL_CURRENT : c_int = 0x0001;
4623             pub const MCL_FUTURE : c_int = 0x0002;
4624
4625             pub const MS_ASYNC : c_int = 0x0001;
4626             pub const MS_SYNC : c_int = 0x0002;
4627             pub const MS_INVALIDATE : c_int = 0x0004;
4628
4629             pub const EPERM : c_int = 1;
4630             pub const ENOENT : c_int = 2;
4631             pub const ESRCH : c_int = 3;
4632             pub const EINTR : c_int = 4;
4633             pub const EIO : c_int = 5;
4634             pub const ENXIO : c_int = 6;
4635             pub const E2BIG : c_int = 7;
4636             pub const ENOEXEC : c_int = 8;
4637             pub const EBADF : c_int = 9;
4638             pub const ECHILD : c_int = 10;
4639             pub const EDEADLK : c_int = 11;
4640             pub const ENOMEM : c_int = 12;
4641             pub const EACCES : c_int = 13;
4642             pub const EFAULT : c_int = 14;
4643             pub const ENOTBLK : c_int = 15;
4644             pub const EBUSY : c_int = 16;
4645             pub const EEXIST : c_int = 17;
4646             pub const EXDEV : c_int = 18;
4647             pub const ENODEV : c_int = 19;
4648             pub const ENOTDIR : c_int = 20;
4649             pub const EISDIR : c_int = 21;
4650             pub const EINVAL : c_int = 22;
4651             pub const ENFILE : c_int = 23;
4652             pub const EMFILE : c_int = 24;
4653             pub const ENOTTY : c_int = 25;
4654             pub const ETXTBSY : c_int = 26;
4655             pub const EFBIG : c_int = 27;
4656             pub const ENOSPC : c_int = 28;
4657             pub const ESPIPE : c_int = 29;
4658             pub const EROFS : c_int = 30;
4659             pub const EMLINK : c_int = 31;
4660             pub const EPIPE : c_int = 32;
4661             pub const EDOM : c_int = 33;
4662             pub const ERANGE : c_int = 34;
4663             pub const EAGAIN : c_int = 35;
4664             pub const EWOULDBLOCK : c_int = 35;
4665             pub const EINPROGRESS : c_int = 36;
4666             pub const EALREADY : c_int = 37;
4667             pub const ENOTSOCK : c_int = 38;
4668             pub const EDESTADDRREQ : c_int = 39;
4669             pub const EMSGSIZE : c_int = 40;
4670             pub const EPROTOTYPE : c_int = 41;
4671             pub const ENOPROTOOPT : c_int = 42;
4672             pub const EPROTONOSUPPORT : c_int = 43;
4673             pub const ESOCKTNOSUPPORT : c_int = 44;
4674             pub const EOPNOTSUPP : c_int = 45;
4675             pub const EPFNOSUPPORT : c_int = 46;
4676             pub const EAFNOSUPPORT : c_int = 47;
4677             pub const EADDRINUSE : c_int = 48;
4678             pub const EADDRNOTAVAIL : c_int = 49;
4679             pub const ENETDOWN : c_int = 50;
4680             pub const ENETUNREACH : c_int = 51;
4681             pub const ENETRESET : c_int = 52;
4682             pub const ECONNABORTED : c_int = 53;
4683             pub const ECONNRESET : c_int = 54;
4684             pub const ENOBUFS : c_int = 55;
4685             pub const EISCONN : c_int = 56;
4686             pub const ENOTCONN : c_int = 57;
4687             pub const ESHUTDOWN : c_int = 58;
4688             pub const ETOOMANYREFS : c_int = 59;
4689             pub const ETIMEDOUT : c_int = 60;
4690             pub const ECONNREFUSED : c_int = 61;
4691             pub const ELOOP : c_int = 62;
4692             pub const ENAMETOOLONG : c_int = 63;
4693             pub const EHOSTDOWN : c_int = 64;
4694             pub const EHOSTUNREACH : c_int = 65;
4695             pub const ENOTEMPTY : c_int = 66;
4696             pub const EPROCLIM : c_int = 67;
4697             pub const EUSERS : c_int = 68;
4698             pub const EDQUOT : c_int = 69;
4699             pub const ESTALE : c_int = 70;
4700             pub const EREMOTE : c_int = 71;
4701             pub const EBADRPC : c_int = 72;
4702             pub const ERPCMISMATCH : c_int = 73;
4703             pub const EPROGUNAVAIL : c_int = 74;
4704             pub const EPROGMISMATCH : c_int = 75;
4705             pub const EPROCUNAVAIL : c_int = 76;
4706             pub const ENOLCK : c_int = 77;
4707             pub const ENOSYS : c_int = 78;
4708             pub const EFTYPE : c_int = 79;
4709             pub const EAUTH : c_int = 80;
4710             pub const ENEEDAUTH : c_int = 81;
4711             pub const EIPSEC : c_int = 82;
4712             pub const ENOATTR : c_int = 83;
4713             pub const EILSEQ : c_int = 84;
4714             pub const ENOMEDIUM : c_int = 85;
4715             pub const EMEDIUMTYPE : c_int = 86;
4716             pub const EOVERFLOW : c_int = 87;
4717             pub const ECANCELED : c_int = 88;
4718             pub const EIDRM : c_int = 89;
4719             pub const ENOMSG : c_int = 90;
4720             pub const ENOTSUP : c_int = 91;
4721             pub const ELAST : c_int = 91; // must be equal to largest errno
4722         }
4723         pub mod posix01 {
4724             use types::os::arch::c95::{c_int, size_t};
4725             use types::os::common::posix01::rlim_t;
4726
4727             pub const F_DUPFD : c_int = 0;
4728             pub const F_GETFD : c_int = 1;
4729             pub const F_SETFD : c_int = 2;
4730             pub const F_GETFL : c_int = 3;
4731             pub const F_SETFL : c_int = 4;
4732             pub const F_GETOWN : c_int = 5;
4733             pub const F_SETOWN : c_int = 6;
4734             pub const F_GETLK : c_int = 7;
4735             pub const F_SETLK : c_int = 8;
4736             pub const F_SETLKW : c_int = 9;
4737
4738             pub const SIGTRAP : c_int = 5;
4739             pub const SIG_IGN: size_t = 1;
4740
4741             pub const GLOB_APPEND   : c_int = 0x0001;
4742             pub const GLOB_DOOFFS   : c_int = 0x0002;
4743             pub const GLOB_ERR      : c_int = 0x0004;
4744             pub const GLOB_MARK     : c_int = 0x0008;
4745             pub const GLOB_NOCHECK  : c_int = 0x0010;
4746             pub const GLOB_NOSORT   : c_int = 0x0020;
4747             pub const GLOB_NOESCAPE : c_int = 0x1000;
4748
4749             pub const GLOB_NOSPACE  : c_int = -1;
4750             pub const GLOB_ABORTED  : c_int = -2;
4751             pub const GLOB_NOMATCH  : c_int = -3;
4752             pub const GLOB_NOSYS : c_int = -4;
4753
4754             pub const POSIX_MADV_NORMAL : c_int = 0;
4755             pub const POSIX_MADV_RANDOM : c_int = 1;
4756             pub const POSIX_MADV_SEQUENTIAL : c_int = 2;
4757             pub const POSIX_MADV_WILLNEED : c_int = 3;
4758             pub const POSIX_MADV_DONTNEED : c_int = 4;
4759
4760             pub const _SC_IOV_MAX : c_int = 51;
4761             pub const _SC_GETGR_R_SIZE_MAX : c_int = 100;
4762             pub const _SC_GETPW_R_SIZE_MAX : c_int = 101;
4763             pub const _SC_LOGIN_NAME_MAX : c_int = 102;
4764             pub const _SC_MQ_PRIO_MAX : c_int = 59;
4765             pub const _SC_THREAD_ATTR_STACKADDR : c_int = 77;
4766             pub const _SC_THREAD_ATTR_STACKSIZE : c_int = 78;
4767             pub const _SC_THREAD_DESTRUCTOR_ITERATIONS : c_int = 80;
4768             pub const _SC_THREAD_KEYS_MAX : c_int = 81;
4769             pub const _SC_THREAD_PRIO_INHERIT : c_int = 82;
4770             pub const _SC_THREAD_PRIO_PROTECT : c_int = 83;
4771             pub const _SC_THREAD_PRIORITY_SCHEDULING : c_int = 84;
4772             pub const _SC_THREAD_PROCESS_SHARED : c_int = 85;
4773             pub const _SC_THREAD_SAFE_FUNCTIONS : c_int = 103;
4774             pub const _SC_THREAD_STACK_MIN : c_int = 89;
4775             pub const _SC_THREAD_THREADS_MAX : c_int = 90;
4776             pub const _SC_THREADS : c_int = 91;
4777             pub const _SC_TTY_NAME_MAX : c_int = 107;
4778             pub const _SC_ATEXIT_MAX : c_int = 46;
4779             pub const _SC_XOPEN_CRYPT : c_int = 117;
4780             pub const _SC_XOPEN_ENH_I18N : c_int = 118;
4781             pub const _SC_XOPEN_LEGACY : c_int = 119;
4782             pub const _SC_XOPEN_REALTIME : c_int = 120;
4783             pub const _SC_XOPEN_REALTIME_THREADS : c_int = 121;
4784             pub const _SC_XOPEN_SHM : c_int = 30;
4785             pub const _SC_XOPEN_UNIX : c_int = 123;
4786             pub const _SC_XOPEN_VERSION : c_int = 125;
4787
4788             pub const PTHREAD_CREATE_JOINABLE : c_int = 0;
4789             pub const PTHREAD_CREATE_DETACHED : c_int = 1;
4790             pub const PTHREAD_STACK_MIN : size_t = 2048;
4791
4792             pub const CLOCK_REALTIME : c_int = 0;
4793             pub const CLOCK_MONOTONIC : c_int = 3;
4794
4795             pub const RLIMIT_CPU: c_int = 0;
4796             pub const RLIMIT_FSIZE: c_int = 1;
4797             pub const RLIMIT_DATA: c_int = 2;
4798             pub const RLIMIT_STACK: c_int = 3;
4799             pub const RLIMIT_CORE: c_int = 4;
4800             pub const RLIMIT_RSS: c_int = 5;
4801             pub const RLIMIT_MEMLOCK: c_int = 6;
4802             pub const RLIMIT_NPROC: c_int = 7;
4803             pub const RLIMIT_NOFILE: c_int = 8;
4804             pub const RLIM_NLIMITS: c_int = 9;
4805
4806             pub const RLIM_INFINITY: rlim_t = 0x7fff_ffff_ffff_ffff;
4807             pub const RLIM_SAVED_MAX: rlim_t = RLIM_INFINITY;
4808             pub const RLIM_SAVED_CUR: rlim_t = RLIM_INFINITY;
4809
4810             pub const RUSAGE_SELF: c_int = 0;
4811             pub const RUSAGE_CHILDREN: c_int = -1;
4812             pub const RUSAGE_THREAD: c_int = 1;
4813         }
4814         pub mod posix08 {
4815             use types::os::arch::c95::c_int;
4816             pub const O_CLOEXEC: c_int = 0x10000;
4817             pub const F_DUPFD_CLOEXEC: c_int = 10;
4818         }
4819         pub mod bsd44 {
4820             use types::os::arch::c95::c_int;
4821
4822             pub const MADV_NORMAL : c_int = 0;
4823             pub const MADV_RANDOM : c_int = 1;
4824             pub const MADV_SEQUENTIAL : c_int = 2;
4825             pub const MADV_WILLNEED : c_int = 3;
4826             pub const MADV_DONTNEED : c_int = 4;
4827             pub const MADV_FREE : c_int = 6;
4828
4829             pub const AF_UNIX: c_int = 1;
4830             pub const AF_INET: c_int = 2;
4831             pub const AF_INET6: c_int = 24;
4832             pub const SOCK_STREAM: c_int = 1;
4833             pub const SOCK_DGRAM: c_int = 2;
4834             pub const SOCK_RAW: c_int = 3;
4835             pub const IPPROTO_TCP: c_int = 6;
4836             pub const IPPROTO_IP: c_int = 0;
4837             pub const IPPROTO_IPV6: c_int = 41;
4838             pub const IP_MULTICAST_TTL: c_int = 10;
4839             pub const IP_MULTICAST_LOOP: c_int = 11;
4840             pub const IP_TTL: c_int = 4;
4841             pub const IP_HDRINCL: c_int = 2;
4842             pub const IP_ADD_MEMBERSHIP: c_int = 12;
4843             pub const IP_DROP_MEMBERSHIP: c_int = 13;
4844             pub const IPV6_ADD_MEMBERSHIP: c_int = 12; // don't exist
4845             pub const IPV6_DROP_MEMBERSHIP: c_int = 13; // don't exist
4846
4847             pub const TCP_NODELAY: c_int = 0x01;
4848             pub const SOL_SOCKET: c_int = 0xffff;
4849             pub const SO_DEBUG: c_int = 0x01;
4850             pub const SO_ACCEPTCONN: c_int = 0x0002;
4851             pub const SO_REUSEADDR: c_int = 0x0004;
4852             pub const SO_KEEPALIVE: c_int = 0x0008;
4853             pub const SO_DONTROUTE: c_int = 0x0010;
4854             pub const SO_BROADCAST: c_int = 0x0020;
4855             pub const SO_USELOOPBACK: c_int = 0x0040;
4856             pub const SO_LINGER: c_int = 0x0080;
4857             pub const SO_OOBINLINE: c_int = 0x0100;
4858             pub const SO_REUSEPORT: c_int = 0x0200;
4859             pub const SO_SNDBUF: c_int = 0x1001;
4860             pub const SO_RCVBUF: c_int = 0x1002;
4861             pub const SO_SNDLOWAT: c_int = 0x1003;
4862             pub const SO_RCVLOWAT: c_int = 0x1004;
4863             pub const SO_SNDTIMEO: c_int = 0x1005;
4864             pub const SO_RCVTIMEO: c_int = 0x1006;
4865             pub const SO_ERROR: c_int = 0x1007;
4866             pub const SO_TYPE: c_int = 0x1008;
4867
4868             pub const IFF_LOOPBACK: c_int = 0x8;
4869
4870             pub const SHUT_RD: c_int = 0;
4871             pub const SHUT_WR: c_int = 1;
4872             pub const SHUT_RDWR: c_int = 2;
4873
4874             pub const LOCK_SH: c_int = 1;
4875             pub const LOCK_EX: c_int = 2;
4876             pub const LOCK_NB: c_int = 4;
4877             pub const LOCK_UN: c_int = 8;
4878         }
4879         pub mod extra {
4880             use types::os::arch::c95::c_int;
4881
4882             pub const O_DSYNC : c_int = 128; // same as SYNC
4883             pub const O_SYNC : c_int = 128;
4884             pub const O_NONBLOCK : c_int = 4;
4885             pub const CTL_KERN : c_int = 1;
4886             pub const KERN_PROC : c_int = 66;
4887
4888             pub const MAP_COPY : c_int = 0x0002;
4889             pub const MAP_RENAME : c_int = 0x0000;
4890             pub const MAP_NORESERVE : c_int = 0x0000;
4891             pub const MAP_NOEXTEND : c_int = 0x0000;
4892             pub const MAP_HASSEMAPHORE : c_int = 0x0000;
4893
4894             pub const IPPROTO_RAW : c_int = 255;
4895
4896             pub const PATH_MAX: c_int = 1024;
4897         }
4898         pub mod sysconf {
4899             use types::os::arch::c95::c_int;
4900
4901             pub const _SC_ARG_MAX : c_int = 1;
4902             pub const _SC_CHILD_MAX : c_int = 2;
4903             pub const _SC_CLK_TCK : c_int = 3;
4904             pub const _SC_NGROUPS_MAX : c_int = 4;
4905             pub const _SC_OPEN_MAX : c_int = 5;
4906             pub const _SC_JOB_CONTROL : c_int = 6;
4907             pub const _SC_SAVED_IDS : c_int = 7;
4908             pub const _SC_VERSION : c_int = 8;
4909             pub const _SC_BC_BASE_MAX : c_int = 9;
4910             pub const _SC_BC_DIM_MAX : c_int = 10;
4911             pub const _SC_BC_SCALE_MAX : c_int = 11;
4912             pub const _SC_BC_STRING_MAX : c_int = 12;
4913             pub const _SC_COLL_WEIGHTS_MAX : c_int = 13;
4914             pub const _SC_EXPR_NEST_MAX : c_int = 14;
4915             pub const _SC_LINE_MAX : c_int = 15;
4916             pub const _SC_RE_DUP_MAX : c_int = 16;
4917             pub const _SC_2_VERSION : c_int = 17;
4918             pub const _SC_2_C_BIND : c_int = 18;
4919             pub const _SC_2_C_DEV : c_int = 19;
4920             pub const _SC_2_CHAR_TERM : c_int = 20;
4921             pub const _SC_2_FORT_DEV : c_int = 21;
4922             pub const _SC_2_FORT_RUN : c_int = 22;
4923             pub const _SC_2_LOCALEDEF : c_int = 23;
4924             pub const _SC_2_SW_DEV : c_int = 24;
4925             pub const _SC_2_UPE : c_int = 25;
4926             pub const _SC_STREAM_MAX : c_int = 26;
4927             pub const _SC_TZNAME_MAX : c_int = 27;
4928             pub const _SC_PAGESIZE : c_int = 28;
4929             pub const _SC_FSYNC : c_int = 29;
4930             pub const _SC_SEM_NSEMS_MAX : c_int = 31;
4931             pub const _SC_SEM_VALUE_MAX : c_int = 32;
4932             pub const _SC_AIO_LISTIO_MAX : c_int = 42;
4933             pub const _SC_AIO_MAX : c_int = 43;
4934             pub const _SC_AIO_PRIO_DELTA_MAX : c_int = 44;
4935             pub const _SC_ASYNCHRONOUS_IO : c_int = 45;
4936             pub const _SC_DELAYTIMER_MAX : c_int = 50;
4937             pub const _SC_MAPPED_FILES : c_int = 53;
4938             pub const _SC_MEMLOCK : c_int = 54;
4939             pub const _SC_MEMLOCK_RANGE : c_int = 55;
4940             pub const _SC_MEMORY_PROTECTION : c_int = 56;
4941             pub const _SC_MESSAGE_PASSING : c_int = 57;
4942             pub const _SC_MQ_OPEN_MAX : c_int = 58;
4943             pub const _SC_PRIORITIZED_IO : c_int = 60;
4944             pub const _SC_PRIORITY_SCHEDULING : c_int = 61;
4945             pub const _SC_REALTIME_SIGNALS : c_int = 64;
4946             pub const _SC_RTSIG_MAX : c_int = 66;
4947             pub const _SC_SEMAPHORES : c_int = 67;
4948             pub const _SC_SHARED_MEMORY_OBJECTS : c_int = 68;
4949             pub const _SC_SIGQUEUE_MAX : c_int = 70;
4950             pub const _SC_SYNCHRONIZED_IO : c_int = 75;
4951             pub const _SC_TIMER_MAX : c_int = 93;
4952             pub const _SC_TIMERS : c_int = 94;
4953
4954             pub const _PC_NAME_MAX: c_int = 4;
4955             pub const _PC_PATH_MAX: c_int = 5;
4956         }
4957     }
4958
4959     #[cfg(target_os = "netbsd")]
4960     pub mod os {
4961         pub mod c95 {
4962             use types::os::arch::c95::{c_int, c_uint};
4963
4964             pub const EXIT_FAILURE : c_int = 1;
4965             pub const EXIT_SUCCESS : c_int = 0;
4966             pub const RAND_MAX : c_int = 2147483647;
4967             pub const EOF : c_int = -1;
4968             pub const SEEK_SET : c_int = 0;
4969             pub const SEEK_CUR : c_int = 1;
4970             pub const SEEK_END : c_int = 2;
4971             pub const _IOFBF : c_int = 0;
4972             pub const _IONBF : c_int = 2;
4973             pub const _IOLBF : c_int = 1;
4974             pub const BUFSIZ : c_uint = 1024;
4975             pub const FOPEN_MAX : c_uint = 20;
4976             pub const FILENAME_MAX : c_uint = 1024;
4977             pub const L_tmpnam : c_uint = 1024;
4978             pub const TMP_MAX : c_uint = 308915776;
4979         }
4980         pub mod c99 {
4981         }
4982         pub mod posix88 {
4983             use types::common::c95::c_void;
4984             use types::os::arch::c95::c_int;
4985             use types::os::arch::posix88::mode_t;
4986
4987             pub const O_RDONLY : c_int = 0;
4988             pub const O_WRONLY : c_int = 1;
4989             pub const O_RDWR : c_int = 2;
4990             pub const O_APPEND : c_int = 8;
4991             pub const O_CREAT : c_int = 512;
4992             pub const O_EXCL : c_int = 2048;
4993             pub const O_NOCTTY : c_int = 32768;
4994             pub const O_TRUNC : c_int = 1024;
4995             pub const S_IFIFO : mode_t = 4096;
4996             pub const S_IFCHR : mode_t = 8192;
4997             pub const S_IFBLK : mode_t = 24576;
4998             pub const S_IFDIR : mode_t = 16384;
4999             pub const S_IFREG : mode_t = 32768;
5000             pub const S_IFLNK : mode_t = 40960;
5001             pub const S_IFSOCK : mode_t = 49152;
5002             pub const S_IFMT : mode_t = 61440;
5003             pub const S_IEXEC : mode_t = 64;
5004             pub const S_IWRITE : mode_t = 128;
5005             pub const S_IREAD : mode_t = 256;
5006             pub const S_IRWXU : mode_t = 448;
5007             pub const S_IXUSR : mode_t = 64;
5008             pub const S_IWUSR : mode_t = 128;
5009             pub const S_IRUSR : mode_t = 256;
5010             pub const S_IRWXG : mode_t = 56;
5011             pub const S_IXGRP : mode_t = 8;
5012             pub const S_IWGRP : mode_t = 16;
5013             pub const S_IRGRP : mode_t = 32;
5014             pub const S_IRWXO : mode_t = 7;
5015             pub const S_IXOTH : mode_t = 1;
5016             pub const S_IWOTH : mode_t = 2;
5017             pub const S_IROTH : mode_t = 4;
5018             pub const F_OK : c_int = 0;
5019             pub const R_OK : c_int = 4;
5020             pub const W_OK : c_int = 2;
5021             pub const X_OK : c_int = 1;
5022             pub const STDIN_FILENO : c_int = 0;
5023             pub const STDOUT_FILENO : c_int = 1;
5024             pub const STDERR_FILENO : c_int = 2;
5025             pub const F_LOCK : c_int = 1;
5026             pub const F_TEST : c_int = 3;
5027             pub const F_TLOCK : c_int = 2;
5028             pub const F_ULOCK : c_int = 0;
5029             pub const SIGHUP : c_int = 1;
5030             pub const SIGINT : c_int = 2;
5031             pub const SIGQUIT : c_int = 3;
5032             pub const SIGILL : c_int = 4;
5033             pub const SIGABRT : c_int = 6;
5034             pub const SIGFPE : c_int = 8;
5035             pub const SIGKILL : c_int = 9;
5036             pub const SIGSEGV : c_int = 11;
5037             pub const SIGPIPE : c_int = 13;
5038             pub const SIGALRM : c_int = 14;
5039             pub const SIGTERM : c_int = 15;
5040
5041             pub const PROT_NONE : c_int = 0;
5042             pub const PROT_READ : c_int = 1;
5043             pub const PROT_WRITE : c_int = 2;
5044             pub const PROT_EXEC : c_int = 4;
5045
5046             pub const MAP_FILE : c_int = 0;
5047             pub const MAP_SHARED : c_int = 1;
5048             pub const MAP_PRIVATE : c_int = 2;
5049             pub const MAP_FIXED : c_int = 16;
5050             pub const MAP_ANON : c_int = 4096;
5051
5052             pub const MAP_FAILED : *mut c_void = !0 as *mut c_void;
5053
5054             pub const MCL_CURRENT : c_int = 1;
5055             pub const MCL_FUTURE : c_int = 2;
5056
5057             pub const MS_ASYNC : c_int = 1;
5058             pub const MS_SYNC : c_int = 4;
5059             pub const MS_INVALIDATE : c_int = 2;
5060
5061             pub const EPERM : c_int = 1;
5062             pub const ENOENT : c_int = 2;
5063             pub const ESRCH : c_int = 3;
5064             pub const EINTR : c_int = 4;
5065             pub const EIO : c_int = 5;
5066             pub const ENXIO : c_int = 6;
5067             pub const E2BIG : c_int = 7;
5068             pub const ENOEXEC : c_int = 8;
5069             pub const EBADF : c_int = 9;
5070             pub const ECHILD : c_int = 10;
5071             pub const EDEADLK : c_int = 11;
5072             pub const ENOMEM : c_int = 12;
5073             pub const EACCES : c_int = 13;
5074             pub const EFAULT : c_int = 14;
5075             pub const ENOTBLK : c_int = 15;
5076             pub const EBUSY : c_int = 16;
5077             pub const EEXIST : c_int = 17;
5078             pub const EXDEV : c_int = 18;
5079             pub const ENODEV : c_int = 19;
5080             pub const ENOTDIR : c_int = 20;
5081             pub const EISDIR : c_int = 21;
5082             pub const EINVAL : c_int = 22;
5083             pub const ENFILE : c_int = 23;
5084             pub const EMFILE : c_int = 24;
5085             pub const ENOTTY : c_int = 25;
5086             pub const ETXTBSY : c_int = 26;
5087             pub const EFBIG : c_int = 27;
5088             pub const ENOSPC : c_int = 28;
5089             pub const ESPIPE : c_int = 29;
5090             pub const EROFS : c_int = 30;
5091             pub const EMLINK : c_int = 31;
5092             pub const EPIPE : c_int = 32;
5093             pub const EDOM : c_int = 33;
5094             pub const ERANGE : c_int = 34;
5095             pub const EAGAIN : c_int = 35;
5096             pub const EWOULDBLOCK : c_int = 35;
5097             pub const EINPROGRESS : c_int = 36;
5098             pub const EALREADY : c_int = 37;
5099             pub const ENOTSOCK : c_int = 38;
5100             pub const EDESTADDRREQ : c_int = 39;
5101             pub const EMSGSIZE : c_int = 40;
5102             pub const EPROTOTYPE : c_int = 41;
5103             pub const ENOPROTOOPT : c_int = 42;
5104             pub const EPROTONOSUPPORT : c_int = 43;
5105             pub const ESOCKTNOSUPPORT : c_int = 44;
5106             pub const EOPNOTSUPP : c_int = 45;
5107             pub const EPFNOSUPPORT : c_int = 46;
5108             pub const EAFNOSUPPORT : c_int = 47;
5109             pub const EADDRINUSE : c_int = 48;
5110             pub const EADDRNOTAVAIL : c_int = 49;
5111             pub const ENETDOWN : c_int = 50;
5112             pub const ENETUNREACH : c_int = 51;
5113             pub const ENETRESET : c_int = 52;
5114             pub const ECONNABORTED : c_int = 53;
5115             pub const ECONNRESET : c_int = 54;
5116             pub const ENOBUFS : c_int = 55;
5117             pub const EISCONN : c_int = 56;
5118             pub const ENOTCONN : c_int = 57;
5119             pub const ESHUTDOWN : c_int = 58;
5120             pub const ETOOMANYREFS : c_int = 59;
5121             pub const ETIMEDOUT : c_int = 60;
5122             pub const ECONNREFUSED : c_int = 61;
5123             pub const ELOOP : c_int = 62;
5124             pub const ENAMETOOLONG : c_int = 63;
5125             pub const EHOSTDOWN : c_int = 64;
5126             pub const EHOSTUNREACH : c_int = 65;
5127             pub const ENOTEMPTY : c_int = 66;
5128             pub const EPROCLIM : c_int = 67;
5129             pub const EUSERS : c_int = 68;
5130             pub const EDQUOT : c_int = 69;
5131             pub const ESTALE : c_int = 70;
5132             pub const EREMOTE : c_int = 71;
5133             pub const EBADRPC : c_int = 72;
5134             pub const ERPCMISMATCH : c_int = 73;
5135             pub const EPROGUNAVAIL : c_int = 74;
5136             pub const EPROGMISMATCH : c_int = 75;
5137             pub const EPROCUNAVAIL : c_int = 76;
5138             pub const ENOLCK : c_int = 77;
5139             pub const ENOSYS : c_int = 78;
5140             pub const EFTYPE : c_int = 79;
5141             pub const EAUTH : c_int = 80;
5142             pub const ENEEDAUTH : c_int = 81;
5143             pub const ENOATTR : c_int = 93;
5144             pub const EILSEQ : c_int = 85;
5145             pub const EOVERFLOW : c_int = 84;
5146             pub const ECANCELED : c_int = 87;
5147             pub const EIDRM : c_int = 82;
5148             pub const ENOMSG : c_int = 83;
5149             pub const ENOTSUP : c_int = 86;
5150             pub const ELAST : c_int = 96;
5151         }
5152         pub mod posix01 {
5153             use types::os::arch::c95::{c_int, size_t};
5154             use types::os::common::posix01::rlim_t;
5155
5156             pub const F_DUPFD : c_int = 0;
5157             pub const F_GETFD : c_int = 1;
5158             pub const F_SETFD : c_int = 2;
5159             pub const F_GETFL : c_int = 3;
5160             pub const F_SETFL : c_int = 4;
5161             pub const F_GETOWN : c_int = 5;
5162             pub const F_SETOWN : c_int = 6;
5163             pub const F_GETLK : c_int = 7;
5164             pub const F_SETLK : c_int = 8;
5165             pub const F_SETLKW : c_int = 9;
5166
5167             pub const SIGTRAP : c_int = 5;
5168             pub const SIG_IGN : size_t = 1;
5169
5170             pub const GLOB_APPEND : c_int = 1;
5171             pub const GLOB_DOOFFS : c_int = 2;
5172             pub const GLOB_ERR : c_int = 4;
5173             pub const GLOB_MARK : c_int = 8;
5174             pub const GLOB_NOCHECK : c_int = 16;
5175             pub const GLOB_NOSORT : c_int = 32;
5176             pub const GLOB_NOESCAPE : c_int = 4096;
5177
5178             pub const GLOB_NOSPACE : c_int = -1;
5179             pub const GLOB_ABORTED : c_int = -2;
5180             pub const GLOB_NOMATCH : c_int = -3;
5181             pub const GLOB_NOSYS : c_int = -4;
5182
5183             pub const POSIX_MADV_NORMAL : c_int = 0;
5184             pub const POSIX_MADV_RANDOM : c_int = 1;
5185             pub const POSIX_MADV_SEQUENTIAL : c_int = 2;
5186             pub const POSIX_MADV_WILLNEED : c_int = 3;
5187             pub const POSIX_MADV_DONTNEED : c_int = 4;
5188
5189             pub const _SC_IOV_MAX : c_int = 32;
5190             pub const _SC_GETGR_R_SIZE_MAX : c_int = 47;
5191             pub const _SC_GETPW_R_SIZE_MAX : c_int = 48;
5192             pub const _SC_LOGIN_NAME_MAX : c_int = 37;
5193             pub const _SC_MQ_PRIO_MAX : c_int = 55;
5194             pub const _SC_THREAD_ATTR_STACKADDR : c_int = 61;
5195             pub const _SC_THREAD_ATTR_STACKSIZE : c_int = 62;
5196             pub const _SC_THREAD_DESTRUCTOR_ITERATIONS : c_int = 57;
5197             pub const _SC_THREAD_KEYS_MAX : c_int = 58;
5198             pub const _SC_THREAD_PRIO_INHERIT : c_int = 64;
5199             pub const _SC_THREAD_PRIO_PROTECT : c_int = 65;
5200             pub const _SC_THREAD_PRIORITY_SCHEDULING : c_int = 63;
5201             pub const _SC_THREAD_PROCESS_SHARED : c_int = 66;
5202             pub const _SC_THREAD_SAFE_FUNCTIONS : c_int = 67;
5203             pub const _SC_THREAD_STACK_MIN : c_int = 59;
5204             pub const _SC_THREAD_THREADS_MAX : c_int = 60;
5205             pub const _SC_THREADS : c_int = 41;
5206             pub const _SC_TTY_NAME_MAX : c_int = 68;
5207             pub const _SC_ATEXIT_MAX : c_int = 40;
5208             pub const _SC_XOPEN_SHM : c_int = 30;
5209
5210             pub const PTHREAD_CREATE_JOINABLE : c_int = 0;
5211             pub const PTHREAD_CREATE_DETACHED : c_int = 1;
5212             pub const PTHREAD_STACK_MIN : size_t = 2048;
5213
5214             pub const CLOCK_REALTIME : c_int = 0;
5215             pub const CLOCK_MONOTONIC : c_int = 3;
5216
5217             pub const RLIMIT_CPU : c_int = 0;
5218             pub const RLIMIT_FSIZE : c_int = 1;
5219             pub const RLIMIT_DATA : c_int = 2;
5220             pub const RLIMIT_STACK : c_int = 3;
5221             pub const RLIMIT_CORE : c_int = 4;
5222             pub const RLIMIT_RSS : c_int = 5;
5223             pub const RLIMIT_MEMLOCK : c_int = 6;
5224             pub const RLIMIT_NPROC : c_int = 7;
5225             pub const RLIMIT_NOFILE : c_int = 8;
5226             pub const RLIM_NLIMITS : c_int = 9;
5227
5228             pub const RLIM_INFINITY : rlim_t = 0x7fff_ffff_ffff_ffff;
5229             pub const RLIM_SAVED_MAX : rlim_t = RLIM_INFINITY;
5230             pub const RLIM_SAVED_CUR : rlim_t = RLIM_INFINITY;
5231
5232             pub const RUSAGE_SELF : c_int = 0;
5233             pub const RUSAGE_CHILDREN : c_int = -1;
5234             pub const RUSAGE_THREAD : c_int = 1;
5235         }
5236         pub mod posix08 {
5237             use types::os::arch::c95::c_int;
5238             pub const O_CLOEXEC: c_int = 0x400000;
5239             pub const F_DUPFD_CLOEXEC: c_int = 12;
5240         }
5241         pub mod bsd44 {
5242             use types::os::arch::c95::c_int;
5243
5244             pub const MADV_NORMAL : c_int = 0;
5245             pub const MADV_RANDOM : c_int = 1;
5246             pub const MADV_SEQUENTIAL : c_int = 2;
5247             pub const MADV_WILLNEED : c_int = 3;
5248             pub const MADV_DONTNEED : c_int = 4;
5249             pub const MADV_FREE : c_int = 6;
5250
5251             pub const AF_UNIX : c_int = 1;
5252             pub const AF_INET : c_int = 2;
5253             pub const AF_INET6 : c_int = 24;
5254             pub const SOCK_STREAM : c_int = 1;
5255             pub const SOCK_DGRAM : c_int = 2;
5256             pub const SOCK_RAW : c_int = 3;
5257             pub const IPPROTO_TCP : c_int = 6;
5258             pub const IPPROTO_IP : c_int = 0;
5259             pub const IPPROTO_IPV6 : c_int = 41;
5260             pub const IP_MULTICAST_TTL : c_int = 10;
5261             pub const IP_MULTICAST_LOOP : c_int = 11;
5262             pub const IP_TTL : c_int = 4;
5263             pub const IP_HDRINCL : c_int = 2;
5264             pub const IP_ADD_MEMBERSHIP : c_int = 12;
5265             pub const IP_DROP_MEMBERSHIP : c_int = 13;
5266
5267             pub const TCP_NODELAY : c_int = 1;
5268             pub const SOL_SOCKET : c_int = 65535;
5269             pub const SO_DEBUG : c_int = 1;
5270             pub const SO_ACCEPTCONN : c_int = 2;
5271             pub const SO_REUSEADDR : c_int = 4;
5272             pub const SO_KEEPALIVE : c_int = 8;
5273             pub const SO_DONTROUTE : c_int = 16;
5274             pub const SO_BROADCAST : c_int = 32;
5275             pub const SO_USELOOPBACK : c_int = 64;
5276             pub const SO_LINGER : c_int = 128;
5277             pub const SO_OOBINLINE : c_int = 256;
5278             pub const SO_REUSEPORT : c_int = 512;
5279             pub const SO_SNDBUF : c_int = 4097;
5280             pub const SO_RCVBUF : c_int = 4098;
5281             pub const SO_SNDLOWAT : c_int = 4099;
5282             pub const SO_RCVLOWAT : c_int = 4100;
5283             pub const SO_SNDTIMEO : c_int = 4107;
5284             pub const SO_RCVTIMEO : c_int = 4108;
5285             pub const SO_ERROR : c_int = 4103;
5286             pub const SO_TYPE : c_int = 4104;
5287
5288             pub const IFF_LOOPBACK : c_int = 0x8;
5289
5290             pub const SHUT_RD : c_int = 0;
5291             pub const SHUT_WR : c_int = 1;
5292             pub const SHUT_RDWR : c_int = 2;
5293
5294             pub const LOCK_SH : c_int = 1;
5295             pub const LOCK_EX : c_int = 2;
5296             pub const LOCK_NB : c_int = 4;
5297             pub const LOCK_UN : c_int = 8;
5298         }
5299         pub mod extra {
5300             use types::os::arch::c95::c_int;
5301
5302
5303             pub const MAP_RENAME : c_int = 32;
5304             pub const MAP_NORESERVE : c_int = 64;
5305             pub const MAP_HASSEMAPHORE : c_int = 512;
5306
5307             pub const IPPROTO_RAW : c_int = 255;
5308
5309             pub const PATH_MAX : c_int = 1024;
5310         }
5311         pub mod sysconf {
5312             use types::os::arch::c95::c_int;
5313
5314             pub const _SC_ARG_MAX : c_int = 1;
5315             pub const _SC_CHILD_MAX : c_int = 2;
5316             pub const _SC_CLK_TCK : c_int = 39;
5317             pub const _SC_NGROUPS_MAX : c_int = 4;
5318             pub const _SC_OPEN_MAX : c_int = 5;
5319             pub const _SC_JOB_CONTROL : c_int = 6;
5320             pub const _SC_SAVED_IDS : c_int = 7;
5321             pub const _SC_VERSION : c_int = 8;
5322             pub const _SC_BC_BASE_MAX : c_int = 9;
5323             pub const _SC_BC_DIM_MAX : c_int = 10;
5324             pub const _SC_BC_SCALE_MAX : c_int = 11;
5325             pub const _SC_BC_STRING_MAX : c_int = 12;
5326             pub const _SC_COLL_WEIGHTS_MAX : c_int = 13;
5327             pub const _SC_EXPR_NEST_MAX : c_int = 14;
5328             pub const _SC_LINE_MAX : c_int = 15;
5329             pub const _SC_RE_DUP_MAX : c_int = 16;
5330             pub const _SC_2_VERSION : c_int = 17;
5331             pub const _SC_2_C_BIND : c_int = 18;
5332             pub const _SC_2_C_DEV : c_int = 19;
5333             pub const _SC_2_CHAR_TERM : c_int = 20;
5334             pub const _SC_2_FORT_DEV : c_int = 21;
5335             pub const _SC_2_FORT_RUN : c_int = 22;
5336             pub const _SC_2_LOCALEDEF : c_int = 23;
5337             pub const _SC_2_SW_DEV : c_int = 24;
5338             pub const _SC_2_UPE : c_int = 25;
5339             pub const _SC_STREAM_MAX : c_int = 26;
5340             pub const _SC_TZNAME_MAX : c_int = 27;
5341             pub const _SC_PAGESIZE : c_int = 28;
5342             pub const _SC_FSYNC : c_int = 29;
5343             pub const _SC_AIO_LISTIO_MAX : c_int = 51;
5344             pub const _SC_AIO_MAX : c_int = 52;
5345             pub const _SC_ASYNCHRONOUS_IO : c_int = 50;
5346             pub const _SC_MAPPED_FILES : c_int = 33;
5347             pub const _SC_MEMLOCK : c_int = 34;
5348             pub const _SC_MEMLOCK_RANGE : c_int = 35;
5349             pub const _SC_MEMORY_PROTECTION : c_int = 36;
5350             pub const _SC_MESSAGE_PASSING : c_int = 53;
5351             pub const _SC_MQ_OPEN_MAX : c_int = 54;
5352             pub const _SC_PRIORITY_SCHEDULING : c_int = 56;
5353             pub const _SC_SEMAPHORES : c_int = 42;
5354             pub const _SC_SHARED_MEMORY_OBJECTS : c_int = 87;
5355             pub const _SC_SYNCHRONIZED_IO : c_int = 31;
5356             pub const _SC_TIMERS : c_int = 44;
5357
5358             pub const _PC_NAME_MAX : c_int = 4;
5359             pub const _PC_PATH_MAX : c_int = 5;
5360         }
5361     }
5362
5363     #[cfg(any(target_os = "macos", target_os = "ios"))]
5364     pub mod os {
5365         pub mod c95 {
5366             use types::os::arch::c95::{c_int, c_uint};
5367
5368             pub const EXIT_FAILURE : c_int = 1;
5369             pub const EXIT_SUCCESS : c_int = 0;
5370             pub const RAND_MAX : c_int = 2147483647;
5371             pub const EOF : c_int = -1;
5372             pub const SEEK_SET : c_int = 0;
5373             pub const SEEK_CUR : c_int = 1;
5374             pub const SEEK_END : c_int = 2;
5375             pub const _IOFBF : c_int = 0;
5376             pub const _IONBF : c_int = 2;
5377             pub const _IOLBF : c_int = 1;
5378             pub const BUFSIZ : c_uint = 1024;
5379             pub const FOPEN_MAX : c_uint = 20;
5380             pub const FILENAME_MAX : c_uint = 1024;
5381             pub const L_tmpnam : c_uint = 1024;
5382             pub const TMP_MAX : c_uint = 308915776;
5383         }
5384         pub mod c99 {
5385         }
5386         pub mod posix88 {
5387             use types::common::c95::c_void;
5388             use types::os::arch::c95::c_int;
5389             use types::os::arch::posix88::mode_t;
5390
5391             pub const O_RDONLY : c_int = 0;
5392             pub const O_WRONLY : c_int = 1;
5393             pub const O_RDWR : c_int = 2;
5394             pub const O_APPEND : c_int = 8;
5395             pub const O_CREAT : c_int = 512;
5396             pub const O_EXCL : c_int = 2048;
5397             pub const O_NOCTTY : c_int = 131072;
5398             pub const O_TRUNC : c_int = 1024;
5399             pub const S_IFIFO : mode_t = 4096;
5400             pub const S_IFCHR : mode_t = 8192;
5401             pub const S_IFBLK : mode_t = 24576;
5402             pub const S_IFDIR : mode_t = 16384;
5403             pub const S_IFREG : mode_t = 32768;
5404             pub const S_IFLNK : mode_t = 40960;
5405             pub const S_IFSOCK : mode_t = 49152;
5406             pub const S_IFMT : mode_t = 61440;
5407             pub const S_IEXEC : mode_t = 64;
5408             pub const S_IWRITE : mode_t = 128;
5409             pub const S_IREAD : mode_t = 256;
5410             pub const S_IRWXU : mode_t = 448;
5411             pub const S_IXUSR : mode_t = 64;
5412             pub const S_IWUSR : mode_t = 128;
5413             pub const S_IRUSR : mode_t = 256;
5414             pub const S_IRWXG : mode_t = 56;
5415             pub const S_IXGRP : mode_t = 8;
5416             pub const S_IWGRP : mode_t = 16;
5417             pub const S_IRGRP : mode_t = 32;
5418             pub const S_IRWXO : mode_t = 7;
5419             pub const S_IXOTH : mode_t = 1;
5420             pub const S_IWOTH : mode_t = 2;
5421             pub const S_IROTH : mode_t = 4;
5422             pub const F_OK : c_int = 0;
5423             pub const R_OK : c_int = 4;
5424             pub const W_OK : c_int = 2;
5425             pub const X_OK : c_int = 1;
5426             pub const STDIN_FILENO : c_int = 0;
5427             pub const STDOUT_FILENO : c_int = 1;
5428             pub const STDERR_FILENO : c_int = 2;
5429             pub const F_LOCK : c_int = 1;
5430             pub const F_TEST : c_int = 3;
5431             pub const F_TLOCK : c_int = 2;
5432             pub const F_ULOCK : c_int = 0;
5433             pub const SIGHUP : c_int = 1;
5434             pub const SIGINT : c_int = 2;
5435             pub const SIGQUIT : c_int = 3;
5436             pub const SIGILL : c_int = 4;
5437             pub const SIGABRT : c_int = 6;
5438             pub const SIGFPE : c_int = 8;
5439             pub const SIGKILL : c_int = 9;
5440             pub const SIGSEGV : c_int = 11;
5441             pub const SIGPIPE : c_int = 13;
5442             pub const SIGALRM : c_int = 14;
5443             pub const SIGTERM : c_int = 15;
5444
5445             pub const PROT_NONE : c_int = 0;
5446             pub const PROT_READ : c_int = 1;
5447             pub const PROT_WRITE : c_int = 2;
5448             pub const PROT_EXEC : c_int = 4;
5449
5450             pub const MAP_FILE : c_int = 0x0000;
5451             pub const MAP_SHARED : c_int = 0x0001;
5452             pub const MAP_PRIVATE : c_int = 0x0002;
5453             pub const MAP_FIXED : c_int = 0x0010;
5454             pub const MAP_ANON : c_int = 0x1000;
5455
5456             pub const MAP_FAILED : *mut c_void = !0 as *mut c_void;
5457
5458             pub const MCL_CURRENT : c_int = 0x0001;
5459             pub const MCL_FUTURE : c_int = 0x0002;
5460
5461             pub const MS_ASYNC : c_int = 0x0001;
5462             pub const MS_INVALIDATE : c_int = 0x0002;
5463             pub const MS_SYNC : c_int = 0x0010;
5464
5465             pub const MS_KILLPAGES : c_int = 0x0004;
5466             pub const MS_DEACTIVATE : c_int = 0x0008;
5467
5468             pub const EPERM : c_int = 1;
5469             pub const ENOENT : c_int = 2;
5470             pub const ESRCH : c_int = 3;
5471             pub const EINTR : c_int = 4;
5472             pub const EIO : c_int = 5;
5473             pub const ENXIO : c_int = 6;
5474             pub const E2BIG : c_int = 7;
5475             pub const ENOEXEC : c_int = 8;
5476             pub const EBADF : c_int = 9;
5477             pub const ECHILD : c_int = 10;
5478             pub const EDEADLK : c_int = 11;
5479             pub const ENOMEM : c_int = 12;
5480             pub const EACCES : c_int = 13;
5481             pub const EFAULT : c_int = 14;
5482             pub const ENOTBLK : c_int = 15;
5483             pub const EBUSY : c_int = 16;
5484             pub const EEXIST : c_int = 17;
5485             pub const EXDEV : c_int = 18;
5486             pub const ENODEV : c_int = 19;
5487             pub const ENOTDIR : c_int = 20;
5488             pub const EISDIR : c_int = 21;
5489             pub const EINVAL : c_int = 22;
5490             pub const ENFILE : c_int = 23;
5491             pub const EMFILE : c_int = 24;
5492             pub const ENOTTY : c_int = 25;
5493             pub const ETXTBSY : c_int = 26;
5494             pub const EFBIG : c_int = 27;
5495             pub const ENOSPC : c_int = 28;
5496             pub const ESPIPE : c_int = 29;
5497             pub const EROFS : c_int = 30;
5498             pub const EMLINK : c_int = 31;
5499             pub const EPIPE : c_int = 32;
5500             pub const EDOM : c_int = 33;
5501             pub const ERANGE : c_int = 34;
5502             pub const EAGAIN : c_int = 35;
5503             pub const EWOULDBLOCK : c_int = EAGAIN;
5504             pub const EINPROGRESS : c_int = 36;
5505             pub const EALREADY : c_int = 37;
5506             pub const ENOTSOCK : c_int = 38;
5507             pub const EDESTADDRREQ : c_int = 39;
5508             pub const EMSGSIZE : c_int = 40;
5509             pub const EPROTOTYPE : c_int = 41;
5510             pub const ENOPROTOOPT : c_int = 42;
5511             pub const EPROTONOSUPPORT : c_int = 43;
5512             pub const ESOCKTNOSUPPORT : c_int = 44;
5513             pub const ENOTSUP : c_int = 45;
5514             pub const EPFNOSUPPORT : c_int = 46;
5515             pub const EAFNOSUPPORT : c_int = 47;
5516             pub const EADDRINUSE : c_int = 48;
5517             pub const EADDRNOTAVAIL : c_int = 49;
5518             pub const ENETDOWN : c_int = 50;
5519             pub const ENETUNREACH : c_int = 51;
5520             pub const ENETRESET : c_int = 52;
5521             pub const ECONNABORTED : c_int = 53;
5522             pub const ECONNRESET : c_int = 54;
5523             pub const ENOBUFS : c_int = 55;
5524             pub const EISCONN : c_int = 56;
5525             pub const ENOTCONN : c_int = 57;
5526             pub const ESHUTDOWN : c_int = 58;
5527             pub const ETOOMANYREFS : c_int = 59;
5528             pub const ETIMEDOUT : c_int = 60;
5529             pub const ECONNREFUSED : c_int = 61;
5530             pub const ELOOP : c_int = 62;
5531             pub const ENAMETOOLONG : c_int = 63;
5532             pub const EHOSTDOWN : c_int = 64;
5533             pub const EHOSTUNREACH : c_int = 65;
5534             pub const ENOTEMPTY : c_int = 66;
5535             pub const EPROCLIM : c_int = 67;
5536             pub const EUSERS : c_int = 68;
5537             pub const EDQUOT : c_int = 69;
5538             pub const ESTALE : c_int = 70;
5539             pub const EREMOTE : c_int = 71;
5540             pub const EBADRPC : c_int = 72;
5541             pub const ERPCMISMATCH : c_int = 73;
5542             pub const EPROGUNAVAIL : c_int = 74;
5543             pub const EPROGMISMATCH : c_int = 75;
5544             pub const EPROCUNAVAIL : c_int = 76;
5545             pub const ENOLCK : c_int = 77;
5546             pub const ENOSYS : c_int = 78;
5547             pub const EFTYPE : c_int = 79;
5548             pub const EAUTH : c_int = 80;
5549             pub const ENEEDAUTH : c_int = 81;
5550             pub const EPWROFF : c_int = 82;
5551             pub const EDEVERR : c_int = 83;
5552             pub const EOVERFLOW : c_int = 84;
5553             pub const EBADEXEC : c_int = 85;
5554             pub const EBADARCH : c_int = 86;
5555             pub const ESHLIBVERS : c_int = 87;
5556             pub const EBADMACHO : c_int = 88;
5557             pub const ECANCELED : c_int = 89;
5558             pub const EIDRM : c_int = 90;
5559             pub const ENOMSG : c_int = 91;
5560             pub const EILSEQ : c_int = 92;
5561             pub const ENOATTR : c_int = 93;
5562             pub const EBADMSG : c_int = 94;
5563             pub const EMULTIHOP : c_int = 95;
5564             pub const ENODATA : c_int = 96;
5565             pub const ENOLINK : c_int = 97;
5566             pub const ENOSR : c_int = 98;
5567             pub const ENOSTR : c_int = 99;
5568             pub const EPROTO : c_int = 100;
5569             pub const ETIME : c_int = 101;
5570             pub const EOPNOTSUPP : c_int = 102;
5571             pub const ENOPOLICY : c_int = 103;
5572             pub const ENOTRECOVERABLE : c_int = 104;
5573             pub const EOWNERDEAD : c_int = 105;
5574             pub const EQFULL : c_int = 106;
5575             pub const ELAST : c_int = 106;
5576         }
5577         pub mod posix01 {
5578             use types::os::arch::c95::{c_int, size_t};
5579             use types::os::common::posix01::rlim_t;
5580
5581             pub const F_DUPFD : c_int = 0;
5582             pub const F_GETFD : c_int = 1;
5583             pub const F_SETFD : c_int = 2;
5584             pub const F_GETFL : c_int = 3;
5585             pub const F_SETFL : c_int = 4;
5586
5587             pub const O_ACCMODE : c_int = 3;
5588
5589             pub const SIGTRAP : c_int = 5;
5590             pub const SIG_IGN: size_t = 1;
5591
5592             pub const GLOB_APPEND   : c_int = 0x0001;
5593             pub const GLOB_DOOFFS   : c_int = 0x0002;
5594             pub const GLOB_ERR      : c_int = 0x0004;
5595             pub const GLOB_MARK     : c_int = 0x0008;
5596             pub const GLOB_NOCHECK  : c_int = 0x0010;
5597             pub const GLOB_NOSORT   : c_int = 0x0020;
5598             pub const GLOB_NOESCAPE : c_int = 0x2000;
5599
5600             pub const GLOB_NOSPACE  : c_int = -1;
5601             pub const GLOB_ABORTED  : c_int = -2;
5602             pub const GLOB_NOMATCH  : c_int = -3;
5603
5604             pub const POSIX_MADV_NORMAL : c_int = 0;
5605             pub const POSIX_MADV_RANDOM : c_int = 1;
5606             pub const POSIX_MADV_SEQUENTIAL : c_int = 2;
5607             pub const POSIX_MADV_WILLNEED : c_int = 3;
5608             pub const POSIX_MADV_DONTNEED : c_int = 4;
5609
5610             pub const _SC_IOV_MAX : c_int = 56;
5611             pub const _SC_GETGR_R_SIZE_MAX : c_int = 70;
5612             pub const _SC_GETPW_R_SIZE_MAX : c_int = 71;
5613             pub const _SC_LOGIN_NAME_MAX : c_int = 73;
5614             pub const _SC_MQ_PRIO_MAX : c_int = 75;
5615             pub const _SC_THREAD_ATTR_STACKADDR : c_int = 82;
5616             pub const _SC_THREAD_ATTR_STACKSIZE : c_int = 83;
5617             pub const _SC_THREAD_DESTRUCTOR_ITERATIONS : c_int = 85;
5618             pub const _SC_THREAD_KEYS_MAX : c_int = 86;
5619             pub const _SC_THREAD_PRIO_INHERIT : c_int = 87;
5620             pub const _SC_THREAD_PRIO_PROTECT : c_int = 88;
5621             pub const _SC_THREAD_PRIORITY_SCHEDULING : c_int = 89;
5622             pub const _SC_THREAD_PROCESS_SHARED : c_int = 90;
5623             pub const _SC_THREAD_SAFE_FUNCTIONS : c_int = 91;
5624             pub const _SC_THREAD_STACK_MIN : c_int = 93;
5625             pub const _SC_THREAD_THREADS_MAX : c_int = 94;
5626             pub const _SC_THREADS : c_int = 96;
5627             pub const _SC_TTY_NAME_MAX : c_int = 101;
5628             pub const _SC_ATEXIT_MAX : c_int = 107;
5629             pub const _SC_XOPEN_CRYPT : c_int = 108;
5630             pub const _SC_XOPEN_ENH_I18N : c_int = 109;
5631             pub const _SC_XOPEN_LEGACY : c_int = 110;
5632             pub const _SC_XOPEN_REALTIME : c_int = 111;
5633             pub const _SC_XOPEN_REALTIME_THREADS : c_int = 112;
5634             pub const _SC_XOPEN_SHM : c_int = 113;
5635             pub const _SC_XOPEN_UNIX : c_int = 115;
5636             pub const _SC_XOPEN_VERSION : c_int = 116;
5637             pub const _SC_XOPEN_XCU_VERSION : c_int = 121;
5638
5639             pub const PTHREAD_CREATE_JOINABLE: c_int = 1;
5640             pub const PTHREAD_CREATE_DETACHED: c_int = 2;
5641             pub const PTHREAD_STACK_MIN: size_t = 8192;
5642
5643             pub const RLIMIT_CPU: c_int = 0;
5644             pub const RLIMIT_FSIZE: c_int = 1;
5645             pub const RLIMIT_DATA: c_int = 2;
5646             pub const RLIMIT_STACK: c_int = 3;
5647             pub const RLIMIT_CORE: c_int = 4;
5648             pub const RLIMIT_AS: c_int = 5;
5649             pub const RLIMIT_MEMLOCK: c_int = 6;
5650             pub const RLIMIT_NPROC: c_int = 7;
5651             pub const RLIMIT_NOFILE: c_int = 8;
5652             pub const RLIM_NLIMITS: c_int = 9;
5653             pub const _RLIMIT_POSIX_FLAG: c_int = 0x1000;
5654
5655             pub const RLIM_INFINITY: rlim_t = 0xffff_ffff_ffff_ffff;
5656
5657             pub const RUSAGE_SELF: c_int = 0;
5658             pub const RUSAGE_CHILDREN: c_int = -1;
5659             pub const RUSAGE_THREAD: c_int = 1;
5660         }
5661         pub mod posix08 {
5662             use types::os::arch::c95::c_int;
5663             pub const O_CLOEXEC: c_int = 0x1000000;
5664             pub const F_DUPFD_CLOEXEC: c_int = 67;
5665         }
5666         pub mod bsd44 {
5667             use types::os::arch::c95::c_int;
5668
5669             pub const MADV_NORMAL : c_int = 0;
5670             pub const MADV_RANDOM : c_int = 1;
5671             pub const MADV_SEQUENTIAL : c_int = 2;
5672             pub const MADV_WILLNEED : c_int = 3;
5673             pub const MADV_DONTNEED : c_int = 4;
5674             pub const MADV_FREE : c_int = 5;
5675             pub const MADV_ZERO_WIRED_PAGES : c_int = 6;
5676             pub const MADV_FREE_REUSABLE : c_int = 7;
5677             pub const MADV_FREE_REUSE : c_int = 8;
5678             pub const MADV_CAN_REUSE : c_int = 9;
5679
5680             pub const MINCORE_INCORE : c_int =  0x1;
5681             pub const MINCORE_REFERENCED : c_int = 0x2;
5682             pub const MINCORE_MODIFIED : c_int = 0x4;
5683             pub const MINCORE_REFERENCED_OTHER : c_int = 0x8;
5684             pub const MINCORE_MODIFIED_OTHER : c_int = 0x10;
5685
5686             pub const AF_UNIX: c_int = 1;
5687             pub const AF_INET: c_int = 2;
5688             pub const AF_INET6: c_int = 30;
5689             pub const SOCK_STREAM: c_int = 1;
5690             pub const SOCK_DGRAM: c_int = 2;
5691             pub const SOCK_RAW: c_int = 3;
5692             pub const IPPROTO_TCP: c_int = 6;
5693             pub const IPPROTO_IP: c_int = 0;
5694             pub const IPPROTO_IPV6: c_int = 41;
5695             pub const IP_MULTICAST_TTL: c_int = 10;
5696             pub const IP_MULTICAST_LOOP: c_int = 11;
5697             pub const IP_TTL: c_int = 4;
5698             pub const IP_HDRINCL: c_int = 2;
5699             pub const IP_ADD_MEMBERSHIP: c_int = 12;
5700             pub const IP_DROP_MEMBERSHIP: c_int = 13;
5701             pub const IPV6_ADD_MEMBERSHIP: c_int = 12;
5702             pub const IPV6_DROP_MEMBERSHIP: c_int = 13;
5703
5704             pub const TCP_NODELAY: c_int = 0x01;
5705             pub const TCP_KEEPALIVE: c_int = 0x10;
5706             pub const SOL_SOCKET: c_int = 0xffff;
5707
5708             pub const SO_DEBUG: c_int = 0x01;
5709             pub const SO_ACCEPTCONN: c_int = 0x0002;
5710             pub const SO_REUSEADDR: c_int = 0x0004;
5711             pub const SO_KEEPALIVE: c_int = 0x0008;
5712             pub const SO_DONTROUTE: c_int = 0x0010;
5713             pub const SO_BROADCAST: c_int = 0x0020;
5714             pub const SO_USELOOPBACK: c_int = 0x0040;
5715             pub const SO_LINGER: c_int = 0x0080;
5716             pub const SO_OOBINLINE: c_int = 0x0100;
5717             pub const SO_REUSEPORT: c_int = 0x0200;
5718             pub const SO_SNDBUF: c_int = 0x1001;
5719             pub const SO_RCVBUF: c_int = 0x1002;
5720             pub const SO_SNDLOWAT: c_int = 0x1003;
5721             pub const SO_RCVLOWAT: c_int = 0x1004;
5722             pub const SO_SNDTIMEO: c_int = 0x1005;
5723             pub const SO_RCVTIMEO: c_int = 0x1006;
5724             pub const SO_ERROR: c_int = 0x1007;
5725             pub const SO_TYPE: c_int = 0x1008;
5726
5727             pub const IFF_LOOPBACK: c_int = 0x8;
5728
5729             pub const SHUT_RD: c_int = 0;
5730             pub const SHUT_WR: c_int = 1;
5731             pub const SHUT_RDWR: c_int = 2;
5732
5733             pub const LOCK_SH: c_int = 1;
5734             pub const LOCK_EX: c_int = 2;
5735             pub const LOCK_NB: c_int = 4;
5736             pub const LOCK_UN: c_int = 8;
5737         }
5738         pub mod extra {
5739             use types::os::arch::c95::c_int;
5740
5741             pub const O_DSYNC : c_int = 4194304;
5742             pub const O_SYNC : c_int = 128;
5743             pub const O_NONBLOCK : c_int = 4;
5744             pub const F_GETPATH : c_int = 50;
5745             pub const F_FULLFSYNC : c_int = 51;
5746
5747             pub const MAP_COPY : c_int = 0x0002;
5748             pub const MAP_RENAME : c_int = 0x0020;
5749             pub const MAP_NORESERVE : c_int = 0x0040;
5750             pub const MAP_NOEXTEND : c_int = 0x0100;
5751             pub const MAP_HASSEMAPHORE : c_int = 0x0200;
5752             pub const MAP_NOCACHE : c_int = 0x0400;
5753             pub const MAP_JIT : c_int = 0x0800;
5754             pub const MAP_STACK : c_int = 0;
5755
5756             pub const IPPROTO_RAW : c_int = 255;
5757
5758             pub const SO_NREAD: c_int = 0x1020;
5759             pub const SO_NKE: c_int = 0x1021;
5760             pub const SO_NOSIGPIPE: c_int = 0x1022;
5761             pub const SO_NOADDRERR: c_int = 0x1023;
5762             pub const SO_NWRITE: c_int = 0x1024;
5763             pub const SO_DONTTRUNC: c_int = 0x2000;
5764             pub const SO_WANTMORE: c_int = 0x4000;
5765             pub const SO_WANTOOBFLAG: c_int = 0x8000;
5766
5767             pub const PATH_MAX: c_int = 1024;
5768         }
5769         pub mod sysconf {
5770             use types::os::arch::c95::c_int;
5771
5772             pub const _SC_ARG_MAX : c_int = 1;
5773             pub const _SC_CHILD_MAX : c_int = 2;
5774             pub const _SC_CLK_TCK : c_int = 3;
5775             pub const _SC_NGROUPS_MAX : c_int = 4;
5776             pub const _SC_OPEN_MAX : c_int = 5;
5777             pub const _SC_JOB_CONTROL : c_int = 6;
5778             pub const _SC_SAVED_IDS : c_int = 7;
5779             pub const _SC_VERSION : c_int = 8;
5780             pub const _SC_BC_BASE_MAX : c_int = 9;
5781             pub const _SC_BC_DIM_MAX : c_int = 10;
5782             pub const _SC_BC_SCALE_MAX : c_int = 11;
5783             pub const _SC_BC_STRING_MAX : c_int = 12;
5784             pub const _SC_COLL_WEIGHTS_MAX : c_int = 13;
5785             pub const _SC_EXPR_NEST_MAX : c_int = 14;
5786             pub const _SC_LINE_MAX : c_int = 15;
5787             pub const _SC_RE_DUP_MAX : c_int = 16;
5788             pub const _SC_2_VERSION : c_int = 17;
5789             pub const _SC_2_C_BIND : c_int = 18;
5790             pub const _SC_2_C_DEV : c_int = 19;
5791             pub const _SC_2_CHAR_TERM : c_int = 20;
5792             pub const _SC_2_FORT_DEV : c_int = 21;
5793             pub const _SC_2_FORT_RUN : c_int = 22;
5794             pub const _SC_2_LOCALEDEF : c_int = 23;
5795             pub const _SC_2_SW_DEV : c_int = 24;
5796             pub const _SC_2_UPE : c_int = 25;
5797             pub const _SC_STREAM_MAX : c_int = 26;
5798             pub const _SC_TZNAME_MAX : c_int = 27;
5799             pub const _SC_ASYNCHRONOUS_IO : c_int = 28;
5800             pub const _SC_PAGESIZE : c_int = 29;
5801             pub const _SC_MEMLOCK : c_int = 30;
5802             pub const _SC_MEMLOCK_RANGE : c_int = 31;
5803             pub const _SC_MEMORY_PROTECTION : c_int = 32;
5804             pub const _SC_MESSAGE_PASSING : c_int = 33;
5805             pub const _SC_PRIORITIZED_IO : c_int = 34;
5806             pub const _SC_PRIORITY_SCHEDULING : c_int = 35;
5807             pub const _SC_REALTIME_SIGNALS : c_int = 36;
5808             pub const _SC_SEMAPHORES : c_int = 37;
5809             pub const _SC_FSYNC : c_int = 38;
5810             pub const _SC_SHARED_MEMORY_OBJECTS : c_int = 39;
5811             pub const _SC_SYNCHRONIZED_IO : c_int = 40;
5812             pub const _SC_TIMERS : c_int = 41;
5813             pub const _SC_AIO_LISTIO_MAX : c_int = 42;
5814             pub const _SC_AIO_MAX : c_int = 43;
5815             pub const _SC_AIO_PRIO_DELTA_MAX : c_int = 44;
5816             pub const _SC_DELAYTIMER_MAX : c_int = 45;
5817             pub const _SC_MQ_OPEN_MAX : c_int = 46;
5818             pub const _SC_MAPPED_FILES : c_int = 47;
5819             pub const _SC_RTSIG_MAX : c_int = 48;
5820             pub const _SC_SEM_NSEMS_MAX : c_int = 49;
5821             pub const _SC_SEM_VALUE_MAX : c_int = 50;
5822             pub const _SC_SIGQUEUE_MAX : c_int = 51;
5823             pub const _SC_TIMER_MAX : c_int = 52;
5824             pub const _SC_NPROCESSORS_CONF : c_int = 57;
5825             pub const _SC_NPROCESSORS_ONLN : c_int = 58;
5826             pub const _SC_2_PBS : c_int = 59;
5827             pub const _SC_2_PBS_ACCOUNTING : c_int = 60;
5828             pub const _SC_2_PBS_CHECKPOINT : c_int = 61;
5829             pub const _SC_2_PBS_LOCATE : c_int = 62;
5830             pub const _SC_2_PBS_MESSAGE : c_int = 63;
5831             pub const _SC_2_PBS_TRACK : c_int = 64;
5832             pub const _SC_ADVISORY_INFO : c_int = 65;
5833             pub const _SC_BARRIERS : c_int = 66;
5834             pub const _SC_CLOCK_SELECTION : c_int = 67;
5835             pub const _SC_CPUTIME : c_int = 68;
5836             pub const _SC_FILE_LOCKING : c_int = 69;
5837             pub const _SC_HOST_NAME_MAX : c_int = 72;
5838             pub const _SC_MONOTONIC_CLOCK : c_int = 74;
5839             pub const _SC_READER_WRITER_LOCKS : c_int = 76;
5840             pub const _SC_REGEXP : c_int = 77;
5841             pub const _SC_SHELL : c_int = 78;
5842             pub const _SC_SPAWN : c_int = 79;
5843             pub const _SC_SPIN_LOCKS : c_int = 80;
5844             pub const _SC_SPORADIC_SERVER : c_int = 81;
5845             pub const _SC_THREAD_CPUTIME : c_int = 84;
5846             pub const _SC_THREAD_SPORADIC_SERVER : c_int = 92;
5847             pub const _SC_TIMEOUTS : c_int = 95;
5848             pub const _SC_TRACE : c_int = 97;
5849             pub const _SC_TRACE_EVENT_FILTER : c_int = 98;
5850             pub const _SC_TRACE_INHERIT : c_int = 99;
5851             pub const _SC_TRACE_LOG : c_int = 100;
5852             pub const _SC_TYPED_MEMORY_OBJECTS : c_int = 102;
5853             pub const _SC_V6_ILP32_OFF32 : c_int = 103;
5854             pub const _SC_V6_ILP32_OFFBIG : c_int = 104;
5855             pub const _SC_V6_LP64_OFF64 : c_int = 105;
5856             pub const _SC_V6_LPBIG_OFFBIG : c_int = 106;
5857             pub const _SC_IPV6 : c_int = 118;
5858             pub const _SC_RAW_SOCKETS : c_int = 119;
5859             pub const _SC_SYMLOOP_MAX : c_int = 120;
5860             pub const _SC_PAGE_SIZE : c_int = _SC_PAGESIZE;
5861             pub const _SC_XOPEN_STREAMS : c_int = 114;
5862             pub const _SC_XBS5_ILP32_OFF32 : c_int = 122;
5863             pub const _SC_XBS5_ILP32_OFFBIG : c_int = 123;
5864             pub const _SC_XBS5_LP64_OFF64 : c_int = 124;
5865             pub const _SC_XBS5_LPBIG_OFFBIG : c_int = 125;
5866             pub const _SC_SS_REPL_MAX : c_int = 126;
5867             pub const _SC_TRACE_EVENT_NAME_MAX : c_int = 127;
5868             pub const _SC_TRACE_NAME_MAX : c_int = 128;
5869             pub const _SC_TRACE_SYS_MAX : c_int = 129;
5870             pub const _SC_TRACE_USER_EVENT_MAX : c_int = 130;
5871             pub const _SC_PASS_MAX : c_int = 131;
5872
5873             pub const _PC_NAME_MAX: c_int = 4;
5874             pub const _PC_PATH_MAX: c_int = 5;
5875         }
5876     }
5877 }
5878
5879
5880 pub mod funcs {
5881     // Thankfully most of c95 is universally available and does not vary by OS
5882     // or anything. The same is not true of POSIX.
5883
5884     pub mod c95 {
5885         pub mod ctype {
5886             use types::os::arch::c95::{c_char, c_int};
5887
5888             extern {
5889                 pub fn isalnum(c: c_int) -> c_int;
5890                 pub fn isalpha(c: c_int) -> c_int;
5891                 pub fn iscntrl(c: c_int) -> c_int;
5892                 pub fn isdigit(c: c_int) -> c_int;
5893                 pub fn isgraph(c: c_int) -> c_int;
5894                 pub fn islower(c: c_int) -> c_int;
5895                 pub fn isprint(c: c_int) -> c_int;
5896                 pub fn ispunct(c: c_int) -> c_int;
5897                 pub fn isspace(c: c_int) -> c_int;
5898                 pub fn isupper(c: c_int) -> c_int;
5899                 pub fn isxdigit(c: c_int) -> c_int;
5900                 pub fn tolower(c: c_char) -> c_char;
5901                 pub fn toupper(c: c_char) -> c_char;
5902             }
5903         }
5904
5905         pub mod stdio {
5906             use types::common::c95::{FILE, c_void, fpos_t};
5907             use types::os::arch::c95::{c_char, c_int, c_long, size_t};
5908
5909             extern {
5910                 pub fn fopen(filename: *const c_char,
5911                              mode: *const c_char) -> *mut FILE;
5912                 pub fn freopen(filename: *const c_char, mode: *const c_char,
5913                                file: *mut FILE)
5914                                -> *mut FILE;
5915                 pub fn fflush(file: *mut FILE) -> c_int;
5916                 pub fn fclose(file: *mut FILE) -> c_int;
5917                 pub fn remove(filename: *const c_char) -> c_int;
5918                 pub fn rename(oldname: *const c_char,
5919                               newname: *const c_char) -> c_int;
5920                 pub fn tmpfile() -> *mut FILE;
5921                 pub fn setvbuf(stream: *mut FILE,
5922                                buffer: *mut c_char,
5923                                mode: c_int,
5924                                size: size_t)
5925                                -> c_int;
5926                 pub fn setbuf(stream: *mut FILE, buf: *mut c_char);
5927                 // Omitted: printf and scanf variants.
5928                 pub fn fgetc(stream: *mut FILE) -> c_int;
5929                 pub fn fgets(buf: *mut c_char, n: c_int, stream: *mut FILE)
5930                              -> *mut c_char;
5931                 pub fn fputc(c: c_int, stream: *mut FILE) -> c_int;
5932                 pub fn fputs(s: *const c_char, stream: *mut FILE)-> c_int;
5933                 // Omitted: getc, getchar (might be macros).
5934
5935                 // Omitted: gets, so ridiculously unsafe that it should not
5936                 // survive.
5937
5938                 // Omitted: putc, putchar (might be macros).
5939                 pub fn puts(s: *const c_char) -> c_int;
5940                 pub fn ungetc(c: c_int, stream: *mut FILE) -> c_int;
5941                 pub fn fread(ptr: *mut c_void,
5942                              size: size_t,
5943                              nobj: size_t,
5944                              stream: *mut FILE)
5945                              -> size_t;
5946                 pub fn fwrite(ptr: *const c_void,
5947                               size: size_t,
5948                               nobj: size_t,
5949                               stream: *mut FILE)
5950                               -> size_t;
5951                 pub fn fseek(stream: *mut FILE, offset: c_long, whence: c_int)
5952                              -> c_int;
5953                 pub fn ftell(stream: *mut FILE) -> c_long;
5954                 pub fn rewind(stream: *mut FILE);
5955                 pub fn fgetpos(stream: *mut FILE, ptr: *mut fpos_t) -> c_int;
5956                 pub fn fsetpos(stream: *mut FILE, ptr: *mut fpos_t) -> c_int;
5957                 pub fn feof(stream: *mut FILE) -> c_int;
5958                 pub fn ferror(stream: *mut FILE) -> c_int;
5959                 pub fn perror(s: *const c_char);
5960             }
5961         }
5962
5963         pub mod stdlib {
5964             use types::common::c95::c_void;
5965             use types::os::arch::c95::{c_char, c_double, c_int};
5966             use types::os::arch::c95::{c_long, c_uint, c_ulong};
5967             use types::os::arch::c95::{size_t};
5968
5969             extern {
5970                 pub fn abs(i: c_int) -> c_int;
5971                 pub fn labs(i: c_long) -> c_long;
5972                 // Omitted: div, ldiv (return pub type incomplete).
5973                 pub fn atof(s: *const c_char) -> c_double;
5974                 pub fn atoi(s: *const c_char) -> c_int;
5975                 pub fn strtod(s: *const c_char,
5976                               endp: *mut *mut c_char) -> c_double;
5977                 pub fn strtol(s: *const c_char,
5978                               endp: *mut *mut c_char, base: c_int) -> c_long;
5979                 pub fn strtoul(s: *const c_char, endp: *mut *mut c_char,
5980                                base: c_int) -> c_ulong;
5981                 pub fn calloc(nobj: size_t, size: size_t) -> *mut c_void;
5982                 pub fn malloc(size: size_t) -> *mut c_void;
5983                 pub fn realloc(p: *mut c_void, size: size_t) -> *mut c_void;
5984                 pub fn free(p: *mut c_void);
5985
5986                 /// Exits the running program in a possibly dangerous manner.
5987                 ///
5988                 /// # Unsafety
5989                 ///
5990                 /// While this forces your program to exit, it does so in a way that has
5991                 /// consequences. This will skip all unwinding code, which means that anything
5992                 /// relying on unwinding for cleanup (such as flushing and closing a buffer to a
5993                 /// file) may act in an unexpected way.
5994                 ///
5995                 /// # Examples
5996                 ///
5997                 /// ```no_run,ignore
5998                 /// extern crate libc;
5999                 ///
6000                 /// fn main() {
6001                 ///     unsafe {
6002                 ///         libc::exit(1);
6003                 ///     }
6004                 /// }
6005                 /// ```
6006                 pub fn exit(status: c_int) -> !;
6007                 pub fn _exit(status: c_int) -> !;
6008                 pub fn atexit(cb: extern fn()) -> c_int;
6009                 pub fn system(s: *const c_char) -> c_int;
6010                 pub fn getenv(s: *const c_char) -> *mut c_char;
6011                 // Omitted: bsearch, qsort
6012                 pub fn rand() -> c_int;
6013                 pub fn srand(seed: c_uint);
6014             }
6015         }
6016
6017         pub mod string {
6018             use types::common::c95::c_void;
6019             use types::os::arch::c95::{c_char, c_int, size_t};
6020             use types::os::arch::c95::{wchar_t};
6021
6022             extern {
6023                 pub fn strcpy(dst: *mut c_char,
6024                               src: *const c_char) -> *mut c_char;
6025                 pub fn strncpy(dst: *mut c_char, src: *const c_char, n: size_t)
6026                                -> *mut c_char;
6027                 pub fn strcat(s: *mut c_char, ct: *const c_char) -> *mut c_char;
6028                 pub fn strncat(s: *mut c_char, ct: *const c_char,
6029                                n: size_t) -> *mut c_char;
6030                 pub fn strcmp(cs: *const c_char, ct: *const c_char) -> c_int;
6031                 pub fn strncmp(cs: *const c_char, ct: *const c_char,
6032                                n: size_t) -> c_int;
6033                 pub fn strcoll(cs: *const c_char, ct: *const c_char) -> c_int;
6034                 pub fn strchr(cs: *const c_char, c: c_int) -> *mut c_char;
6035                 pub fn strrchr(cs: *const c_char, c: c_int) -> *mut c_char;
6036                 pub fn strspn(cs: *const c_char, ct: *const c_char) -> size_t;
6037                 pub fn strcspn(cs: *const c_char, ct: *const c_char) -> size_t;
6038                 pub fn strpbrk(cs: *const c_char,
6039                                ct: *const c_char) -> *mut c_char;
6040                 pub fn strstr(cs: *const c_char,
6041                               ct: *const c_char) -> *mut c_char;
6042                 pub fn strlen(cs: *const c_char) -> size_t;
6043                 pub fn strerror(n: c_int) -> *mut c_char;
6044                 pub fn strtok(s: *mut c_char, t: *const c_char) -> *mut c_char;
6045                 pub fn strxfrm(s: *mut c_char, ct: *const c_char,
6046                                n: size_t) -> size_t;
6047                 pub fn wcslen(buf: *const wchar_t) -> size_t;
6048
6049                 // Omitted: memcpy, memmove, memset (provided by LLVM)
6050
6051                 // These are fine to execute on the Rust stack. They must be,
6052                 // in fact, because LLVM generates calls to them!
6053                 pub fn memcmp(cx: *const c_void, ct: *const c_void,
6054                               n: size_t) -> c_int;
6055                 pub fn memchr(cx: *const c_void, c: c_int,
6056                               n: size_t) -> *mut c_void;
6057             }
6058         }
6059     }
6060
6061     // Microsoft helpfully underscore-qualifies all of its POSIX-like symbols
6062     // to make sure you don't use them accidentally. It also randomly deviates
6063     // from the exact signatures you might otherwise expect, and omits much,
6064     // so be careful when trying to write portable code; it won't always work
6065     // with the same POSIX functions and types as other platforms.
6066
6067     #[cfg(target_os = "windows")]
6068     pub mod posix88 {
6069         pub mod stat_ {
6070             use types::os::common::posix01::{stat, utimbuf};
6071             use types::os::arch::c95::{c_int, c_char, wchar_t};
6072
6073             extern {
6074                 #[link_name = "_chmod"]
6075                 pub fn chmod(path: *const c_char, mode: c_int) -> c_int;
6076                 #[link_name = "_wchmod"]
6077                 pub fn wchmod(path: *const wchar_t, mode: c_int) -> c_int;
6078                 #[link_name = "_mkdir"]
6079                 pub fn mkdir(path: *const c_char) -> c_int;
6080                 #[link_name = "_wrmdir"]
6081                 pub fn wrmdir(path: *const wchar_t) -> c_int;
6082                 #[link_name = "_fstat64"]
6083                 pub fn fstat(fildes: c_int, buf: *mut stat) -> c_int;
6084                 #[link_name = "_stat64"]
6085                 pub fn stat(path: *const c_char, buf: *mut stat) -> c_int;
6086                 #[link_name = "_wstat64"]
6087                 pub fn wstat(path: *const wchar_t, buf: *mut stat) -> c_int;
6088                 #[link_name = "_wutime64"]
6089                 pub fn wutime(file: *const wchar_t, buf: *mut utimbuf) -> c_int;
6090             }
6091         }
6092
6093         pub mod stdio {
6094             use types::common::c95::FILE;
6095             use types::os::arch::c95::{c_int, c_char};
6096
6097             extern {
6098                 #[link_name = "_popen"]
6099                 pub fn popen(command: *const c_char,
6100                              mode: *const c_char) -> *mut FILE;
6101                 #[link_name = "_pclose"]
6102                 pub fn pclose(stream: *mut FILE) -> c_int;
6103                 #[link_name = "_fdopen"]
6104                 pub fn fdopen(fd: c_int, mode: *const c_char) -> *mut FILE;
6105                 #[link_name = "_fileno"]
6106                 pub fn fileno(stream: *mut FILE) -> c_int;
6107             }
6108         }
6109
6110         pub mod fcntl {
6111             use types::os::arch::c95::{c_int, c_char, wchar_t};
6112             extern {
6113                 #[link_name = "_open"]
6114                 pub fn open(path: *const c_char, oflag: c_int, mode: c_int)
6115                             -> c_int;
6116                 #[link_name = "_wopen"]
6117                 pub fn wopen(path: *const wchar_t, oflag: c_int, mode: c_int)
6118                             -> c_int;
6119                 #[link_name = "_creat"]
6120                 pub fn creat(path: *const c_char, mode: c_int) -> c_int;
6121             }
6122         }
6123
6124         pub mod dirent {
6125             // Not supplied at all.
6126         }
6127
6128         pub mod unistd {
6129             use types::common::c95::c_void;
6130             use types::os::arch::c95::{c_int, c_uint, c_char,
6131                                              c_long, size_t};
6132             use types::os::arch::c99::intptr_t;
6133
6134             extern {
6135                 #[link_name = "_access"]
6136                 pub fn access(path: *const c_char, amode: c_int) -> c_int;
6137                 #[link_name = "_chdir"]
6138                 pub fn chdir(dir: *const c_char) -> c_int;
6139                 #[link_name = "_close"]
6140                 pub fn close(fd: c_int) -> c_int;
6141                 #[link_name = "_dup"]
6142                 pub fn dup(fd: c_int) -> c_int;
6143                 #[link_name = "_dup2"]
6144                 pub fn dup2(src: c_int, dst: c_int) -> c_int;
6145                 #[link_name = "_execv"]
6146                 pub fn execv(prog: *const c_char,
6147                              argv: *const *const c_char) -> intptr_t;
6148                 #[link_name = "_execve"]
6149                 pub fn execve(prog: *const c_char, argv: *const *const c_char,
6150                               envp: *const *const c_char)
6151                               -> c_int;
6152                 #[link_name = "_execvp"]
6153                 pub fn execvp(c: *const c_char,
6154                               argv: *const *const c_char) -> c_int;
6155                 #[link_name = "_execvpe"]
6156                 pub fn execvpe(c: *const c_char, argv: *const *const c_char,
6157                                envp: *const *const c_char) -> c_int;
6158                 #[link_name = "_getcwd"]
6159                 pub fn getcwd(buf: *mut c_char, size: size_t) -> *mut c_char;
6160                 #[link_name = "_getpid"]
6161                 pub fn getpid() -> c_int;
6162                 #[link_name = "_isatty"]
6163                 pub fn isatty(fd: c_int) -> c_int;
6164                 #[link_name = "_lseek"]
6165                 pub fn lseek(fd: c_int, offset: c_long, origin: c_int)
6166                              -> c_long;
6167                 #[link_name = "_pipe"]
6168                 pub fn pipe(fds: *mut c_int, psize: c_uint, textmode: c_int)
6169                             -> c_int;
6170                 #[link_name = "_read"]
6171                 pub fn read(fd: c_int, buf: *mut c_void, count: c_uint)
6172                             -> c_int;
6173                 #[link_name = "_rmdir"]
6174                 pub fn rmdir(path: *const c_char) -> c_int;
6175                 #[link_name = "_unlink"]
6176                 pub fn unlink(c: *const c_char) -> c_int;
6177                 #[link_name = "_write"]
6178                 pub fn write(fd: c_int, buf: *const c_void,
6179                              count: c_uint) -> c_int;
6180             }
6181         }
6182
6183         pub mod mman {
6184         }
6185     }
6186
6187     #[cfg(any(target_os = "linux",
6188               target_os = "android",
6189               target_os = "macos",
6190               target_os = "ios",
6191               target_os = "freebsd",
6192               target_os = "dragonfly",
6193               target_os = "bitrig",
6194               target_os = "netbsd",
6195               target_os = "openbsd",
6196               target_os = "nacl"))]
6197     pub mod posix88 {
6198         pub mod stat_ {
6199             use types::os::arch::c95::{c_char, c_int};
6200             use types::os::arch::posix01::stat;
6201             use types::os::arch::posix88::mode_t;
6202
6203             extern {
6204                 pub fn chmod(path: *const c_char, mode: mode_t) -> c_int;
6205                 pub fn fchmod(fd: c_int, mode: mode_t) -> c_int;
6206
6207                 #[cfg_attr(target_os = "macos", link_name = "fstat64")]
6208                 #[cfg_attr(target_os = "netbsd", link_name = "__fstat50")]
6209                 pub fn fstat(fildes: c_int, buf: *mut stat) -> c_int;
6210
6211                 pub fn mkdir(path: *const c_char, mode: mode_t) -> c_int;
6212                 #[cfg(not(target_os = "nacl"))]
6213                 pub fn mkfifo(path: *const c_char, mode: mode_t) -> c_int;
6214
6215                 #[cfg_attr(target_os = "macos", link_name = "stat64")]
6216                 #[cfg_attr(target_os = "netbsd", link_name = "__stat50")]
6217                 pub fn stat(path: *const c_char, buf: *mut stat) -> c_int;
6218             }
6219         }
6220
6221         pub mod stdio {
6222             use types::common::c95::FILE;
6223             use types::os::arch::c95::{c_char, c_int};
6224
6225             extern {
6226                 pub fn popen(command: *const c_char,
6227                              mode: *const c_char) -> *mut FILE;
6228                 pub fn pclose(stream: *mut FILE) -> c_int;
6229                 pub fn fdopen(fd: c_int, mode: *const c_char) -> *mut FILE;
6230                 pub fn fileno(stream: *mut FILE) -> c_int;
6231             }
6232         }
6233
6234         pub mod fcntl {
6235             use types::os::arch::c95::{c_char, c_int};
6236             use types::os::arch::posix88::mode_t;
6237
6238             mod open_shim {
6239                 extern {
6240                     #[cfg(any(target_os = "macos",
6241                               target_os = "ios"))]
6242                     pub fn open(path: *const ::c_char, oflag: ::c_int, ...)
6243                                 -> ::c_int;
6244
6245                     #[cfg(not(any(target_os = "macos",
6246                                   target_os = "ios")))]
6247                     pub fn open(path: *const ::c_char, oflag: ::c_int, mode: ::mode_t)
6248                                 -> ::c_int;
6249                 }
6250             }
6251
6252             #[cfg(any(target_os = "macos",
6253                       target_os = "ios"))]
6254             #[inline]
6255             pub unsafe extern fn open(path: *const c_char, oflag: c_int, mode: mode_t) -> c_int {
6256                 use types::os::arch::c95::c_uint;
6257                 open_shim::open(path, oflag, mode as c_uint)
6258             }
6259
6260             #[cfg(not(any(target_os = "macos",
6261                           target_os = "ios")))]
6262             #[inline]
6263             pub unsafe extern fn open(path: *const c_char, oflag: c_int, mode: mode_t) -> c_int {
6264                 open_shim::open(path, oflag, mode)
6265             }
6266
6267             extern {
6268                 pub fn creat(path: *const c_char, mode: mode_t) -> c_int;
6269                 pub fn fcntl(fd: c_int, cmd: c_int, ...) -> c_int;
6270             }
6271         }
6272
6273         pub mod dirent {
6274             use types::common::posix88::{DIR, dirent_t};
6275             use types::os::arch::c95::{c_char, c_int, c_long};
6276
6277             // NB: On OS X opendir and readdir have two versions,
6278             // one for 32-bit kernelspace and one for 64.
6279             // We should be linking to the 64-bit ones, called
6280             // opendir$INODE64, etc. but for some reason rustc
6281             // doesn't link it correctly on i686, so we're going
6282             // through a C function that mysteriously does work.
6283
6284             extern {
6285                 #[link_name="rust_opendir"]
6286                 pub fn opendir(dirname: *const c_char) -> *mut DIR;
6287                 #[link_name="rust_readdir_r"]
6288                 pub fn readdir_r(dirp: *mut DIR, entry: *mut dirent_t,
6289                                   result: *mut *mut dirent_t) -> c_int;
6290             }
6291
6292             extern {
6293                 pub fn closedir(dirp: *mut DIR) -> c_int;
6294                 pub fn rewinddir(dirp: *mut DIR);
6295                 pub fn seekdir(dirp: *mut DIR, loc: c_long);
6296                 pub fn telldir(dirp: *mut DIR) -> c_long;
6297             }
6298         }
6299
6300         pub mod unistd {
6301             use types::common::c95::c_void;
6302             use types::os::arch::c95::{c_char, c_int, c_long, c_uint};
6303             use types::os::arch::c95::{size_t};
6304             use types::os::common::posix01::timespec;
6305             use types::os::arch::posix01::utimbuf;
6306             use types::os::arch::posix88::{gid_t, off_t, pid_t};
6307             use types::os::arch::posix88::{ssize_t, uid_t};
6308
6309             #[cfg(not(target_os = "nacl"))]
6310             extern {
6311                 pub fn access(path: *const c_char, amode: c_int) -> c_int;
6312                 pub fn alarm(seconds: c_uint) -> c_uint;
6313                 pub fn chdir(dir: *const c_char) -> c_int;
6314                 pub fn chown(path: *const c_char, uid: uid_t,
6315                              gid: gid_t) -> c_int;
6316                 pub fn close(fd: c_int) -> c_int;
6317                 pub fn dup(fd: c_int) -> c_int;
6318                 pub fn dup2(src: c_int, dst: c_int) -> c_int;
6319                 pub fn execv(prog: *const c_char,
6320                              argv: *const *const c_char) -> c_int;
6321                 pub fn execve(prog: *const c_char, argv: *const *const c_char,
6322                               envp: *const *const c_char)
6323                               -> c_int;
6324                 pub fn execvp(c: *const c_char,
6325                               argv: *const *const c_char) -> c_int;
6326                 pub fn fork() -> pid_t;
6327                 pub fn fpathconf(filedes: c_int, name: c_int) -> c_long;
6328                 pub fn getcwd(buf: *mut c_char, size: size_t) -> *mut c_char;
6329                 pub fn getegid() -> gid_t;
6330                 pub fn geteuid() -> uid_t;
6331                 pub fn getgid() -> gid_t;
6332                 pub fn getgroups(ngroups_max: c_int, groups: *mut gid_t)
6333                                  -> c_int;
6334                 pub fn getlogin() -> *mut c_char;
6335                 // GNU getopt(3) modifies its arguments despite the
6336                 // char * const [] prototype; see the manpage.
6337                 pub fn getopt(argc: c_int, argv: *mut *mut c_char,
6338                               optstr: *const c_char) -> c_int;
6339                 pub fn getpgrp() -> pid_t;
6340                 pub fn getpid() -> pid_t;
6341                 pub fn getppid() -> pid_t;
6342                 pub fn getuid() -> uid_t;
6343                 pub fn getsid(pid: pid_t) -> pid_t;
6344                 pub fn isatty(fd: c_int) -> c_int;
6345                 pub fn link(src: *const c_char, dst: *const c_char) -> c_int;
6346                 pub fn lseek(fd: c_int, offset: off_t, whence: c_int)
6347                              -> off_t;
6348                 pub fn pathconf(path: *mut c_char, name: c_int) -> c_long;
6349                 pub fn pause() -> c_int;
6350                 pub fn pipe(fds: *mut c_int) -> c_int;
6351                 pub fn read(fd: c_int, buf: *mut c_void, count: size_t)
6352                             -> ssize_t;
6353                 pub fn rmdir(path: *const c_char) -> c_int;
6354                 pub fn setgid(gid: gid_t) -> c_int;
6355                 pub fn setpgid(pid: pid_t, pgid: pid_t) -> c_int;
6356                 pub fn setsid() -> pid_t;
6357                 pub fn setuid(uid: uid_t) -> c_int;
6358                 pub fn sleep(secs: c_uint) -> c_uint;
6359                 pub fn usleep(secs: c_uint) -> c_int;
6360                 #[cfg_attr(target_os = "netbsd", link_name = "__nanosleep50")]
6361                 pub fn nanosleep(rqtp: *const timespec,
6362                                  rmtp: *mut timespec) -> c_int;
6363                 pub fn sysconf(name: c_int) -> c_long;
6364                 pub fn tcgetpgrp(fd: c_int) -> pid_t;
6365                 pub fn ttyname(fd: c_int) -> *mut c_char;
6366                 pub fn unlink(c: *const c_char) -> c_int;
6367                 pub fn wait(status: *const c_int) -> pid_t;
6368                 pub fn waitpid(pid: pid_t, status: *const c_int, options: c_int)
6369                                -> pid_t;
6370                 pub fn write(fd: c_int, buf: *const c_void, count: size_t)
6371                              -> ssize_t;
6372                 pub fn pread(fd: c_int, buf: *mut c_void, count: size_t,
6373                              offset: off_t) -> ssize_t;
6374                 pub fn pwrite(fd: c_int, buf: *const c_void, count: size_t,
6375                               offset: off_t) -> ssize_t;
6376                 #[cfg_attr(target_os = "netbsd", link_name = "__utime50")]
6377                 pub fn utime(file: *const c_char, buf: *const utimbuf) -> c_int;
6378             }
6379             #[cfg(target_os = "nacl")]
6380             extern {
6381                 pub fn access(path: *const c_char, amode: c_int) -> c_int;
6382                 pub fn chdir(dir: *const c_char) -> c_int;
6383                 pub fn chown(path: *const c_char, uid: uid_t,
6384                              gid: gid_t) -> c_int;
6385                 pub fn close(fd: c_int) -> c_int;
6386                 pub fn dup(fd: c_int) -> c_int;
6387                 pub fn dup2(src: c_int, dst: c_int) -> c_int;
6388                 pub fn execv(prog: *const c_char,
6389                              argv: *const *const c_char) -> c_int;
6390                 pub fn execve(prog: *const c_char, argv: *const *const c_char,
6391                               envp: *const *const c_char)
6392                               -> c_int;
6393                 pub fn execvp(c: *const c_char,
6394                               argv: *const *const c_char) -> c_int;
6395                 pub fn fork() -> pid_t;
6396                 pub fn getcwd(buf: *mut c_char, size: size_t) -> *mut c_char;
6397                 pub fn getegid() -> gid_t;
6398                 pub fn geteuid() -> uid_t;
6399                 pub fn getgid() -> gid_t;
6400                 pub fn getlogin() -> *mut c_char;
6401                 pub fn getopt(argc: c_int, argv: *const *const c_char,
6402                               optstr: *const c_char) -> c_int;
6403                 pub fn getuid() -> uid_t;
6404                 pub fn getsid(pid: pid_t) -> pid_t;
6405                 pub fn isatty(fd: c_int) -> c_int;
6406                 pub fn link(src: *const c_char, dst: *const c_char) -> c_int;
6407                 pub fn lseek(fd: c_int, offset: off_t, whence: c_int)
6408                              -> off_t;
6409                 pub fn pipe(fds: *mut c_int) -> c_int;
6410                 pub fn read(fd: c_int, buf: *mut c_void, count: size_t)
6411                             -> ssize_t;
6412                 pub fn rmdir(path: *const c_char) -> c_int;
6413                 pub fn setgid(gid: gid_t) -> c_int;
6414                 pub fn setuid(uid: uid_t) -> c_int;
6415                 pub fn sleep(secs: c_uint) -> c_uint;
6416                 pub fn usleep(secs: c_uint) -> c_int;
6417                 pub fn nanosleep(rqtp: *const timespec,
6418                                  rmtp: *mut timespec) -> c_int;
6419                 pub fn sysconf(name: c_int) -> c_long;
6420                 pub fn ttyname(fd: c_int) -> *mut c_char;
6421                 pub fn unlink(c: *const c_char) -> c_int;
6422                 pub fn wait(status: *const c_int) -> pid_t;
6423                 pub fn waitpid(pid: pid_t, status: *const c_int, options: c_int)
6424                                -> pid_t;
6425                 pub fn write(fd: c_int, buf: *const c_void, count: size_t)
6426                              -> ssize_t;
6427                 pub fn pread(fd: c_int, buf: *mut c_void, count: size_t,
6428                              offset: off_t) -> ssize_t;
6429                 pub fn pwrite(fd: c_int, buf: *const c_void, count: size_t,
6430                               offset: off_t) -> ssize_t;
6431                 pub fn utime(file: *const c_char, buf: *const utimbuf) -> c_int;
6432             }
6433         }
6434
6435         pub mod signal {
6436             use types::os::arch::c95::{c_int};
6437             use types::os::arch::posix88::{pid_t};
6438
6439             extern {
6440                 pub fn kill(pid: pid_t, sig: c_int) -> c_int;
6441             }
6442         }
6443
6444         pub mod mman {
6445             use types::common::c95::{c_void};
6446             use types::os::arch::c95::{size_t, c_int, c_char};
6447             use types::os::arch::posix88::{mode_t, off_t};
6448
6449             #[cfg(not(target_os = "nacl"))]
6450             extern {
6451                 pub fn mlock(addr: *const c_void, len: size_t) -> c_int;
6452                 pub fn munlock(addr: *const c_void, len: size_t) -> c_int;
6453                 pub fn mlockall(flags: c_int) -> c_int;
6454                 pub fn munlockall() -> c_int;
6455
6456                 pub fn mprotect(addr: *mut c_void, len: size_t, prot: c_int)
6457                                 -> c_int;
6458
6459                 #[cfg_attr(target_os = "netbsd", link_name = "__msync13")]
6460                 pub fn msync(addr: *mut c_void, len: size_t, flags: c_int)
6461                              -> c_int;
6462
6463                 pub fn shm_open(name: *const c_char, oflag: c_int, mode: mode_t)
6464                                 -> c_int;
6465                 pub fn shm_unlink(name: *const c_char) -> c_int;
6466             }
6467
6468             extern {
6469                 pub fn mmap(addr: *mut c_void,
6470                             len: size_t,
6471                             prot: c_int,
6472                             flags: c_int,
6473                             fd: c_int,
6474                             offset: off_t)
6475                             -> *mut c_void;
6476                 pub fn munmap(addr: *mut c_void, len: size_t) -> c_int;
6477
6478             }
6479         }
6480
6481         pub mod net {
6482             use types::os::arch::c95::{c_char, c_uint};
6483
6484             extern {
6485                 pub fn if_nametoindex(ifname: *const c_char) -> c_uint;
6486             }
6487         }
6488
6489     }
6490
6491     #[cfg(any(target_os = "linux",
6492               target_os = "android",
6493               target_os = "macos",
6494               target_os = "ios",
6495               target_os = "freebsd",
6496               target_os = "dragonfly",
6497               target_os = "bitrig",
6498               target_os = "netbsd",
6499               target_os = "openbsd",
6500               target_os = "nacl"))]
6501     pub mod posix01 {
6502         pub mod stat_ {
6503             use types::os::arch::c95::{c_char, c_int};
6504             use types::os::arch::posix01::stat;
6505
6506             extern {
6507                 #[cfg_attr(target_os = "macos", link_name = "lstat64")]
6508                 #[cfg_attr(target_os = "netbsd", link_name = "__lstat50")]
6509                 pub fn lstat(path: *const c_char, buf: *mut stat) -> c_int;
6510             }
6511         }
6512
6513         pub mod unistd {
6514             use types::os::arch::c95::{c_char, c_int, size_t};
6515             use types::os::arch::posix88::{ssize_t, off_t};
6516
6517             extern {
6518                 pub fn readlink(path: *const c_char,
6519                                 buf: *mut c_char,
6520                                 bufsz: size_t)
6521                                 -> ssize_t;
6522
6523                 pub fn fsync(fd: c_int) -> c_int;
6524
6525                 #[cfg(any(target_os = "linux", target_os = "android"))]
6526                 pub fn fdatasync(fd: c_int) -> c_int;
6527
6528                 pub fn setenv(name: *const c_char, val: *const c_char,
6529                               overwrite: c_int) -> c_int;
6530                 #[cfg_attr(target_os = "netbsd", link_name = "__unsetenv13")]
6531                 pub fn unsetenv(name: *const c_char) -> c_int;
6532                 #[cfg_attr(target_os = "netbsd", link_name = "__putenv50")]
6533                 pub fn putenv(string: *mut c_char) -> c_int;
6534
6535                 pub fn symlink(path1: *const c_char,
6536                                path2: *const c_char) -> c_int;
6537
6538                 pub fn ftruncate(fd: c_int, length: off_t) -> c_int;
6539             }
6540         }
6541
6542         pub mod signal {
6543             use types::os::arch::c95::c_int;
6544             use types::os::common::posix01::sighandler_t;
6545
6546             #[cfg(not(all(target_os = "android", any(target_arch = "arm",
6547                                                      target_arch = "x86"))))]
6548             extern {
6549                 pub fn signal(signum: c_int,
6550                               handler: sighandler_t) -> sighandler_t;
6551             }
6552
6553             #[cfg(all(target_os = "android", any(target_arch = "arm",
6554                                                  target_arch = "x86")))]
6555             extern {
6556                 #[link_name = "bsd_signal"]
6557                 pub fn signal(signum: c_int,
6558                               handler: sighandler_t) -> sighandler_t;
6559             }
6560         }
6561
6562         pub mod glob {
6563             use types::os::arch::c95::{c_char, c_int};
6564             use types::os::common::posix01::{glob_t};
6565
6566             extern {
6567                 #[cfg_attr(target_os = "netbsd", link_name = "__glob30")]
6568                 pub fn glob(pattern: *const c_char,
6569                             flags: c_int,
6570                             errfunc: ::core::option::Option<extern "C" fn(epath: *const c_char,
6571                                                               errno: c_int) -> c_int>,
6572                             pglob: *mut glob_t);
6573                 #[cfg_attr(target_os = "netbsd", link_name = "__globfree30")]
6574                 pub fn globfree(pglob: *mut glob_t);
6575             }
6576         }
6577
6578         pub mod mman {
6579             use types::common::c95::{c_void};
6580             use types::os::arch::c95::{c_int, size_t};
6581
6582             #[cfg(not(target_os = "nacl"))]
6583             extern {
6584                 pub fn posix_madvise(addr: *mut c_void,
6585                                      len: size_t,
6586                                      advice: c_int)
6587                                      -> c_int;
6588             }
6589         }
6590
6591         pub mod resource {
6592             use types::os::arch::c95::c_int;
6593             use types::os::common::posix01::rlimit;
6594             use types::os::common::bsd43::rusage;
6595             extern {
6596                 pub fn getrlimit(resource: c_int, rlim: *mut rlimit) -> c_int;
6597                 pub fn setrlimit(resource: c_int, rlim: *const rlimit) -> c_int;
6598                 #[cfg_attr(target_os = "netbsd", link_name = "__getrusage50")]
6599                 pub fn getrusage(resource: c_int, usage: *mut rusage) -> c_int;
6600             }
6601         }
6602     }
6603
6604     #[cfg(target_os = "windows")]
6605     pub mod posix01 {
6606         pub mod stat_ {
6607         }
6608
6609         pub mod unistd {
6610         }
6611
6612         pub mod glob {
6613         }
6614
6615         pub mod mman {
6616         }
6617
6618         pub mod net {
6619         }
6620     }
6621
6622
6623     #[cfg(any(target_os = "android",
6624               target_os = "bitrig",
6625               target_os = "dragonfly",
6626               target_os = "ios",
6627               target_os = "freebsd",
6628               target_os = "linux",
6629               target_os = "macos",
6630               target_os = "nacl",
6631               target_os = "netbsd",
6632               target_os = "openbsd",
6633               target_os = "windows"))]
6634     pub mod posix08 {
6635         pub mod unistd {
6636         }
6637     }
6638
6639     #[cfg(not(windows))]
6640     pub mod bsd43 {
6641         use types::common::c95::{c_void};
6642         use types::os::common::bsd44::{socklen_t, sockaddr, ifaddrs};
6643         use types::os::arch::c95::{c_int, size_t};
6644         use types::os::arch::posix88::ssize_t;
6645
6646         extern "system" {
6647             #[cfg_attr(target_os = "netbsd", link_name = "__socket30")]
6648             pub fn socket(domain: c_int, ty: c_int, protocol: c_int) -> c_int;
6649
6650             pub fn connect(socket: c_int, address: *const sockaddr,
6651                            len: socklen_t) -> c_int;
6652             pub fn bind(socket: c_int, address: *const sockaddr,
6653                         address_len: socklen_t) -> c_int;
6654             pub fn listen(socket: c_int, backlog: c_int) -> c_int;
6655             pub fn accept(socket: c_int, address: *mut sockaddr,
6656                           address_len: *mut socklen_t) -> c_int;
6657             pub fn getpeername(socket: c_int, address: *mut sockaddr,
6658                                address_len: *mut socklen_t) -> c_int;
6659             pub fn getsockname(socket: c_int, address: *mut sockaddr,
6660                                address_len: *mut socklen_t) -> c_int;
6661             pub fn setsockopt(socket: c_int, level: c_int, name: c_int,
6662                               value: *const c_void,
6663                               option_len: socklen_t) -> c_int;
6664             pub fn recv(socket: c_int, buf: *mut c_void, len: size_t,
6665                         flags: c_int) -> ssize_t;
6666             pub fn send(socket: c_int, buf: *const c_void, len: size_t,
6667                         flags: c_int) -> ssize_t;
6668             pub fn recvfrom(socket: c_int, buf: *mut c_void, len: size_t,
6669                             flags: c_int, addr: *mut sockaddr,
6670                             addrlen: *mut socklen_t) -> ssize_t;
6671             pub fn sendto(socket: c_int, buf: *const c_void, len: size_t,
6672                           flags: c_int, addr: *const sockaddr,
6673                           addrlen: socklen_t) -> ssize_t;
6674             pub fn getifaddrs(ifap: *mut *mut ifaddrs) -> c_int;
6675             pub fn freeifaddrs(ifa: *mut ifaddrs);
6676             pub fn shutdown(socket: c_int, how: c_int) -> c_int;
6677         }
6678     }
6679
6680     #[cfg(windows)]
6681     pub mod bsd43 {
6682         use types::common::c95::{c_void};
6683         use types::os::common::bsd44::{socklen_t, sockaddr, SOCKET};
6684         use types::os::arch::c95::c_int;
6685
6686         extern "system" {
6687             pub fn socket(domain: c_int, ty: c_int, protocol: c_int) -> SOCKET;
6688             pub fn connect(socket: SOCKET, address: *const sockaddr,
6689                            len: socklen_t) -> c_int;
6690             pub fn bind(socket: SOCKET, address: *const sockaddr,
6691                         address_len: socklen_t) -> c_int;
6692             pub fn listen(socket: SOCKET, backlog: c_int) -> c_int;
6693             pub fn accept(socket: SOCKET, address: *mut sockaddr,
6694                           address_len: *mut socklen_t) -> SOCKET;
6695             pub fn getpeername(socket: SOCKET, address: *mut sockaddr,
6696                                address_len: *mut socklen_t) -> c_int;
6697             pub fn getsockname(socket: SOCKET, address: *mut sockaddr,
6698                                address_len: *mut socklen_t) -> c_int;
6699             pub fn setsockopt(socket: SOCKET, level: c_int, name: c_int,
6700                               value: *const c_void,
6701                               option_len: socklen_t) -> c_int;
6702             pub fn closesocket(socket: SOCKET) -> c_int;
6703             pub fn recv(socket: SOCKET, buf: *mut c_void, len: c_int,
6704                         flags: c_int) -> c_int;
6705             pub fn send(socket: SOCKET, buf: *const c_void, len: c_int,
6706                         flags: c_int) -> c_int;
6707             pub fn recvfrom(socket: SOCKET, buf: *mut c_void, len: c_int,
6708                             flags: c_int, addr: *mut sockaddr,
6709                             addrlen: *mut c_int) -> c_int;
6710             pub fn sendto(socket: SOCKET, buf: *const c_void, len: c_int,
6711                           flags: c_int, addr: *const sockaddr,
6712                           addrlen: c_int) -> c_int;
6713             pub fn shutdown(socket: SOCKET, how: c_int) -> c_int;
6714         }
6715     }
6716
6717     #[cfg(any(target_os = "macos",
6718               target_os = "ios",
6719               target_os = "freebsd",
6720               target_os = "dragonfly",
6721               target_os = "bitrig",
6722               target_os = "netbsd",
6723               target_os = "openbsd"))]
6724     pub mod bsd44 {
6725         use types::common::c95::{c_void};
6726         use types::os::arch::c95::{c_char, c_uchar, c_int, c_uint, c_ulong, size_t};
6727
6728         extern {
6729             pub fn ioctl(fd: c_int, request: c_ulong, ...) -> c_int;
6730             pub fn sysctl(name: *mut c_int,
6731                           namelen: c_uint,
6732                           oldp: *mut c_void,
6733                           oldlenp: *mut size_t,
6734                           newp: *mut c_void,
6735                           newlen: size_t)
6736                           -> c_int;
6737             pub fn sysctlbyname(name: *const c_char,
6738                                 oldp: *mut c_void,
6739                                 oldlenp: *mut size_t,
6740                                 newp: *mut c_void,
6741                                 newlen: size_t)
6742                                 -> c_int;
6743             pub fn sysctlnametomib(name: *const c_char,
6744                                    mibp: *mut c_int,
6745                                    sizep: *mut size_t)
6746                                    -> c_int;
6747             pub fn getdtablesize() -> c_int;
6748             pub fn madvise(addr: *mut c_void, len: size_t, advice: c_int)
6749                            -> c_int;
6750             pub fn mincore(addr: *mut c_void, len: size_t, vec: *mut c_uchar)
6751                            -> c_int;
6752             pub fn realpath(pathname: *const c_char, resolved: *mut c_char)
6753                             -> *mut c_char;
6754             pub fn flock(fd: c_int, operation: c_int) -> c_int;
6755         }
6756     }
6757
6758     #[cfg(any(target_os = "linux", target_os = "android"))]
6759     pub mod bsd44 {
6760         use types::common::c95::{c_void};
6761         use types::os::arch::c95::{c_uchar, c_int, size_t};
6762         #[cfg(not(feature = "cargo-build"))]
6763         use types::os::arch::c95::c_ulong;
6764
6765         extern {
6766             #[cfg(not(all(target_os = "android", target_arch = "aarch64")))]
6767             pub fn getdtablesize() -> c_int;
6768
6769             // Note that the correct signature of ioctl broke some crates on
6770             // crates.io, so for now we keep the broken signature for crates.io
6771             // but we fix it locally in the main Rust distribution. Once a new
6772             // major version of libc is released on crates.io this #[cfg] should
6773             // go away.
6774             #[cfg(feature = "cargo-build")]
6775             pub fn ioctl(fd: c_int, request: c_int, ...) -> c_int;
6776             #[cfg(not(feature = "cargo-build"))]
6777             pub fn ioctl(fd: c_int, request: c_ulong, ...) -> c_int;
6778             pub fn madvise(addr: *mut c_void, len: size_t, advice: c_int)
6779                            -> c_int;
6780             pub fn mincore(addr: *mut c_void, len: size_t, vec: *mut c_uchar)
6781                            -> c_int;
6782             pub fn flock(fd: c_int, operation: c_int) -> c_int;
6783         }
6784     }
6785
6786     #[cfg(target_os = "nacl")]
6787     pub mod bsd44 {
6788         use types::os::arch::c95::c_int;
6789         extern {
6790             pub fn getdtablesize() -> c_int;
6791         }
6792     }
6793
6794     #[cfg(target_os = "windows")]
6795     pub mod bsd44 {
6796     }
6797
6798     #[cfg(any(target_os = "macos", target_os = "ios"))]
6799     pub mod extra {
6800         use types::os::arch::c95::{c_char, c_int};
6801
6802         extern {
6803             pub fn _NSGetExecutablePath(buf: *mut c_char, bufsize: *mut u32)
6804                                         -> c_int;
6805         }
6806     }
6807
6808     #[cfg(any(target_os = "freebsd",
6809               target_os = "dragonfly",
6810               target_os = "bitrig",
6811               target_os = "netbsd",
6812               target_os = "openbsd"))]
6813     pub mod extra {
6814     }
6815
6816     #[cfg(any(target_os = "linux", target_os = "android", target_os = "nacl"))]
6817     pub mod extra {
6818     }
6819
6820
6821     #[cfg(target_os = "windows")]
6822     pub mod extra {
6823
6824         pub mod kernel32 {
6825             use types::os::arch::c95::{c_uint};
6826             use types::os::arch::extra::{BOOL, DWORD, SIZE_T, HMODULE,
6827                                                LPCWSTR, LPWSTR,
6828                                                LPWCH, LPDWORD, LPVOID,
6829                                                LPCVOID, LPOVERLAPPED,
6830                                                LPSECURITY_ATTRIBUTES,
6831                                                LPSTARTUPINFO,
6832                                                LPPROCESS_INFORMATION,
6833                                                LPMEMORY_BASIC_INFORMATION,
6834                                                LPSYSTEM_INFO, HANDLE, LPHANDLE,
6835                                                LARGE_INTEGER, PLARGE_INTEGER,
6836                                                LPFILETIME, LPWIN32_FIND_DATAW};
6837
6838             extern "system" {
6839                 pub fn GetEnvironmentVariableW(n: LPCWSTR,
6840                                                v: LPWSTR,
6841                                                nsize: DWORD)
6842                                                -> DWORD;
6843                 pub fn SetEnvironmentVariableW(n: LPCWSTR, v: LPCWSTR)
6844                                                -> BOOL;
6845                 pub fn GetEnvironmentStringsW() -> LPWCH;
6846                 pub fn FreeEnvironmentStringsW(env_ptr: LPWCH) -> BOOL;
6847                 pub fn GetModuleFileNameW(hModule: HMODULE,
6848                                           lpFilename: LPWSTR,
6849                                           nSize: DWORD)
6850                                           -> DWORD;
6851                 pub fn CreateDirectoryW(lpPathName: LPCWSTR,
6852                                         lpSecurityAttributes:
6853                                         LPSECURITY_ATTRIBUTES)
6854                                         -> BOOL;
6855                 pub fn CopyFileW(lpExistingFileName: LPCWSTR,
6856                                  lpNewFileName: LPCWSTR,
6857                                  bFailIfExists: BOOL)
6858                                  -> BOOL;
6859                 pub fn DeleteFileW(lpPathName: LPCWSTR) -> BOOL;
6860                 pub fn RemoveDirectoryW(lpPathName: LPCWSTR) -> BOOL;
6861                 pub fn GetCurrentDirectoryW(nBufferLength: DWORD,
6862                                             lpBuffer: LPWSTR)
6863                                             -> DWORD;
6864                 pub fn SetCurrentDirectoryW(lpPathName: LPCWSTR) -> BOOL;
6865                 pub fn GetLastError() -> DWORD;
6866                 pub fn FindFirstFileW(fileName: LPCWSTR, findFileData: LPWIN32_FIND_DATAW)
6867                                       -> HANDLE;
6868                 pub fn FindNextFileW(findFile: HANDLE, findFileData: LPWIN32_FIND_DATAW)
6869                                      -> BOOL;
6870                 pub fn FindClose(findFile: HANDLE) -> BOOL;
6871                 pub fn DuplicateHandle(hSourceProcessHandle: HANDLE,
6872                                        hSourceHandle: HANDLE,
6873                                        hTargetProcessHandle: HANDLE,
6874                                        lpTargetHandle: LPHANDLE,
6875                                        dwDesiredAccess: DWORD,
6876                                        bInheritHandle: BOOL,
6877                                        dwOptions: DWORD)
6878                                        -> BOOL;
6879                 pub fn CloseHandle(hObject: HANDLE) -> BOOL;
6880                 pub fn OpenProcess(dwDesiredAccess: DWORD,
6881                                    bInheritHandle: BOOL,
6882                                    dwProcessId: DWORD)
6883                                    -> HANDLE;
6884                 pub fn GetCurrentProcess() -> HANDLE;
6885                 pub fn CreateProcessW(lpApplicationName: LPCWSTR,
6886                                       lpCommandLine: LPWSTR,
6887                                       lpProcessAttributes:
6888                                       LPSECURITY_ATTRIBUTES,
6889                                       lpThreadAttributes:
6890                                       LPSECURITY_ATTRIBUTES,
6891                                       bInheritHandles: BOOL,
6892                                       dwCreationFlags: DWORD,
6893                                       lpEnvironment: LPVOID,
6894                                       lpCurrentDirectory: LPCWSTR,
6895                                       lpStartupInfo: LPSTARTUPINFO,
6896                                       lpProcessInformation:
6897                                       LPPROCESS_INFORMATION)
6898                                       -> BOOL;
6899                 pub fn WaitForSingleObject(hHandle: HANDLE,
6900                                            dwMilliseconds: DWORD)
6901                                            -> DWORD;
6902                 pub fn TerminateProcess(hProcess: HANDLE, uExitCode: c_uint)
6903                                         -> BOOL;
6904                 pub fn GetExitCodeProcess(hProcess: HANDLE,
6905                                           lpExitCode: LPDWORD)
6906                                           -> BOOL;
6907                 pub fn GetSystemInfo(lpSystemInfo: LPSYSTEM_INFO);
6908                 pub fn VirtualAlloc(lpAddress: LPVOID,
6909                                     dwSize: SIZE_T,
6910                                     flAllocationType: DWORD,
6911                                     flProtect: DWORD)
6912                                     -> LPVOID;
6913                 pub fn VirtualFree(lpAddress: LPVOID,
6914                                    dwSize: SIZE_T,
6915                                    dwFreeType: DWORD)
6916                                    -> BOOL;
6917                 pub fn VirtualLock(lpAddress: LPVOID, dwSize: SIZE_T) -> BOOL;
6918                 pub fn VirtualUnlock(lpAddress: LPVOID, dwSize: SIZE_T)
6919                                      -> BOOL;
6920                 pub fn VirtualProtect(lpAddress: LPVOID,
6921                                       dwSize: SIZE_T,
6922                                       flNewProtect: DWORD,
6923                                       lpflOldProtect: LPDWORD)
6924                                       -> BOOL;
6925                 pub fn VirtualQuery(lpAddress: LPCVOID,
6926                                     lpBuffer: LPMEMORY_BASIC_INFORMATION,
6927                                     dwLength: SIZE_T)
6928                                     -> SIZE_T;
6929                 pub fn CreateFileMappingW(hFile: HANDLE,
6930                                           lpAttributes: LPSECURITY_ATTRIBUTES,
6931                                           flProtect: DWORD,
6932                                           dwMaximumSizeHigh: DWORD,
6933                                           dwMaximumSizeLow: DWORD,
6934                                           lpName: LPCWSTR)
6935                                           -> HANDLE;
6936                 pub fn MapViewOfFile(hFileMappingObject: HANDLE,
6937                                      dwDesiredAccess: DWORD,
6938                                      dwFileOffsetHigh: DWORD,
6939                                      dwFileOffsetLow: DWORD,
6940                                      dwNumberOfBytesToMap: SIZE_T)
6941                                      -> LPVOID;
6942                 pub fn UnmapViewOfFile(lpBaseAddress: LPCVOID) -> BOOL;
6943                 pub fn MoveFileExW(lpExistingFileName: LPCWSTR,
6944                                    lpNewFileName: LPCWSTR,
6945                                    dwFlags: DWORD) -> BOOL;
6946                 pub fn CreateHardLinkW(lpSymlinkFileName: LPCWSTR,
6947                                        lpTargetFileName: LPCWSTR,
6948                                        lpSecurityAttributes: LPSECURITY_ATTRIBUTES)
6949                                         -> BOOL;
6950                 pub fn FlushFileBuffers(hFile: HANDLE) -> BOOL;
6951                 pub fn CreateFileW(lpFileName: LPCWSTR,
6952                                    dwDesiredAccess: DWORD,
6953                                    dwShareMode: DWORD,
6954                                    lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
6955                                    dwCreationDisposition: DWORD,
6956                                    dwFlagsAndAttributes: DWORD,
6957                                    hTemplateFile: HANDLE) -> HANDLE;
6958                 pub fn ReadFile(hFile: HANDLE,
6959                                 lpBuffer: LPVOID,
6960                                 nNumberOfBytesToRead: DWORD,
6961                                 lpNumberOfBytesRead: LPDWORD,
6962                                 lpOverlapped: LPOVERLAPPED) -> BOOL;
6963                 pub fn WriteFile(hFile: HANDLE,
6964                                  lpBuffer: LPVOID,
6965                                  nNumberOfBytesToWrite: DWORD,
6966                                  lpNumberOfBytesWritten: LPDWORD,
6967                                  lpOverlapped: LPOVERLAPPED) -> BOOL;
6968                 pub fn SetFilePointerEx(hFile: HANDLE,
6969                                         liDistanceToMove: LARGE_INTEGER,
6970                                         lpNewFilePointer: PLARGE_INTEGER,
6971                                         dwMoveMethod: DWORD) -> BOOL;
6972                 pub fn SetEndOfFile(hFile: HANDLE) -> BOOL;
6973
6974                 pub fn GetSystemTimeAsFileTime(
6975                             lpSystemTimeAsFileTime: LPFILETIME);
6976
6977                 pub fn QueryPerformanceFrequency(
6978                             lpFrequency: *mut LARGE_INTEGER) -> BOOL;
6979                 pub fn QueryPerformanceCounter(
6980                             lpPerformanceCount: *mut LARGE_INTEGER) -> BOOL;
6981
6982                 pub fn GetCurrentProcessId() -> DWORD;
6983                 pub fn CreateNamedPipeW(
6984                             lpName: LPCWSTR,
6985                             dwOpenMode: DWORD,
6986                             dwPipeMode: DWORD,
6987                             nMaxInstances: DWORD,
6988                             nOutBufferSize: DWORD,
6989                             nInBufferSize: DWORD,
6990                             nDefaultTimeOut: DWORD,
6991                             lpSecurityAttributes: LPSECURITY_ATTRIBUTES
6992                             ) -> HANDLE;
6993                 pub fn ConnectNamedPipe(hNamedPipe: HANDLE,
6994                                         lpOverlapped: LPOVERLAPPED) -> BOOL;
6995                 pub fn WaitNamedPipeW(lpNamedPipeName: LPCWSTR,
6996                                       nTimeOut: DWORD) -> BOOL;
6997                 pub fn SetNamedPipeHandleState(hNamedPipe: HANDLE,
6998                                                lpMode: LPDWORD,
6999                                                lpMaxCollectionCount: LPDWORD,
7000                                                lpCollectDataTimeout: LPDWORD)
7001                                                             -> BOOL;
7002                 pub fn CreateEventW(lpEventAttributes: LPSECURITY_ATTRIBUTES,
7003                                     bManualReset: BOOL,
7004                                     bInitialState: BOOL,
7005                                     lpName: LPCWSTR) -> HANDLE;
7006                 pub fn GetOverlappedResult(hFile: HANDLE,
7007                                            lpOverlapped: LPOVERLAPPED,
7008                                            lpNumberOfBytesTransferred: LPDWORD,
7009                                            bWait: BOOL) -> BOOL;
7010                 pub fn DisconnectNamedPipe(hNamedPipe: HANDLE) -> BOOL;
7011             }
7012         }
7013
7014         pub mod msvcrt {
7015             use types::os::arch::c95::{c_int, c_long};
7016             use types::os::arch::c99::intptr_t;
7017
7018             extern {
7019                 #[link_name = "_commit"]
7020                 pub fn commit(fd: c_int) -> c_int;
7021
7022                 #[link_name = "_get_osfhandle"]
7023                 pub fn get_osfhandle(fd: c_int) -> c_long;
7024
7025                 #[link_name = "_open_osfhandle"]
7026                 pub fn open_osfhandle(osfhandle: intptr_t,
7027                                       flags: c_int) -> c_int;
7028             }
7029         }
7030
7031         pub mod winsock {
7032             use types::os::arch::c95::{c_int, c_long, c_ulong};
7033             use types::os::common::bsd44::SOCKET;
7034
7035             extern "system" {
7036                 pub fn ioctlsocket(s: SOCKET, cmd: c_long, argp: *mut c_ulong) -> c_int;
7037             }
7038         }
7039     }
7040 }
7041
7042 #[test] fn work_on_windows() { } // FIXME #10872 needed for a happy windows