X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/40cc28516dfd0063733c03cfb02f12b1a1e5a93d..34e18ecd6158165b9fc706f281c25bc607c3c72e:/rsync.c diff --git a/rsync.c b/rsync.c index 408f4716..d9e55c7b 100644 --- a/rsync.c +++ b/rsync.c @@ -42,6 +42,15 @@ extern int make_backups; extern struct stats stats; extern char *backup_dir; extern char *log_format; +extern char *backup_suffix; +extern int backup_suffix_len; + + +static int is_backup_file(char *fn) +{ + int k = strlen(fn) - backup_suffix_len; + return k > 0 && strcmp(fn+k, backup_suffix) == 0; +} /* @@ -72,7 +81,12 @@ int delete_file(char *fname, int mode, int flags) return -1; if (!S_ISDIR(mode)) { - if (robust_unlink(fname) == 0) { + int ok; + if (make_backups && (backup_dir || !is_backup_file(fname))) + ok = make_backup(fname); + else + ok = robust_unlink(fname) == 0; + if (ok) { if ((verbose || log_format) && !(flags & DEL_TERSE)) log_delete(fname, mode); deletion_count++;