X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/e9489cd6cb380b30727bd3d074eacc59abca080e..2171b9395b75cb33543655d85279a6178f2b77d9:/backup.c diff --git a/backup.c b/backup.c index c3f66ebe..934f838d 100644 --- a/backup.c +++ b/backup.c @@ -244,13 +244,12 @@ static int keep_backup(const char *fname) /* Check to see if this is a device file, or link */ if ((am_root && preserve_devices && IS_DEVICE(file->mode)) || (preserve_specials && IS_SPECIAL(file->mode))) { - uint32 *devp = F_RDEV_P(file); - dev_t rdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp)); + int save_errno; do_unlink(buf); - if (do_mknod(buf, file->mode, rdev) < 0) { - int save_errno = errno ? errno : EINVAL; /* 0 paranoia */ + if (do_mknod(buf, file->mode, sx.st.st_rdev) < 0) { + save_errno = errno ? errno : EINVAL; /* 0 paranoia */ if (errno == ENOENT && make_bak_dir(buf) == 0) { - if (do_mknod(buf, file->mode, rdev) < 0) + if (do_mknod(buf, file->mode, sx.st.st_rdev) < 0) save_errno = errno ? errno : save_errno; else save_errno = 0; @@ -259,7 +258,9 @@ static int keep_backup(const char *fname) rsyserr(FERROR, save_errno, "mknod %s failed", full_fname(buf)); } - } else if (verbose > 2) { + } else + save_errno = 0; + if (verbose > 2 && save_errno == 0) { rprintf(FINFO, "make_backup: DEVICE %s successful.\n", fname); }