diff --git a/Cargo.lock b/Cargo.lock index 205bfd976..10ee83e0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3772,7 +3772,8 @@ version = "0.8.0" dependencies = [ "clap", "fluent", - "nix", + "libc", + "rustix", "uucore", ] diff --git a/src/uu/mkfifo/Cargo.toml b/src/uu/mkfifo/Cargo.toml index 63f1d8f47..9ee144015 100644 --- a/src/uu/mkfifo/Cargo.toml +++ b/src/uu/mkfifo/Cargo.toml @@ -25,7 +25,8 @@ uucore = { workspace = true, features = ["fs", "mode"] } fluent = { workspace = true } [target.'cfg(unix)'.dependencies] -nix = { workspace = true, features = ["fs"] } +libc = { workspace = true } +rustix = { workspace = true, features = ["fs"] } [features] selinux = ["uucore/selinux"] diff --git a/src/uu/mkfifo/src/mkfifo.rs b/src/uu/mkfifo/src/mkfifo.rs index 648c94ee3..67084066b 100644 --- a/src/uu/mkfifo/src/mkfifo.rs +++ b/src/uu/mkfifo/src/mkfifo.rs @@ -4,8 +4,6 @@ // file that was distributed with this source code. use clap::{Arg, ArgAction, Command, value_parser}; -use nix::sys::stat::Mode; -use nix::unistd::mkfifo; use std::fs; use std::os::unix::fs::PermissionsExt; use uucore::display::Quotable; @@ -48,7 +46,10 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { }; for f in fifos { - if mkfifo(f.as_str(), Mode::from_bits_truncate(0o666)).is_err() { + let c_path = std::ffi::CString::new(f.as_str()).unwrap(); + // SAFETY: c_path is a valid null-terminated C string + let ret = unsafe { libc::mkfifo(c_path.as_ptr(), 0o666) }; + if ret != 0 { show!(USimpleError::new( 1, translate!("mkfifo-error-cannot-create-fifo", "path" => f.quote()),