+ if (S_ISDIR(mode) && !(flags & DEL_DIR_IS_EMPTY)) {
+ ignore_perishable = 1;
+ /* If DEL_RECURSE is not set, this just reports emptiness. */
+@@ -249,7 +257,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;
+ }
+
+@@ -401,10 +409,10 @@ static void delete_in_dir(struct file_li
+ }
+ if (flist_find(flist, fp) < 0) {
+ f_name(fp, delbuf);
+- if (delete_delay_fp)
++ if (delete_delay_fp) /* XXX need to output fileflags value here too */
+ fprintf(delete_delay_fp, "%o %s%c", (short)fp->mode, delbuf, '\0');
+ else
+- delete_item(delbuf, fp->mode, NULL, DEL_RECURSE);
++ delete_item(delbuf, fp->mode, FILEFLAGS(fp->fileflags), NULL, DEL_RECURSE);
+ }
+ }
+
+@@ -1103,7 +1111,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;
+ }
+@@ -1197,7 +1205,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,
+@@ -1268,7 +1276,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,
+@@ -1354,7 +1362,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;