From 0220e8316a623a00c92624b585580bcd41636145 Mon Sep 17 00:00:00 2001 From: max-amb Date: Wed, 10 Jun 2026 01:09:28 +0100 Subject: [PATCH 1/2] chmod: modified errors for parity with gnu --- src/uu/chmod/src/chmod.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/uu/chmod/src/chmod.rs b/src/uu/chmod/src/chmod.rs index 4c6b3e0f76c..37b7c9c588e 100644 --- a/src/uu/chmod/src/chmod.rs +++ b/src/uu/chmod/src/chmod.rs @@ -13,7 +13,9 @@ use std::os::unix::fs::{MetadataExt, PermissionsExt}; use std::path::{Path, PathBuf}; use thiserror::Error; use uucore::display::Quotable; -use uucore::error::{ExitCode, UError, UResult, USimpleError, UUsageError, set_exit_code}; +use uucore::error::{ + ExitCode, UError, UResult, USimpleError, UUsageError, set_exit_code, strip_errno, +}; use uucore::fs::{FileInformation, display_permissions_unix}; use uucore::mode; use uucore::perms::{TraverseSymlinks, configure_symlink_and_recursion}; @@ -772,13 +774,13 @@ impl Chmoder { } fn change_file(&self, fperm: u32, mode: u32, file: &Path) -> Result<(), i32> { - if fperm == mode { - // Use the helper method for consistent reporting - self.report_permission_change(file, fperm, mode); - Ok(()) - } else if let Err(err) = fs::set_permissions(file, fs::Permissions::from_mode(mode)) { + if let Err(err) = fs::set_permissions(file, fs::Permissions::from_mode(mode)) { if !self.quiet { - show_error!("{err}"); + show_error!( + "changing permissions of {}: {}", + file.quote(), + strip_errno(&err) + ); } if self.verbose { println!( From bb42596f88e7a1678be204549fb2c4a84275b89b Mon Sep 17 00:00:00 2001 From: max-amb Date: Wed, 10 Jun 2026 01:12:07 +0100 Subject: [PATCH 2/2] Added clarification for modification --- src/uu/chmod/src/chmod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/uu/chmod/src/chmod.rs b/src/uu/chmod/src/chmod.rs index 37b7c9c588e..5fed24a806f 100644 --- a/src/uu/chmod/src/chmod.rs +++ b/src/uu/chmod/src/chmod.rs @@ -774,6 +774,7 @@ impl Chmoder { } fn change_file(&self, fperm: u32, mode: u32, file: &Path) -> Result<(), i32> { + // fs::set_permissions calls chmod which we need for the gnu test chmod/only-op.sh if let Err(err) = fs::set_permissions(file, fs::Permissions::from_mode(mode)) { if !self.quiet { show_error!(