diff --git a/Cargo.lock b/Cargo.lock index e8d1969ef64..29a11c199f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3559,6 +3559,7 @@ dependencies = [ "clap", "fluent", "libc", + "nix", "uucore", ] diff --git a/src/uu/mkfifo/Cargo.toml b/src/uu/mkfifo/Cargo.toml index ca0cc4dcbec..9006143441b 100644 --- a/src/uu/mkfifo/Cargo.toml +++ b/src/uu/mkfifo/Cargo.toml @@ -20,6 +20,7 @@ path = "src/mkfifo.rs" [dependencies] clap = { workspace = true } libc = { workspace = true } +nix = { workspace = true, features = ["fs"] } uucore = { workspace = true, features = ["fs", "mode"] } fluent = { workspace = true } diff --git a/src/uu/mkfifo/src/mkfifo.rs b/src/uu/mkfifo/src/mkfifo.rs index 351e8fba149..3586eb7c37c 100644 --- a/src/uu/mkfifo/src/mkfifo.rs +++ b/src/uu/mkfifo/src/mkfifo.rs @@ -4,8 +4,8 @@ // file that was distributed with this source code. use clap::{Arg, ArgAction, Command, value_parser}; -use libc::mkfifo; -use std::ffi::CString; +use nix::sys::stat::Mode; +use nix::unistd::mkfifo; use std::fs; use std::os::unix::fs::PermissionsExt; use uucore::display::Quotable; @@ -39,11 +39,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { }; for f in fifos { - let err = unsafe { - let name = CString::new(f.as_bytes()).unwrap(); - mkfifo(name.as_ptr(), 0o666) - }; - if err == -1 { + if mkfifo(f.as_str(), Mode::from_bits_truncate(0o666)).is_err() { show!(USimpleError::new( 1, translate!("mkfifo-error-cannot-create-fifo", "path" => f.quote()),