X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/3de73827d7034a8c47d06620ebda0136b2c7fbe2..e26cfccf1651a65046d9ed21d1bbde3914f416a2:/backup.c diff --git a/backup.c b/backup.c index d36524a8..cea1c8d2 100644 --- a/backup.c +++ b/backup.c @@ -21,7 +21,6 @@ #include "rsync.h" extern int verbose; -extern int backup_suffix_len; extern int backup_dir_len; extern unsigned int backup_dir_remainder; extern char backup_dir_buf[MAXPATHLEN]; @@ -30,9 +29,8 @@ extern char *backup_dir; extern int am_root; extern int preserve_devices; +extern int preserve_specials; extern int preserve_links; -extern int preserve_hard_links; -extern int orig_umask; extern int safe_symlinks; /* make a complete pathname for backup file */ @@ -111,7 +109,7 @@ static int make_bak_dir(char *fullpath) } if (*p == '/') { *p = '\0'; - if (do_mkdir(fullpath, 0777 & ~orig_umask) == 0) + if (mkdir_defmode(fullpath) == 0) break; if (errno != ENOENT) { rsyserr(FERROR, errno, @@ -140,7 +138,7 @@ static int make_bak_dir(char *fullpath) p += strlen(p); if (p == end) break; - if (do_mkdir(fullpath, 0777 & ~orig_umask) < 0) { + if (mkdir_defmode(fullpath) < 0) { rsyserr(FERROR, errno, "make_bak_dir mkdir %s failed", full_fname(fullpath)); goto failure; @@ -159,8 +157,9 @@ static int make_bak_dir(char *fullpath) /* robustly move a file, creating new directory structures if necessary */ static int robust_move(char *src, char *dst) { - if (robust_rename(src, dst, 0755) < 0 && (errno != ENOENT - || make_bak_dir(dst) < 0 || robust_rename(src, dst, 0755) < 0)) + if (robust_rename(src, dst, NULL, 0755) < 0 + && (errno != ENOENT || make_bak_dir(dst) < 0 + || robust_rename(src, dst, NULL, 0755) < 0)) return -1; return 0; } @@ -187,7 +186,8 @@ static int keep_backup(char *fname) return 0; /* Check to see if this is a device file, or link */ - if (IS_DEVICE(file->mode) && am_root && preserve_devices) { + if ((am_root && preserve_devices && IS_DEVICE(file->mode)) + || (preserve_specials && IS_SPECIAL(file->mode))) { do_unlink(buf); if (do_mknod(buf, file->mode, file->u.rdev) < 0 && (errno != ENOENT || make_bak_dir(buf) < 0 @@ -259,7 +259,7 @@ static int keep_backup(char *fname) robust_unlink(fname); /* Just in case... */ } } - set_perms(buf, file, NULL, 0); + set_file_attrs(buf, file, NULL, 0); free(file); if (verbose > 1) {