- flist_free(dirlist);
-@@ -196,7 +313,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) {
-@@ -216,15 +334,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;
+@@ -241,6 +357,8 @@ static enum delret delete_item(char *fbuf, uint16 mode, uint16 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, uint16 flags)
+ {
+@@ -260,7 +378,9 @@ static enum delret delete_dir_contents(char *fname, uint16 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)
+@@ -300,7 +420,8 @@ static enum delret delete_dir_contents(char *fname, uint16 flags)
+ if (S_ISDIR(fp->mode)) {
+ 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;
+ }
+@@ -465,13 +586,18 @@ static void do_delayed_deletions(char *delbuf)