save_preserve_xattrs = preserve_xattrs;
preserve_xattrs = 0;
- set_file_attrs(buf, file, NULL, fname, 0);
+ set_file_attrs(buf, file, NULL, fname, ATTRS_SET_NANO);
preserve_xattrs = save_preserve_xattrs;
unmake_file(file);
extern filter_rule_list filter_list, daemon_filter_list;
int maybe_ATTRS_REPORT = 0;
+int maybe_ATTRS_SET_NANO = 0;
static dev_t dev_zero;
static int deldelay_size = 0, deldelay_cnt = 0;
return;
}
+ maybe_ATTRS_SET_NANO = always_checksum ? ATTRS_SET_NANO : 0;
+
if (skip_dir) {
if (is_below(file, skip_dir)) {
if (is_dir)
do_unlink(partialptr);
handle_partial_dir(partialptr, PDIR_DELETE);
}
- set_file_attrs(fname, file, &sx, NULL, maybe_ATTRS_REPORT);
+ set_file_attrs(fname, file, &sx, NULL, maybe_ATTRS_REPORT | maybe_ATTRS_SET_NANO);
if (itemizing)
itemize(fnamecmp, file, ndx, statret, &sx, 0, 0, NULL);
#ifdef SUPPORT_HARD_LINKS
if (!(flags & ATTRS_SKIP_MTIME)
&& (sxp->st.st_mtime != file->modtime
#ifdef ST_MTIME_NSEC
- || (NSEC_BUMP(file) && (uint32)sxp->st.ST_MTIME_NSEC != F_MOD_NSEC(file))
+ || (flags & ATTRS_SET_NANO && NSEC_BUMP(file) && (uint32)sxp->st.ST_MTIME_NSEC != F_MOD_NSEC(file))
#endif
)) {
int ret = set_modtime(fname, file->modtime, F_MOD_NSEC(file), sxp->st.st_mode);
/* Change permissions before putting the file into place. */
set_file_attrs(fnametmp, file, NULL, fnamecmp,
- ok_to_set_time ? 0 : ATTRS_SKIP_MTIME);
+ ok_to_set_time ? ATTRS_SET_NANO : ATTRS_SKIP_MTIME);
/* move tmp file over real file */
if (DEBUG_GTE(RECV, 1))
do_set_file_attrs:
set_file_attrs(fnametmp, file, NULL, fnamecmp,
- ok_to_set_time ? 0 : ATTRS_SKIP_MTIME);
+ ok_to_set_time ? ATTRS_SET_NANO : ATTRS_SKIP_MTIME);
if (temp_copy_name) {
if (do_rename(fnametmp, fname) < 0) {
#define ATTRS_REPORT (1<<0)
#define ATTRS_SKIP_MTIME (1<<1)
+#define ATTRS_SET_NANO (1<<2)
#define FULL_FLUSH 1
#define NORMAL_FLUSH 0