+ if (S_ISDIR(mode) && !(flags & DEL_DIR_IS_EMPTY)) {
+ ignore_perishable = 1;
+ /* If DEL_RECURSE is not set, this just reports emptiness. */
+@@ -248,7 +256,7 @@ static enum delret delete_dir_contents(c
+ if (S_ISDIR(fp->mode)
+ && delete_dir_contents(fname, flags | DEL_RECURSE) != DR_SUCCESS)
+ ret = DR_NOT_EMPTY;
+- if (delete_item(fname, fp->mode, NULL, flags) != DR_SUCCESS)
++ if (delete_item(fname, fp->mode, FILEFLAGS(fp->fileflags), NULL, flags) != DR_SUCCESS)
+ ret = DR_NOT_EMPTY;
+ }
+
+@@ -338,7 +346,7 @@ static void delete_in_dir(struct file_li
+ }
+ if (flist_find(flist, fp) < 0) {
+ f_name(fp, delbuf);
+- delete_item(delbuf, fp->mode, NULL, DEL_RECURSE);
++ delete_item(delbuf, fp->mode, FILEFLAGS(fp->fileflags), NULL, DEL_RECURSE);
+ }
+ }
+
+@@ -1036,7 +1044,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, "directory", del_opts) != 0)
++ if (delete_item(fname, st.st_mode, FILEFLAGS(st.st_flags), "directory", del_opts) != 0)
+ return;
+ statret = -1;
+ }
+@@ -1130,7 +1138,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, "symlink", del_opts) != 0)
++ if (delete_item(fname, st.st_mode, FILEFLAGS(st.st_flags), "symlink", del_opts) != 0)
+ return;
+ } else if (basis_dir[0] != NULL) {
+ int j = try_dests_non(file, fname, ndx, fnamecmpbuf, &st,
+@@ -1201,7 +1209,7 @@ static void recv_generator(char *fname,
+ goto return_with_success;
+ return;
+ }
+- if (delete_item(fname, st.st_mode, t, del_opts) != 0)
++ if (delete_item(fname, st.st_mode, FILEFLAGS(st.st_flags), t, del_opts) != 0)
+ return;
+ } else if (basis_dir[0] != NULL) {
+ int j = try_dests_non(file, fname, ndx, fnamecmpbuf, &st,
+@@ -1287,7 +1295,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, "regular file", del_opts) != 0)
++ if (delete_item(fname, st.st_mode, FILEFLAGS(st.st_flags), "regular file", del_opts) != 0)
+ return;
+ statret = -1;
+ stat_errno = ENOENT;