1#![deny(missing_docs)]
100#![allow(stable_features)]
101#![cfg_attr(linux_raw, deny(unsafe_code))]
102#![cfg_attr(rustc_attrs, feature(rustc_attrs))]
103#![cfg_attr(docsrs, feature(doc_cfg))]
104#![cfg_attr(all(wasi_ext, target_os = "wasi", feature = "std"), feature(wasi_ext))]
105#![cfg_attr(core_ffi_c, feature(core_ffi_c))]
106#![cfg_attr(core_c_str, feature(core_c_str))]
107#![cfg_attr(all(feature = "alloc", alloc_c_string), feature(alloc_c_string))]
108#![cfg_attr(all(feature = "alloc", alloc_ffi), feature(alloc_ffi))]
109#![cfg_attr(not(feature = "std"), no_std)]
110#![cfg_attr(feature = "rustc-dep-of-std", feature(ip))]
111#![cfg_attr(feature = "rustc-dep-of-std", allow(internal_features))]
112#![cfg_attr(
113 any(feature = "rustc-dep-of-std", core_intrinsics),
114 feature(core_intrinsics)
115)]
116#![cfg_attr(asm_experimental_arch, feature(asm_experimental_arch))]
117#![cfg_attr(not(feature = "all-apis"), allow(dead_code))]
118#![allow(clippy::unnecessary_cast)]
120#![allow(clippy::useless_conversion)]
122#![cfg_attr(
126 any(target_os = "redox", target_os = "wasi", not(feature = "all-apis")),
127 allow(unused_imports)
128)]
129
130#[cfg(all(feature = "rustc-dep-of-std", feature = "alloc"))]
131extern crate rustc_std_workspace_alloc as alloc;
132
133#[cfg(all(feature = "alloc", not(feature = "rustc-dep-of-std")))]
134extern crate alloc;
135
136#[cfg(all(test, static_assertions))]
138#[macro_use]
139#[allow(unused_imports)]
140extern crate static_assertions;
141#[cfg(all(test, not(static_assertions)))]
142#[macro_use]
143#[allow(unused_imports)]
144mod static_assertions;
145
146mod buffer;
148#[cfg(not(windows))]
149#[macro_use]
150pub(crate) mod cstr;
151#[macro_use]
152pub(crate) mod utils;
153#[cfg_attr(feature = "std", path = "maybe_polyfill/std/mod.rs")]
155#[cfg_attr(not(feature = "std"), path = "maybe_polyfill/no_std/mod.rs")]
156pub(crate) mod maybe_polyfill;
157#[cfg(test)]
158#[macro_use]
159pub(crate) mod check_types;
160#[macro_use]
161pub(crate) mod bitcast;
162
163#[cfg(any(
169 all(linux_raw, feature = "use-libc-auxv"),
170 all(libc, not(any(windows, target_os = "espidf", target_os = "wasi")))
171))]
172#[macro_use]
173mod weak;
174
175#[cfg_attr(libc, path = "backend/libc/mod.rs")]
177#[cfg_attr(linux_raw, path = "backend/linux_raw/mod.rs")]
178#[cfg_attr(wasi, path = "backend/wasi/mod.rs")]
179mod backend;
180
181pub mod fd {
186 use super::backend;
187
188 #[cfg(windows)]
192 pub use backend::fd::{AsRawSocket, AsSocket, FromRawSocket, IntoRawSocket};
193
194 pub use backend::fd::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
195}
196
197#[cfg(feature = "event")]
199#[cfg_attr(docsrs, doc(cfg(feature = "event")))]
200pub mod event;
201pub mod ffi;
202#[cfg(not(windows))]
203#[cfg(feature = "fs")]
204#[cfg_attr(docsrs, doc(cfg(feature = "fs")))]
205pub mod fs;
206pub mod io;
207#[cfg(linux_kernel)]
208#[cfg(feature = "io_uring")]
209#[cfg_attr(docsrs, doc(cfg(feature = "io_uring")))]
210pub mod io_uring;
211pub mod ioctl;
212#[cfg(not(any(windows, target_os = "espidf", target_os = "vita", target_os = "wasi")))]
213#[cfg(feature = "mm")]
214#[cfg_attr(docsrs, doc(cfg(feature = "mm")))]
215pub mod mm;
216#[cfg(linux_kernel)]
217#[cfg(feature = "mount")]
218#[cfg_attr(docsrs, doc(cfg(feature = "mount")))]
219pub mod mount;
220#[cfg(not(any(target_os = "redox", target_os = "wasi")))]
221#[cfg(feature = "net")]
222#[cfg_attr(docsrs, doc(cfg(feature = "net")))]
223pub mod net;
224#[cfg(not(any(windows, target_os = "espidf")))]
225#[cfg(feature = "param")]
226#[cfg_attr(docsrs, doc(cfg(feature = "param")))]
227pub mod param;
228#[cfg(not(windows))]
229#[cfg(any(feature = "fs", feature = "mount", feature = "net"))]
230#[cfg_attr(
231 docsrs,
232 doc(cfg(any(feature = "fs", feature = "mount", feature = "net")))
233)]
234pub mod path;
235#[cfg(feature = "pipe")]
236#[cfg_attr(docsrs, doc(cfg(feature = "pipe")))]
237#[cfg(not(any(windows, target_os = "wasi")))]
238pub mod pipe;
239#[cfg(not(windows))]
240#[cfg(feature = "process")]
241#[cfg_attr(docsrs, doc(cfg(feature = "process")))]
242pub mod process;
243#[cfg(feature = "procfs")]
244#[cfg(linux_kernel)]
245#[cfg_attr(docsrs, doc(cfg(feature = "procfs")))]
246pub mod procfs;
247#[cfg(not(windows))]
248#[cfg(not(target_os = "wasi"))]
249#[cfg(feature = "pty")]
250#[cfg_attr(docsrs, doc(cfg(feature = "pty")))]
251pub mod pty;
252#[cfg(not(windows))]
253#[cfg(feature = "rand")]
254#[cfg_attr(docsrs, doc(cfg(feature = "rand")))]
255pub mod rand;
256#[cfg(not(any(
257 windows,
258 target_os = "android",
259 target_os = "espidf",
260 target_os = "vita",
261 target_os = "wasi"
262)))]
263#[cfg(feature = "shm")]
264#[cfg_attr(docsrs, doc(cfg(feature = "shm")))]
265pub mod shm;
266#[cfg(not(windows))]
267#[cfg(feature = "stdio")]
268#[cfg_attr(docsrs, doc(cfg(feature = "stdio")))]
269pub mod stdio;
270#[cfg(feature = "system")]
271#[cfg(not(any(windows, target_os = "wasi")))]
272#[cfg_attr(docsrs, doc(cfg(feature = "system")))]
273pub mod system;
274#[cfg(not(any(windows, target_os = "vita")))]
275#[cfg(feature = "termios")]
276#[cfg_attr(docsrs, doc(cfg(feature = "termios")))]
277pub mod termios;
278#[cfg(not(windows))]
279#[cfg(feature = "thread")]
280#[cfg_attr(docsrs, doc(cfg(feature = "thread")))]
281pub mod thread;
282#[cfg(not(any(windows, target_os = "espidf")))]
283#[cfg(feature = "time")]
284#[cfg_attr(docsrs, doc(cfg(feature = "time")))]
285pub mod time;
286
287#[cfg(not(windows))]
289#[cfg(feature = "runtime")]
290#[cfg(linux_raw)]
291#[cfg_attr(not(document_experimental_runtime_api), doc(hidden))]
292#[cfg_attr(docsrs, doc(cfg(feature = "runtime")))]
293pub mod runtime;
294
295#[cfg(linux_kernel)]
298#[cfg(all(feature = "fs", not(feature = "mount")))]
299pub(crate) mod mount;
300
301#[cfg(not(windows))]
304#[cfg(not(feature = "fs"))]
305#[cfg(all(
306 linux_raw,
307 not(feature = "use-libc-auxv"),
308 not(feature = "use-explicitly-provided-auxv"),
309 any(
310 feature = "param",
311 feature = "process",
312 feature = "runtime",
313 feature = "time",
314 target_arch = "x86",
315 )
316))]
317#[cfg_attr(docsrs, doc(cfg(feature = "fs")))]
318pub(crate) mod fs;
319
320#[cfg(not(windows))]
322#[cfg(not(any(feature = "fs", feature = "mount", feature = "net")))]
323#[cfg(all(
324 linux_raw,
325 not(feature = "use-libc-auxv"),
326 not(feature = "use-explicitly-provided-auxv"),
327 any(
328 feature = "param",
329 feature = "process",
330 feature = "runtime",
331 feature = "time",
332 target_arch = "x86",
333 )
334))]
335pub(crate) mod path;
336
337#[cfg(not(any(windows, target_os = "espidf")))]
339#[cfg(any(feature = "thread", feature = "time", target_arch = "x86"))]
340mod clockid;
341#[cfg(not(any(windows, target_os = "wasi")))]
342#[cfg(any(
343 feature = "procfs",
344 feature = "process",
345 feature = "runtime",
346 feature = "termios",
347 feature = "thread",
348 all(bsd, feature = "event"),
349 all(linux_kernel, feature = "net")
350))]
351mod pid;
352#[cfg(any(feature = "process", feature = "thread"))]
353#[cfg(linux_kernel)]
354mod prctl;
355#[cfg(not(any(windows, target_os = "espidf", target_os = "wasi")))]
356#[cfg(any(feature = "process", feature = "runtime", all(bsd, feature = "event")))]
357mod signal;
358#[cfg(not(windows))]
359#[cfg(any(
360 feature = "fs",
361 feature = "process",
362 feature = "runtime",
363 feature = "thread",
364 feature = "time",
365 all(
366 linux_raw,
367 not(feature = "use-libc-auxv"),
368 not(feature = "use-explicitly-provided-auxv"),
369 any(
370 feature = "param",
371 feature = "process",
372 feature = "runtime",
373 feature = "time",
374 target_arch = "x86",
375 )
376 )
377))]
378mod timespec;
379#[cfg(not(any(windows, target_os = "wasi")))]
380#[cfg(any(
381 feature = "fs",
382 feature = "process",
383 feature = "thread",
384 all(
385 linux_raw,
386 not(feature = "use-libc-auxv"),
387 not(feature = "use-explicitly-provided-auxv"),
388 any(
389 feature = "param",
390 feature = "runtime",
391 feature = "time",
392 target_arch = "x86",
393 )
394 ),
395 all(linux_kernel, feature = "net")
396))]
397mod ugid;