+@@ -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