1 //! libc - Raw FFI bindings to platforms' system libraries
2 //!
3 //! [Documentation for other platforms][pd].
4 //!
5 //! [pd]: https://rust-lang.github.io/libc/#platform-specific-documentation
6 #![crate_name = "libc"]
7 #![crate_type = "rlib"]
8 #![allow(
9     renamed_and_removed_lints, // Keep this order.
10     unknown_lints, // Keep this order.
11     bad_style,
12     overflowing_literals,
13     improper_ctypes,
14     // This lint is renamed but we run CI for old stable rustc so should be here.
15     redundant_semicolon,
16     redundant_semicolons
17 )]
18 #![cfg_attr(libc_deny_warnings, deny(warnings))]
19 // Attributes needed when building as part of the standard library
20 #![cfg_attr(feature = "rustc-dep-of-std", feature(link_cfg, no_core))]
21 #![cfg_attr(libc_thread_local, feature(thread_local))]
22 // Enable extra lints:
23 #![cfg_attr(feature = "extra_traits", deny(missing_debug_implementations))]
24 #![deny(missing_copy_implementations, safe_packed_borrows)]
25 #![cfg_attr(not(feature = "rustc-dep-of-std"), no_std)]
26 #![cfg_attr(feature = "rustc-dep-of-std", no_core)]
27 #![cfg_attr(
28     any(feature = "rustc-dep-of-std", target_os = "redox"),
29     feature(static_nobundle, native_link_modifiers, native_link_modifiers_bundle)
30 )]
31 #![cfg_attr(libc_const_extern_fn, feature(const_extern_fn))]
32 
33 #[macro_use]
34 mod macros;
35 
36 cfg_if! {
37     if #[cfg(feature = "rustc-dep-of-std")] {
38         extern crate rustc_std_workspace_core as core;
39         #[allow(unused_imports)]
40         use core::iter;
41         #[allow(unused_imports)]
42         use core::ops;
43         #[allow(unused_imports)]
44         use core::option;
45     }
46 }
47 
48 cfg_if! {
49     if #[cfg(libc_priv_mod_use)] {
50         #[cfg(libc_core_cvoid)]
51         #[allow(unused_imports)]
52         use core::ffi;
53         #[allow(unused_imports)]
54         use core::fmt;
55         #[allow(unused_imports)]
56         use core::hash;
57         #[allow(unused_imports)]
58         use core::num;
59         #[allow(unused_imports)]
60         use core::mem;
61         #[doc(hidden)]
62         #[allow(unused_imports)]
63         use core::clone::Clone;
64         #[doc(hidden)]
65         #[allow(unused_imports)]
66         use core::marker::{Copy, Send, Sync};
67         #[doc(hidden)]
68         #[allow(unused_imports)]
69         use core::option::Option;
70     } else {
71         #[doc(hidden)]
72         #[allow(unused_imports)]
73         pub use core::fmt;
74         #[doc(hidden)]
75         #[allow(unused_imports)]
76         pub use core::hash;
77         #[doc(hidden)]
78         #[allow(unused_imports)]
79         pub use core::num;
80         #[doc(hidden)]
81         #[allow(unused_imports)]
82         pub use core::mem;
83         #[doc(hidden)]
84         #[allow(unused_imports)]
85         pub use core::clone::Clone;
86         #[doc(hidden)]
87         #[allow(unused_imports)]
88         pub use core::marker::{Copy, Send, Sync};
89         #[doc(hidden)]
90         #[allow(unused_imports)]
91         pub use core::option::Option;
92     }
93 }
94 
95 cfg_if! {
96     if #[cfg(windows)] {
97         mod fixed_width_ints;
98         pub use fixed_width_ints::*;
99 
100         mod windows;
101         pub use windows::*;
102     } else if #[cfg(target_os = "fuchsia")] {
103         mod fixed_width_ints;
104         pub use fixed_width_ints::*;
105 
106         mod fuchsia;
107         pub use fuchsia::*;
108     } else if #[cfg(target_os = "switch")] {
109         mod fixed_width_ints;
110         pub use fixed_width_ints::*;
111 
112         mod switch;
113         pub use switch::*;
114     } else if #[cfg(target_os = "psp")] {
115         mod fixed_width_ints;
116         pub use fixed_width_ints::*;
117 
118         mod psp;
119         pub use psp::*;
120     } else if #[cfg(target_os = "vxworks")] {
121         mod fixed_width_ints;
122         pub use fixed_width_ints::*;
123 
124         mod vxworks;
125         pub use vxworks::*;
126     } else if #[cfg(target_os = "solid_asp3")] {
127         mod fixed_width_ints;
128         pub use fixed_width_ints::*;
129 
130         mod solid;
131         pub use solid::*;
132     } else if #[cfg(unix)] {
133         mod fixed_width_ints;
134         pub use fixed_width_ints::*;
135 
136         mod unix;
137         pub use unix::*;
138     } else if #[cfg(target_os = "hermit")] {
139         mod fixed_width_ints;
140         pub use fixed_width_ints::*;
141 
142         mod hermit;
143         pub use hermit::*;
144     } else if #[cfg(all(target_env = "sgx", target_vendor = "fortanix"))] {
145         mod fixed_width_ints;
146         pub use fixed_width_ints::*;
147 
148         mod sgx;
149         pub use sgx::*;
150     } else if #[cfg(any(target_env = "wasi", target_os = "wasi"))] {
151         mod fixed_width_ints;
152         pub use fixed_width_ints::*;
153 
154         mod wasi;
155         pub use wasi::*;
156     } else {
157         // non-supported targets: empty...
158     }
159 }
160