+@@ -186,7 +202,7 @@ static int delete_item(char *fname, int
+ continue;
+
+ strlcpy(p, fp->basename, remainder);
+- delete_item(fname, fp->mode, flags & ~DEL_TERSE);
++ delete_item(fname, fp->mode, FILEFLAGS(fp->fileflags), flags & ~DEL_TERSE);
+ }
+ flist_free(dirlist);
+
+@@ -276,7 +292,7 @@ static void delete_in_dir(struct file_li
+ continue;
+ if (flist_find(flist, fp) < 0) {
+ f_name(fp, delbuf);
+- delete_item(delbuf, fp->mode, DEL_FORCE_RECURSE);
++ delete_item(delbuf, fp->mode, FILEFLAGS(fp->fileflags), DEL_FORCE_RECURSE);
+ }
+ }
+
+@@ -905,7 +921,7 @@ static void recv_generator(char *fname,
+ * we need to delete it. If it doesn't exist, then
+ * (perhaps recursively) create it. */
+ if (statret == 0 && !S_ISDIR(st.st_mode)) {
+- if (delete_item(fname, st.st_mode, del_opts) < 0)
++ if (delete_item(fname, st.st_mode, FILEFLAGS(st.st_flags), del_opts) < 0)
+ return;
+ statret = -1;
+ }
+@@ -996,7 +1012,7 @@ static void recv_generator(char *fname,
+ }
+ /* Not the right symlink (or not a symlink), so
+ * delete it. */
+- if (delete_item(fname, st.st_mode, del_opts) < 0)
++ if (delete_item(fname, st.st_mode, FILEFLAGS(st.st_flags), del_opts) < 0)
+ return;
+ if (!S_ISLNK(st.st_mode))
+ statret = -1;
+@@ -1060,7 +1076,7 @@ static void recv_generator(char *fname,
+ || (st.st_mode & ~CHMOD_BITS) != (file->mode & ~CHMOD_BITS)
+ || st.st_rdev != file->u.rdev) {
+ if (statret == 0
+- && delete_item(fname, st.st_mode, del_opts) < 0)
++ && delete_item(fname, st.st_mode, FILEFLAGS(st.st_flags), del_opts) < 0)
+ return;
+ if (preserve_hard_links && file->link_u.links
+ && hard_link_check(file, ndx, fname, -1, &st,
+@@ -1145,7 +1161,7 @@ static void recv_generator(char *fname,
+ fnamecmp_type = FNAMECMP_FNAME;
+
+ if (statret == 0 && !S_ISREG(st.st_mode)) {
+- if (delete_item(fname, st.st_mode, del_opts) != 0)
++ if (delete_item(fname, st.st_mode, FILEFLAGS(st.st_flags), del_opts) != 0)
+ return;
+ statret = -1;
+ stat_errno = ENOENT;