aboutsummaryrefslogtreecommitdiffstats
path: root/rsync.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2005-02-19 23:39:47 +0000
committerWayne Davison <wayned@samba.org>2005-02-19 23:39:47 +0000
commit042f470ef9bd960986962b5b60dd54817dc5ae03 (patch)
treeb81f6cb989eead47cd986b009e814adc9caac28b /rsync.c
parent40cc28516dfd0063733c03cfb02f12b1a1e5a93d (diff)
downloadandroid_external_rsync-042f470ef9bd960986962b5b60dd54817dc5ae03.tar.gz
android_external_rsync-042f470ef9bd960986962b5b60dd54817dc5ae03.tar.bz2
android_external_rsync-042f470ef9bd960986962b5b60dd54817dc5ae03.zip
Made delete_file() backup files it is removing if --backup was specified.
Diffstat (limited to 'rsync.c')
-rw-r--r--rsync.c16
1 files changed, 15 insertions, 1 deletions
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++;