if (do_rename(fname,fnamebak) != 0) {
/* cygwin (at least version b19) reports EINVAL */
if (errno != ENOENT && errno != EINVAL) {
- rprintf(FERROR,"rename %s %s : %s\n",fname,fnamebak,strerror(errno));
+ rsyserr(FERROR, errno, "rename %s to backup %s", fname, fnamebak);
return 0;
}
} else if (verbose > 1) {
int failed;
while (keep_trying) {
- if (keep_path_extfs)
- failed = copy_file (src, dst, 0755);
- else
+ if (keep_path_extfs) {
+ failed = copy_file(src, dst, 0755);
+ if (!failed) {
+ do_unlink(src);
+ }
+ } else {
failed = robust_rename (src, dst);
+ }
if (failed) {
if (verbose > 2)
if (do_stat (fname, &st)) return 1;
#endif
- file = make_file (0, fname);
+ file = make_file(-1, fname, NULL, 1);
+
+ /* the file could have disappeared */
+ if (!file) return 1;
/* make a complete pathname for backup file */
if (strlen(backup_dir) + strlen(fname) > (MAXPATHLEN - 1)) {