Print strerror when a system error occurs; add a new function rsyserr
[rsync/rsync.git] / backup.c
index 88f9eae..6604f0b 100644 (file)
--- a/backup.c
+++ b/backup.c
@@ -43,7 +43,7 @@ static int make_simple_backup(char *fname)
        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) {
@@ -197,7 +197,10 @@ static int keep_backup(char *fname)
        if (do_stat (fname, &st)) return 1;
 #endif
 
-       file = make_file (0, fname, 0);
+       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)) {