mesg: adapt to API changes in nix

This commit is contained in:
Daniel Hofstetter
2025-05-23 10:52:10 +02:00
parent da8cede6bb
commit 184b2c8f1e
2 changed files with 6 additions and 5 deletions

View File

@@ -12,5 +12,5 @@ path = "src/main.rs"
[dependencies] [dependencies]
clap = { workspace = true } clap = { workspace = true }
nix = { workspace = true } nix = { workspace = true, features = ["fs"] }
uucore = { workspace = true } uucore = { workspace = true }

View File

@@ -5,7 +5,7 @@
use clap::{builder::PossibleValuesParser, crate_version, Arg, ArgAction, ArgMatches, Command}; use clap::{builder::PossibleValuesParser, crate_version, Arg, ArgAction, ArgMatches, Command};
#[cfg(target_family = "unix")] #[cfg(target_family = "unix")]
use uucore::error::{set_exit_code, UIoError}; use uucore::error::{set_exit_code, UIoError, USimpleError};
use uucore::{error::UResult, format_usage, help_about, help_usage}; use uucore::{error::UResult, format_usage, help_about, help_usage};
const ABOUT: &str = help_about!("mesg.md"); const ABOUT: &str = help_about!("mesg.md");
@@ -14,7 +14,7 @@ const USAGE: &str = help_usage!("mesg.md");
#[cfg(target_family = "unix")] #[cfg(target_family = "unix")]
pub fn do_mesg(matches: &ArgMatches) -> UResult<()> { pub fn do_mesg(matches: &ArgMatches) -> UResult<()> {
use nix::sys::stat::{fchmod, fstat, Mode}; use nix::sys::stat::{fchmod, fstat, Mode};
use std::{io, os::fd::AsRawFd}; use std::io;
use std::{io::IsTerminal, os::fd::AsFd}; use std::{io::IsTerminal, os::fd::AsFd};
for fd in &[ for fd in &[
@@ -23,7 +23,7 @@ pub fn do_mesg(matches: &ArgMatches) -> UResult<()> {
std::io::stderr().as_fd(), std::io::stderr().as_fd(),
] { ] {
if fd.is_terminal() { if fd.is_terminal() {
let st = fstat(fd.as_raw_fd())?; let st = fstat(fd.as_fd()).map_err(|e| USimpleError::new(1, e.desc()))?;
if let Some(enable) = matches.get_one::<String>("enable") { if let Some(enable) = matches.get_one::<String>("enable") {
// 'mesg y' on the GNU version seems to only modify the group write bit, // 'mesg y' on the GNU version seems to only modify the group write bit,
// but 'mesg n' modifies both group and others write bits. // but 'mesg n' modifies both group and others write bits.
@@ -32,7 +32,8 @@ pub fn do_mesg(matches: &ArgMatches) -> UResult<()> {
} else { } else {
st.st_mode & !0o022 st.st_mode & !0o022
}; };
fchmod(fd.as_raw_fd(), Mode::from_bits_retain(new_mode))?; fchmod(fd.as_fd(), Mode::from_bits_retain(new_mode))
.map_err(|e| USimpleError::new(1, e.desc()))?;
if enable == "n" { if enable == "n" {
set_exit_code(1); set_exit_code(1);
} }