extern int force_delete;
extern int inplace;
extern int recurse;
+extern int max_delete;
extern int keep_dirlinks;
extern int make_backups;
extern struct stats stats;
}
+int deletion_count = 0; /* used to implement --max-delete */
+
/*
* delete a file or directory. If force_delete is set then delete
* recursively
STRUCT_STAT st;
int zap_dir;
+ if (max_delete && deletion_count >= max_delete)
+ return -1;
+
if (!S_ISDIR(mode)) {
if (robust_unlink(fname) == 0) {
if ((verbose || log_format) && !(flags & DEL_TERSE))
log_delete(fname, mode);
+ deletion_count++;
return 0;
}
if (errno == ENOENT)
else if (do_rmdir(fname) == 0) {
if ((verbose || log_format) && !(flags & DEL_TERSE))
log_delete(fname, mode);
+ deletion_count++;
return 0;
}
if (errno == ENOENT)
closedir(d);
+ if (max_delete && deletion_count >= max_delete)
+ return -1;
if (do_rmdir(fname) != 0 && errno != ENOENT) {
rsyserr(FERROR, errno, "delete_file: rmdir %s failed",
full_fname(fname));
return -1;
}
+ deletion_count++;
return 0;
}