From ff0e15804f3f7f730ac1c7c79bcd0f34ca39fa4c Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sun, 9 Mar 2008 19:50:51 -0700 Subject: [PATCH] Fixed the itemizing of perms with -E. --- generator.c | 16 ++++++++++------ syscall.c | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/generator.c b/generator.c index 52732016..9e24f564 100644 --- a/generator.c +++ b/generator.c @@ -582,10 +582,11 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) if (preserve_times && cmp_time(sxp->st.st_mtime, file->modtime) != 0) return 0; - if (preserve_perms && !BITS_EQUAL(sxp->st.st_mode, file->mode, CHMOD_BITS)) - return 0; - - if (preserve_executability && ((sxp->st.st_mode & 0111 ? 1 : 0) ^ (file->mode & 0111 ? 1 : 0))) + if (preserve_perms) { + if (!BITS_EQUAL(sxp->st.st_mode, file->mode, CHMOD_BITS)) + return 0; + } else if (preserve_executability + && ((sxp->st.st_mode & 0111 ? 1 : 0) ^ (file->mode & 0111 ? 1 : 0))) return 0; if (am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file)) @@ -638,8 +639,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre ; } else #endif - if ((preserve_perms || preserve_executability) - && !BITS_EQUAL(sxp->st.st_mode, file->mode, CHMOD_BITS)) + if (preserve_perms) { + if (!BITS_EQUAL(sxp->st.st_mode, file->mode, CHMOD_BITS)) + iflags |= ITEM_REPORT_PERMS; + } else if (preserve_executability + && ((sxp->st.st_mode & 0111 ? 1 : 0) ^ (file->mode & 0111 ? 1 : 0))) iflags |= ITEM_REPORT_PERMS; if (uid_ndx && am_root && (uid_t)F_OWNER(file) != sxp->st.st_uid) iflags |= ITEM_REPORT_OWNER; diff --git a/syscall.c b/syscall.c index f2f5bc23..c2180de3 100644 --- a/syscall.c +++ b/syscall.c @@ -169,7 +169,7 @@ int do_chmod(const char *path, mode_t mode) } else code = chmod(path, mode & CHMOD_BITS); if (code != 0 && (preserve_perms || preserve_executability)) - return code; + return code; return 0; } #endif -- 2.34.1