- extern int delete_during;
- extern int delete_after;
-@@ -324,9 +325,21 @@ void itemize(struct file_struct *file, i
- : S_ISDIR(file->mode) ? !omit_dir_times
- : !S_ISLNK(file->mode);
-
-+ if (iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !keep_time
-+ && (!(iflags & ITEM_XNAME_FOLLOWS) || *xname)) {
-+ iflags |= ITEM_REPORT_TIME;
-+ if (!preserve_atimes && !S_ISDIR(file->mode))
-+ iflags |= ITEM_REPORT_ATIME;
-+ } else {
-+ if (keep_time && cmp_time(file->modtime, st->st_mtime) != 0)
-+ iflags |= ITEM_REPORT_TIME;
-+ if (preserve_atimes && !S_ISDIR(file->mode)
-+ && cmp_time(file->atime, st->st_atime) != 0)
-+ iflags |= ITEM_REPORT_ATIME;
-+ }
- if ((iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !keep_time
- && (!(iflags & ITEM_XNAME_FOLLOWS) || *xname))
-- || (keep_time && cmp_modtime(file->modtime, st->st_mtime) != 0))
-+ || (keep_time && cmp_time(file->modtime, st->st_mtime) != 0))
- iflags |= ITEM_REPORT_TIME;
- if (preserve_perms
- && (file->mode & CHMOD_BITS) != (st->st_mode & CHMOD_BITS))
-@@ -378,7 +391,7 @@ static int unchanged_file(char *fn, stru
- if (ignore_times)
- return 0;
-
-- return cmp_modtime(st->st_mtime, file->modtime) == 0;
-+ return cmp_time(st->st_mtime, file->modtime) == 0;
- }
-
+@@ -90,6 +91,7 @@ extern dev_t filesystem_dev;
+ extern char *backup_dir;
+ extern char *backup_suffix;
+ extern int backup_suffix_len;
++extern unsigned int file_struct_len;
+ extern struct file_list *the_file_list;
+ extern struct filter_list_struct server_filter_list;
+
+@@ -182,7 +184,7 @@ static int delete_item(char *fname, int
+ for (j = dirlist->count; j--; ) {
+ struct file_struct *fp = dirlist->files[j];
+
+- if (fp->flags & FLAG_MOUNT_POINT)
++ if (FFLAGS(fp) & FLAG_MOUNT_POINT)
+ continue;
+
+ strlcpy(p, fp->basename, remainder);
+@@ -260,7 +262,7 @@ static void delete_in_dir(struct file_li
+ filt_array[cur_depth] = push_local_filters(fbuf, dlen);
+
+ if (one_file_system) {
+- if (file->flags & FLAG_TOP_DIR)
++ if (FFLAGS(file) & FLAG_TOP_DIR)
+ filesystem_dev = stp->st_dev;
+ else if (filesystem_dev != stp->st_dev)
+ return;
+@@ -272,7 +274,7 @@ static void delete_in_dir(struct file_li
+ * from the filesystem. */
+ for (i = dirlist->count; i--; ) {
+ struct file_struct *fp = dirlist->files[i];
+- if (!fp->basename || fp->flags & FLAG_MOUNT_POINT)
++ if (!fp->basename || FFLAGS(fp) & FLAG_MOUNT_POINT)
+ continue;
+ if (flist_find(flist, fp) < 0) {
+ f_name(fp, delbuf);
+@@ -298,11 +300,11 @@ static void do_delete_pass(struct file_l
+ for (j = 0; j < flist->count; j++) {
+ struct file_struct *file = flist->files[j];
+
+- if (!(file->flags & FLAG_DEL_HERE))
++ if (!(FFLAGS(file) & FLAG_DEL_HERE))
+ continue;
+
+ f_name(file, fbuf);
+- if (verbose > 1 && file->flags & FLAG_TOP_DIR)
++ if (verbose > 1 && FFLAGS(file) & FLAG_TOP_DIR)
+ rprintf(FINFO, "deleting in %s\n", fbuf);
+
+ if (link_stat(fbuf, &st, keep_dirlinks) < 0
+@@ -346,6 +348,9 @@ void itemize(struct file_struct *file, i
+ && (!(iflags & ITEM_XNAME_FOLLOWS) || *xname))
+ || (keep_time && cmp_time(file->modtime, st->st_mtime) != 0))
+ iflags |= ITEM_REPORT_TIME;
++ if (preserve_atimes && !S_ISDIR(file->mode) && !S_ISLNK(file->mode)
++ && cmp_time(file->atime, st->st_atime) != 0)
++ iflags |= ITEM_REPORT_ATIME;
+ if ((file->mode & CHMOD_BITS) != (st->st_mode & CHMOD_BITS))
+ iflags |= ITEM_REPORT_PERMS;
+ if (preserve_uid && am_root && file->uid != st->st_uid)
+@@ -549,7 +554,7 @@ static int find_fuzzy(struct file_struct
+ uint32 dist;
+
+ if (!S_ISREG(fp->mode) || !fp->length
+- || fp->flags & FLAG_NO_FUZZY)
++ || FFLAGS(fp) & FLAG_NO_FUZZY)
+ continue;