From 2df4e0a3707ff3b70398177e9e001070e47ca9c5 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 16 Sep 2021 01:53:55 +0200 Subject: chmod: correctly report changed modes Chmod used to incorrectly report as changed even files for which the mode did not change. This was caused by extra bits in the st_mode, that were not present when parsed from passed argument in the form of octal number. Patch by Wolf . Signed-off-by: Denys Vlasenko --- coreutils/chmod.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'coreutils') diff --git a/coreutils/chmod.c b/coreutils/chmod.c index e260adab2..8e3e1387e 100644 --- a/coreutils/chmod.c +++ b/coreutils/chmod.c @@ -88,7 +88,8 @@ static int FAST_FUNC fileAction(struct recursive_state *state, if (chmod(fileName, newmode) == 0) { if (OPT_VERBOSE - || (OPT_CHANGED && statbuf->st_mode != newmode) + || (OPT_CHANGED + && (statbuf->st_mode & 07777) != (newmode & 07777)) ) { printf("mode of '%s' changed to %04o (%s)\n", fileName, newmode & 07777, bb_mode_string(newmode)+1); -- cgit v1.2.1