-/* If an item in dir_list is not found in full_list, delete it from the
- * filesystem. */
-void delete_missing(struct file_list *full_list, struct file_list *dir_list,
- const char *dirname)
-{
- int i, j, mode;
-
- if (max_delete && deletion_count >= max_delete)
- return;
-
- if (verbose > 2)
- rprintf(FINFO, "delete_missing(%s)\n", safe_fname(dirname));
-
- for (i = dir_list->count; i--; ) {
- if (!dir_list->files[i]->basename)
- continue;
- mode = dir_list->files[i]->mode;
- if ((j = flist_find(full_list, dir_list->files[i])) < 0
- || (delete_during && S_ISDIR(mode)
- && !S_ISDIR(full_list->files[j]->mode))) {
- char *f = f_name(dir_list->files[i]);
- if (make_backups && (backup_dir || !is_backup_file(f))
- && !S_ISDIR(mode)) {
- make_backup(f);
- if (verbose) {
- rprintf(FINFO, "deleting %s\n",
- safe_fname(f));
- }
- } else if (S_ISDIR(mode)) {
- int dflag = delete_during ? DEL_FORCE_RECURSE
- : DEL_NO_RECURSE;
- delete_file(f, DEL_DIR | dflag);
- } else {
- delete_file(f, 0);
- }
- deletion_count++;
- if (max_delete && deletion_count >= max_delete)
- break;
- }
- }