-+ if (!copy_atimes || S_ISLNK(st->st_mode) || S_ISDIR(st->st_mode))
-+ flags |= PERMS_SKIP_ATIME;
-+ if ((flags & (PERMS_SKIP_MTIME|PERMS_SKIP_ATIME))
-+ != (PERMS_SKIP_MTIME|PERMS_SKIP_ATIME)) {
-+ time_t atime, mtime;
-+
-+ if (!(flags & PERMS_SKIP_ATIME)
-+ && cmp_time(st->st_atime, file->atime) != 0) {
-+ atime = file->atime;
-+ updated = 1;
-+ } else
-+ atime = st->st_atime;
-+ if (!(flags & PERMS_SKIP_MTIME)
-+ && cmp_time(st->st_mtime, file->modtime) != 0) {
-+ mtime = file->modtime;
-+ updated = 1;
-+ } else
-+ mtime = st->st_mtime;
- /* don't complain about not setting times on directories
- * because some filesystems can't do it */
-- if (set_modtime(fname,file->modtime) != 0 &&
-+ if (updated && set_times(fname, mtime, atime) != 0 &&
- !S_ISDIR(st->st_mode)) {
- rsyserr(FERROR, errno, "failed to set times on %s",
- full_fname(fname));
- return 0;
- }
-- updated = 1;
+- if (set_modtime(fname,file->modtime) != 0) {
+- rsyserr(FERROR, errno, "failed to set times on %s",
+- full_fname(fname));
+- return 0;
+- }
++ && cmp_time(st->st_mtime, file->modtime) != 0) {
++ mtime = file->modtime;
+ updated = 1;
++ } else
++ mtime = st->st_mtime;
++ if (updated && set_times(fname, mtime, atime) != 0) {
++ rsyserr(FERROR, errno, "failed to set times on %s",
++ full_fname(fname));
++ return 0;