diff options
author | Wayne Davison <wayned@samba.org> | 2005-02-19 23:39:47 +0000 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2005-02-19 23:39:47 +0000 |
commit | 042f470ef9bd960986962b5b60dd54817dc5ae03 (patch) | |
tree | b81f6cb989eead47cd986b009e814adc9caac28b /rsync.c | |
parent | 40cc28516dfd0063733c03cfb02f12b1a1e5a93d (diff) | |
download | android_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.c | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -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++; |