From: Wayne Davison Date: Mon, 10 Mar 2008 02:50:51 +0000 (-0700) Subject: Fixed the itemizing of perms with -E. X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/commitdiff_plain/ff0e15804f3f7f730ac1c7c79bcd0f34ca39fa4c Fixed the itemizing of perms with -E. --- 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