- extern int delete_during;
- extern int delete_after;
-@@ -323,9 +324,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))
-@@ -377,7 +390,7 @@ static int unchanged_file(char *fn, stru
+@@ -91,6 +92,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;
+
+@@ -185,7 +187,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);
+@@ -263,7 +265,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;
+@@ -275,7 +277,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);
+@@ -301,11 +303,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
+@@ -347,8 +349,11 @@ void itemize(struct file_struct *file, i
+ iflags |= ITEM_REPORT_SIZE;
+ 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_atimes && !S_ISDIR(file->mode) && !S_ISLNK(file->mode)
++ && cmp_time(file->atime, st->st_atime) != 0)
++ iflags |= ITEM_REPORT_ATIME;
+ if (preserve_perms
+ && (file->mode & CHMOD_BITS) != (st->st_mode & CHMOD_BITS))
+ iflags |= ITEM_REPORT_PERMS;
+@@ -397,7 +402,7 @@ int unchanged_file(char *fn, struct file