- flist_free(dirlist);
-@@ -194,7 +311,8 @@ static int delete_item(char *fname, int
-
- pop_local_filters(save_filters);
-
-- if (max_delete && ++deletion_count > max_delete)
-+ if (flags & DEL_NO_DELETIONS
-+ || (max_delete && ++deletion_count > max_delete))
- return 0;
-
- if (do_rmdir(fname) == 0) {
-@@ -214,15 +332,19 @@ static int delete_item(char *fname, int
++ if (flags & DEL_NO_DELETIONS)
++ return DR_SUCCESS;
+
+ if (!(flags & DEL_MAKE_ROOM) && max_delete >= 0 && ++deletion_count > max_delete)
+ return DR_AT_LIMIT;
+@@ -228,6 +344,8 @@ static enum delret delete_item(char *fbuf, int mode, int flags)
+ * its contents, otherwise just checks for content. Returns DR_SUCCESS or
+ * DR_NOT_EMPTY. Note that fname must point to a MAXPATHLEN buffer! (The
+ * buffer is used for recursion, but returned unchanged.)
++ *
++ * Note: --detect-rename may use this routine with DEL_NO_DELETIONS set!
+ */
+ static enum delret delete_dir_contents(char *fname, int flags)
+ {
+@@ -247,7 +365,9 @@ static enum delret delete_dir_contents(char *fname, int flags)
+ save_filters = push_local_filters(fname, dlen);
+
+ non_perishable_cnt = 0;
++ file_extra_cnt += SUM_EXTRA_CNT;
+ dirlist = get_dirlist(fname, dlen, 0);
++ file_extra_cnt -= SUM_EXTRA_CNT;
+ ret = non_perishable_cnt ? DR_NOT_EMPTY : DR_SUCCESS;
+
+ if (!dirlist->used)
+@@ -290,7 +410,8 @@ static enum delret delete_dir_contents(char *fname, int flags)
+ do_chmod(fname, fp->mode |= S_IWUSR);
+ if (delete_dir_contents(fname, flags | DEL_RECURSE) != DR_SUCCESS)
+ ret = DR_NOT_EMPTY;
+- }
++ } else if (detect_renamed && S_ISREG(fp->mode))
++ look_for_rename(fp, fname);
+ if (delete_item(fname, fp->mode, flags) != DR_SUCCESS)
+ ret = DR_NOT_EMPTY;
+ }
+@@ -451,13 +572,18 @@ static void do_delayed_deletions(char *delbuf)