summaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2021-09-16 01:53:55 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2021-09-17 00:39:21 +0200
commit2df4e0a3707ff3b70398177e9e001070e47ca9c5 (patch)
treea7509505f4f86c8b4c3740b5654f262bc507565e /coreutils
parent9fe1548bbfde548d54acaab113656a56ea0ccc72 (diff)
downloadbusybox-2df4e0a3707ff3b70398177e9e001070e47ca9c5.tar.gz
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 <wolf@wolfsden.cz>. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/chmod.c3
1 files changed, 2 insertions, 1 deletions
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);