[package] name = "rustix" version = "0.38.39" authors = [ "Dan Gohman ", "Jakub Konka ", ] description = "Safe Rust bindings to POSIX/Unix/Linux/Winsock-like syscalls" documentation = "https://docs.rs/rustix" license = "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT" repository = "https://github.com/bytecodealliance/rustix" edition = "2021" keywords = ["api", "file", "network", "safe", "syscall"] categories = ["os::unix-apis", "date-and-time", "filesystem", "network-programming"] include = ["src", "build.rs", "Cargo.toml", "COPYRIGHT", "LICENSE*", "/*.md", "benches"] rust-version = "1.63" [dependencies] bitflags = { version = "2.4.0", default-features = false } itoa = { version = "1.0.1", default-features = false, optional = true } # Special dependencies used in rustc-dep-of-std mode. core = { version = "1.0.0", optional = true, package = "rustc-std-workspace-core" } rustc-std-workspace-alloc = { version = "1.0.0", optional = true } # not aliased here but in lib.rs because of name collision with the alloc feature compiler_builtins = { version = '0.1.49', optional = true } # The procfs feature needs once_cell. # With Rust 1.70.0, we can switch to `core::cell::OnceCell`. [target.'cfg(any(target_os = "android", target_os = "linux"))'.dependencies] once_cell = { version = "1.5.2", optional = true } # Dependencies for platforms where linux_raw is supported, in addition to libc: # # On Linux on selected architectures, the linux_raw backend is supported, in # addition to the libc backend. The linux_raw backend is used by default. The # libc backend can be selected via adding `--cfg=rustix_use_libc` to # `RUSTFLAGS` or enabling the `use-libc` cargo feature. [target.'cfg(all(not(rustix_use_libc), not(miri), target_os = "linux", any(target_endian = "little", target_arch = "s390x"), any(target_arch = "arm", all(target_arch = "aarch64", target_pointer_width = "64"), target_arch = "riscv64", all(rustix_use_experimental_asm, target_arch = "powerpc64"), all(rustix_use_experimental_asm, target_arch = "s390x"), all(rustix_use_experimental_asm, target_arch = "mips"), all(rustix_use_experimental_asm, target_arch = "mips32r6"), all(rustix_use_experimental_asm, target_arch = "mips64"), all(rustix_use_experimental_asm, target_arch = "mips64r6"), target_arch = "x86", all(target_arch = "x86_64", target_pointer_width = "64"))))'.dependencies] linux-raw-sys = { version = "0.4.14", default-features = false, features = ["general", "errno", "ioctl", "no_std", "elf"] } libc_errno = { package = "errno", version = "0.3.8", default-features = false, optional = true } libc = { version = "0.2.161", default-features = false, optional = true } # Dependencies for platforms where only libc is supported: # # On all other Unix-family platforms, and under Miri, we always use the libc # backend, so enable its dependencies unconditionally. [target.'cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = "linux", any(target_endian = "little", target_arch = "s390x"), any(target_arch = "arm", all(target_arch = "aarch64", target_pointer_width = "64"), target_arch = "riscv64", all(rustix_use_experimental_asm, target_arch = "powerpc64"), all(rustix_use_experimental_asm, target_arch = "s390x"), all(rustix_use_experimental_asm, target_arch = "mips"), all(rustix_use_experimental_asm, target_arch = "mips32r6"), all(rustix_use_experimental_asm, target_arch = "mips64"), all(rustix_use_experimental_asm, target_arch = "mips64r6"), target_arch = "x86", all(target_arch = "x86_64", target_pointer_width = "64")))))))'.dependencies] libc_errno = { package = "errno", version = "0.3.8", default-features = false } libc = { version = "0.2.161", default-features = false } # Additional dependencies for Linux with the libc backend: # # Some syscalls do not have libc wrappers, such as in `io_uring`. For these, # the libc backend uses the linux-raw-sys ABI and `libc::syscall`. [target.'cfg(all(any(target_os = "android", target_os = "linux"), any(rustix_use_libc, miri, not(all(target_os = "linux", any(target_endian = "little", target_arch = "s390x"), any(target_arch = "arm", all(target_arch = "aarch64", target_pointer_width = "64"), target_arch = "riscv64", all(rustix_use_experimental_asm, target_arch = "powerpc64"), all(rustix_use_experimental_asm, target_arch = "s390x"), all(rustix_use_experimental_asm, target_arch = "mips"), all(rustix_use_experimental_asm, target_arch = "mips32r6"), all(rustix_use_experimental_asm, target_arch = "mips64"), all(rustix_use_experimental_asm, target_arch = "mips64r6"), target_arch = "x86", all(target_arch = "x86_64", target_pointer_width = "64")))))))'.dependencies] linux-raw-sys = { version = "0.4.14", default-features = false, features = ["general", "ioctl", "no_std"] } # For the libc backend on Windows, use the Winsock API in windows-sys. [target.'cfg(windows)'.dependencies.windows-sys] version = "0.52.0" features = [ "Win32_Foundation", "Win32_Networking_WinSock", "Win32_NetworkManagement_IpHelper", "Win32_System_Threading" ] # For the libc backend on Windows, also use the errno crate, which has Windows # support. [target.'cfg(windows)'.dependencies.libc_errno] version = "0.3.8" package = "errno" default-features = false [dev-dependencies] tempfile = "3.5.0" libc = "0.2.161" libc_errno = { package = "errno", version = "0.3.8", default-features = false } serial_test = "2.0.0" memoffset = "0.9.0" flate2 = "1.0" static_assertions = "1.1.0" [target.'cfg(all(criterion, not(any(target_os = "emscripten", target_os = "wasi"))))'.dev-dependencies] criterion = "0.4" # Add Criterion configuration, as described here: # [[bench]] name = "mod" harness = false [package.metadata.docs.rs] features = ["all-apis"] targets = [ "x86_64-unknown-linux-gnu", "i686-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-pc-windows-msvc", "x86_64-unknown-freebsd", "x86_64-unknown-openbsd", "x86_64-unknown-netbsd", "x86_64-unknown-dragonfly", "x86_64-unknown-illumos", "x86_64-unknown-redox", "x86_64-unknown-haiku", "wasm32-unknown-emscripten", "wasm32-wasi", ] [features] # By default, use `std` and use libc for aux values. # # It turns out to be bizarrely awkward to obtain the aux values reliably and # efficiently on Linux from anywhere other than libc. We can do it, but most # users are better served by just using libc for this. default = ["std", "use-libc-auxv"] # This enables use of std. Disabling this enables `#![no_std]`, and requires # Rust 1.64 or newer. std = ["bitflags/std", "alloc", "libc?/std", "libc_errno?/std", "libc-extra-traits"] # Enable this to request the libc backend. use-libc = ["libc_errno", "libc", "libc-extra-traits"] # Enable `extra_traits` in libc types, to provide `Debug`, `Hash`, and other # trait impls for libc types. libc-extra-traits = ["libc?/extra_traits"] # Enable `rustix::event::*`. event = [] # Enable `rustix::fs::*`. fs = [] # Enable `rustix::io_uring::*` (on platforms that support it). io_uring = ["event", "fs", "net", "linux-raw-sys/io_uring"] # Enable `rustix::mount::*`. mount = [] # Enable `rustix::net::*`. net = ["linux-raw-sys/net", "linux-raw-sys/netlink", "linux-raw-sys/if_ether", "linux-raw-sys/xdp"] # Enable `rustix::thread::*`. thread = ["linux-raw-sys/prctl"] # Enable `rustix::process::*`. process = ["linux-raw-sys/prctl"] # Enable `rustix::shm::*`. shm = ["fs"] # Enable `rustix::time::*`. time = [] # Enable `rustix::param::*`. param = ["fs"] # Enable this to enable `rustix::io::proc_self_*` (on Linux) and `ttyname`. procfs = ["once_cell", "itoa", "fs"] # Enable `rustix::pty::*`. pty = ["itoa", "fs"] # Enable `rustix::termios::*`. termios = [] # Enable `rustix::mm::*`. mm = [] # Enable `rustix::pipe::*`. pipe = [] # Enable `rustix::rand::*`. rand = [] # Enable `rustix::stdio::*`. stdio = [] # Enable `rustix::system::*`. system = ["linux-raw-sys/system"] # Enable `rustix::runtime::*`. ⚠ This API is undocumented and unstable and # experimental and not intended for general-purpose use. ⚠ runtime = ["linux-raw-sys/prctl"] # Enable all API features. all-apis = [ "event", "fs", "io_uring", "mm", "mount", "net", "param", "pipe", "process", "procfs", "pty", "rand", "runtime", "shm", "stdio", "system", "termios", "thread", "time", ] # When using the linux_raw backend, should we use libc for reading the aux # vectors, instead of reading them ourselves from /proc/self/auxv? use-libc-auxv = [] # Enable "use-explicitly-provided-auxv" mode, with a public # `rustix::param::init` function that must be called before anything else in # rustix. This is unstable and experimental and not intended for # general-purpose use. use-explicitly-provided-auxv = [] # OS compatibility features # Optimize for Linux 4.11 or later linux_4_11 = [] # Enable all optimizations for the latest Linux versions. linux_latest = ["linux_4_11"] # Enable features which depend on the Rust global allocator, such as functions # that return owned strings or `Vec`s. alloc = [] # This is used in the port of std to rustix. This is experimental and not meant # for regular use. rustc-dep-of-std = [ "core", "rustc-std-workspace-alloc", "compiler_builtins", "linux-raw-sys/rustc-dep-of-std", "bitflags/rustc-dep-of-std", "compiler_builtins?/rustc-dep-of-std", ] # Obsolete and deprecated. cc = [] # Enable `rustix::io::try_close`. The rustix developers do not intend the # existence of this feature to imply that anyone should use it. try_close = [] [lints.rust.unexpected_cfgs] level = "warn" check-cfg = [ 'cfg(alloc_c_string)', 'cfg(alloc_ffi)', 'cfg(apple)', 'cfg(asm_experimental_arch)', 'cfg(bsd)', 'cfg(core_c_str)', 'cfg(core_ffi_c)', 'cfg(core_intrinsics)', 'cfg(criterion)', 'cfg(document_experimental_runtime_api)', 'cfg(fix_y2038)', 'cfg(freebsdlike)', 'cfg(libc)', 'cfg(linux_kernel)', 'cfg(linux_like)', 'cfg(linux_raw)', 'cfg(netbsdlike)', 'cfg(rustc_attrs)', 'cfg(solarish)', 'cfg(staged_api)', 'cfg(static_assertions)', 'cfg(thumb_mode)', 'cfg(wasi)', 'cfg(wasi_ext)', 'cfg(target_arch, values("xtensa"))', ]