X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/21cddef2b460098f5289b9cdbd592bf8f0f9e759..ee1c00fea8647356e403368fad9ad4c909e9ef08:/rsync.c diff --git a/rsync.c b/rsync.c index 2c026a2d..c84e8e8d 100644 --- a/rsync.c +++ b/rsync.c @@ -45,6 +45,7 @@ extern int gid_ndx; extern int inc_recurse; extern int inplace; extern int flist_eof; +extern int file_old_total; extern int msgs2stderr; extern int keep_dirlinks; extern int make_backups; @@ -313,7 +314,15 @@ int read_ndx_and_attrs(int f_in, int *iflag_ptr, uchar *type_ptr, goto read_loop; } - cur_flist = flist_for_ndx(ndx, "read_ndx_and_attrs"); + flist = flist_for_ndx(ndx, "read_ndx_and_attrs"); + if (flist != cur_flist) { + cur_flist = flist; + if (am_sender) { + file_old_total = cur_flist->used; + for (flist = first_flist; flist != cur_flist; flist = flist->next) + file_old_total += flist->used; + } + } if (iflags & ITEM_BASIS_TYPE_FOLLOWS) fnamecmp_type = read_byte(f_in); @@ -426,7 +435,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, flags |= ATTRS_SKIP_MTIME; if (!(flags & ATTRS_SKIP_MTIME) && cmp_time(sxp->st.st_mtime, file->modtime) != 0) { - int ret = set_modtime(fname, file->modtime, sxp->st.st_mode); + int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), sxp->st.st_mode); if (ret < 0) { rsyserr(FERROR_XFER, errno, "failed to set times on %s", full_fname(fname)); @@ -488,8 +497,10 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp, * If set_acl() changes permission bits in the process of setting * an access ACL, it changes sxp->st.st_mode so we know whether we * need to chmod(). */ - if (preserve_acls && !S_ISLNK(new_mode) && set_acl(fname, file, sxp) == 0) - updated = 1; + if (preserve_acls && !S_ISLNK(new_mode)) { + if (set_acl(fname, file, sxp, new_mode) > 0) + updated = 1; + } #endif #ifdef HAVE_CHMOD