./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/acls.c b/acls.c
--- a/acls.c
+++ b/acls.c
Fix a bug that could lose some bits when stripping some (supposedly)
superfluous ACL info.
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/lib/sysacls.c b/lib/sysacls.c
--- a/lib/sysacls.c
+++ b/lib/sysacls.c
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
-@@ -504,6 +504,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
+@@ -505,6 +505,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
: iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !(iflags & ITEM_MATCHED)
&& (!(iflags & ITEM_XNAME_FOLLOWS) || *xname))
iflags |= ITEM_REPORT_TIME;
#if !defined HAVE_LCHMOD && !defined HAVE_SETATTRLIST
if (S_ISLNK(file->mode)) {
;
-@@ -919,6 +922,8 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
+@@ -920,6 +923,8 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
if (link_dest) {
if (!hard_link_one(file, fname, cmpbuf, 1))
goto try_a_copy;
if (preserve_hard_links && F_IS_HLINKED(file))
finish_hard_link(file, fname, ndx, &sxp->st, itemizing, code, j);
if (!maybe_ATTRS_REPORT && (INFO_GTE(NAME, 2) || stdout_format_has_i > 1)) {
-@@ -1123,6 +1128,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx,
+@@ -1124,6 +1129,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx,
static void list_file_entry(struct file_struct *f)
{
char permbuf[PERMSTRING_SIZE];
int64 len;
int colwidth = human_readable ? 14 : 11;
-@@ -1138,10 +1144,12 @@ static void list_file_entry(struct file_struct *f)
+@@ -1139,10 +1145,12 @@ static void list_file_entry(struct file_struct *f)
#ifdef SUPPORT_LINKS
if (preserve_links && S_ISLNK(f->mode)) {
} else
#endif
if (missing_args == 2 && f->mode == 0) {
-@@ -1149,9 +1157,12 @@ static void list_file_entry(struct file_struct *f)
+@@ -1150,9 +1158,12 @@ static void list_file_entry(struct file_struct *f)
colwidth + 31, "*missing",
f_name(f, NULL));
} else {
}
}
-@@ -2065,8 +2076,11 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
+@@ -2068,8 +2079,11 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
do_chmod(fname, file->mode);
if (need_retouch_dir_times) {
STRUCT_STAT st;
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 ? 0 : ATTRS_SKIP_MTIME | ATTRS_SKIP_ATIME);
+- ok_to_set_time ? ATTRS_SET_NANO : ATTRS_SKIP_MTIME);
++ ok_to_set_time ? ATTRS_SET_NANO : ATTRS_SKIP_MTIME | ATTRS_SKIP_ATIME);
/* 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 ? 0 : ATTRS_SKIP_MTIME | ATTRS_SKIP_ATIME);
+- ok_to_set_time ? ATTRS_SET_NANO : ATTRS_SKIP_MTIME);
++ ok_to_set_time ? ATTRS_SET_NANO : ATTRS_SKIP_MTIME | ATTRS_SKIP_ATIME);
if (temp_copy_name) {
if (do_rename(fnametmp, fname) < 0) {
/* These flags are used in the live flist data. */
-@@ -165,6 +166,7 @@
-
+@@ -166,6 +167,7 @@
#define ATTRS_REPORT (1<<0)
#define ATTRS_SKIP_MTIME (1<<1)
-+#define ATTRS_SKIP_ATIME (1<<2)
+ #define ATTRS_SET_NANO (1<<2)
++#define ATTRS_SKIP_ATIME (1<<3)
#define FULL_FLUSH 1
#define NORMAL_FLUSH 0
-@@ -715,12 +717,14 @@ extern int file_extra_cnt;
+@@ -716,12 +718,14 @@ extern int file_extra_cnt;
extern int inc_recurse;
extern int uid_ndx;
extern int gid_ndx;
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
-@@ -1797,7 +1797,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1800,7 +1800,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto notify_others;
if (read_batch || whole_file) {
if (!(backupptr = get_backup_name(fname)))
goto cleanup;
if (!(back_file = make_file(fname, NULL, NULL, 0, NO_FILTERS)))
-@@ -1833,7 +1833,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1836,7 +1836,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto notify_others;
}
if (!(backupptr = get_backup_name(fname))) {
close(fd);
goto cleanup;
-@@ -1957,7 +1957,7 @@ int atomic_create(struct file_struct *file, char *fname, const char *slnk, const
+@@ -1960,7 +1960,7 @@ int atomic_create(struct file_struct *file, char *fname, const char *slnk, const
skip_atomic = 0;
if (del_for_flag) {
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
extern int remove_source_files;
extern int delay_updates;
extern int update_only;
-@@ -573,7 +574,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
+@@ -574,7 +575,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
/* Perform our quick-check heuristic for determining if a file is unchanged. */
{
if (st->st_size != F_LENGTH(file))
return 0;
-@@ -582,7 +583,10 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st)
+@@ -583,7 +584,10 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st)
of the file time to determine whether to sync */
if (always_checksum > 0 && S_ISREG(st->st_mode)) {
char sum[MAX_DIGEST_LEN];
return memcmp(sum, F_SUM(file), flist_csum_len) == 0;
}
-@@ -881,7 +885,7 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
+@@ -882,7 +886,7 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
match_level = 1;
/* FALL THROUGH */
case 1:
continue;
best_match = j;
match_level = 2;
-@@ -1188,7 +1192,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1189,7 +1193,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
* --ignore-non-existing, daemon exclude, or mkdir failure. */
static struct file_struct *skip_dir = NULL;
static struct file_list *fuzzy_dirlist[MAX_BASIS_DIRS+1];
struct file_struct *fuzzy_file = NULL;
int fd = -1, f_copy = -1;
stat_x sx, real_sx;
-@@ -1291,8 +1295,9 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1294,8 +1298,9 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fuzzy_dirlist[i] = NULL;
}
}
#ifdef SUPPORT_ACLS
if (!preserve_perms)
dflt_perms = default_perms_for_dir(dn);
-@@ -1300,7 +1305,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1303,7 +1308,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
parent_dirname = dn;
int i;
strlcpy(fnamecmpbuf, dn, sizeof fnamecmpbuf);
for (i = 0; i < fuzzy_basis; i++) {
-@@ -1312,7 +1317,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1315,7 +1320,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fuzzy_dirlist[i] = NULL;
}
}
}
statret = link_stat(fname, &sx.st, keep_dirlinks && is_dir);
-@@ -1757,7 +1765,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1760,7 +1768,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
;
else if (fnamecmp_type >= FNAMECMP_FUZZY)
;
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -778,6 +778,10 @@ extern int xattrs_ndx;
+@@ -779,6 +779,10 @@ extern int xattrs_ndx;
#define F_SUM(f) ((char*)OPT_EXTRA(f, START_BUMP(f) + HLINK_BUMP(f) \
+ SUM_EXTRA_CNT - 1))
/* Some utility defines: */
#define F_IS_ACTIVE(f) (f)->basename[0]
#define F_IS_HLINKED(f) ((f)->flags & FLAG_HLINKED)
-@@ -980,6 +984,13 @@ typedef struct {
+@@ -981,6 +985,13 @@ typedef struct {
char fname[1]; /* has variable size */
} relnamecache;
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
-@@ -110,6 +110,7 @@ static int dir_tweaking;
+@@ -111,6 +111,7 @@ static int dir_tweaking;
static int symlink_timeset_failed_flags;
static int need_retouch_dir_times;
static int need_retouch_dir_perms;
static const char *solo_file = NULL;
enum nonregtype {
-@@ -584,7 +585,7 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st, int slot
+@@ -585,7 +586,7 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st, int slot
if (always_checksum > 0 && S_ISREG(st->st_mode)) {
char sum[MAX_DIGEST_LEN];
if (checksum_files && slot >= 0)
else
file_checksum(fn, st, sum);
return memcmp(sum, F_SUM(file), flist_csum_len) == 0;
-@@ -1318,7 +1319,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1321,7 +1322,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
}
if (checksum_files) {
}
need_new_dirscan = 0;
}
-@@ -1492,6 +1494,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1495,6 +1497,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
else
change_local_filter_dir(fname, strlen(fname), F_DEPTH(file));
}
prior_dir_file = file;
goto cleanup;
}
-@@ -1771,6 +1774,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1774,6 +1777,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
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 (checksum_files & CSF_UPDATE)
+ set_cached_checksum(cur_flist, file);
if (itemizing)
itemize(fnamecmp, file, ndx, statret, &sx, 0, 0, NULL);
#ifdef SUPPORT_HARD_LINKS
-@@ -2264,6 +2269,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2267,6 +2272,7 @@ void generate_files(int f_out, const char *local_name)
} else
change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp));
}
}
for (i = cur_flist->low; i <= cur_flist->high; i++) {
struct file_struct *file = cur_flist->sorted[i];
-@@ -2358,6 +2364,9 @@ void generate_files(int f_out, const char *local_name)
+@@ -2361,6 +2367,9 @@ void generate_files(int f_out, const char *local_name)
wait_for_receiver();
}
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -986,6 +986,8 @@ typedef struct {
+@@ -987,6 +987,8 @@ typedef struct {
#define CSF_ENABLE (1<<1)
#define CSF_LAX (1<<2)
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
-@@ -582,7 +582,8 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st)
+@@ -583,7 +583,8 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st)
of the file time to determine whether to sync */
if (always_checksum > 0 && S_ISREG(st->st_mode)) {
char sum[MAX_DIGEST_LEN];
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int preserve_specials;
extern int preserve_hard_links;
extern int preserve_executability;
-@@ -1654,7 +1655,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1657,7 +1658,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
extern int preserve_hard_links;
extern int preserve_executability;
extern int preserve_fileflags;
-@@ -393,6 +394,16 @@ static inline int time_diff(STRUCT_STAT *stp, struct file_struct *file)
+@@ -394,6 +395,16 @@ static inline int time_diff(STRUCT_STAT *stp, struct file_struct *file)
#endif
}
static inline int perms_differ(struct file_struct *file, stat_x *sxp)
{
if (preserve_perms)
-@@ -447,7 +458,7 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
+@@ -448,7 +459,7 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
{
if (S_ISLNK(file->mode)) {
#ifdef CAN_SET_SYMLINK_TIMES
return 0;
#endif
#ifdef CAN_CHMOD_SYMLINK
-@@ -467,7 +478,7 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
+@@ -468,7 +479,7 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
return 0;
#endif
} else {
return 0;
if (perms_differ(file, sxp))
return 0;
-@@ -510,6 +521,12 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
+@@ -511,6 +522,12 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
: iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !(iflags & ITEM_MATCHED)
&& (!(iflags & ITEM_XNAME_FOLLOWS) || *xname))
iflags |= ITEM_REPORT_TIME;
#if !defined HAVE_LCHMOD && !defined HAVE_SETATTRLIST
if (S_ISLNK(file->mode)) {
;
-@@ -1134,6 +1151,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx,
+@@ -1135,6 +1152,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx,
static void list_file_entry(struct file_struct *f)
{
char permbuf[PERMSTRING_SIZE];
int64 len;
int colwidth = human_readable ? 14 : 11;
-@@ -1149,10 +1167,12 @@ static void list_file_entry(struct file_struct *f)
+@@ -1150,10 +1168,12 @@ static void list_file_entry(struct file_struct *f)
#ifdef SUPPORT_LINKS
if (preserve_links && S_ISLNK(f->mode)) {
} else
#endif
if (missing_args == 2 && f->mode == 0) {
-@@ -1160,9 +1180,12 @@ static void list_file_entry(struct file_struct *f)
+@@ -1161,9 +1181,12 @@ static void list_file_entry(struct file_struct *f)
colwidth + 31, "*missing",
f_name(f, NULL));
} else {
}
}
-@@ -1255,6 +1278,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1258,6 +1281,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
return;
}
}
/* Change permissions before putting the file into place. */
set_file_attrs(fnametmp, file, NULL, fnamecmp,
ATTRS_DELAY_IMMUTABLE
-- | (ok_to_set_time ? 0 : ATTRS_SKIP_MTIME));
-+ | (ok_to_set_time ? 0 : ATTRS_SKIP_MTIME | ATTRS_SKIP_CRTIME));
+- | (ok_to_set_time ? ATTRS_SET_NANO : ATTRS_SKIP_MTIME));
++ | (ok_to_set_time ? ATTRS_SET_NANO : ATTRS_SKIP_MTIME | ATTRS_SKIP_CRTIME));
/* 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 ? 0 : ATTRS_SKIP_MTIME | ATTRS_SKIP_CRTIME);
+- ok_to_set_time ? ATTRS_SET_NANO : ATTRS_SKIP_MTIME);
++ ok_to_set_time ? ATTRS_SET_NANO : ATTRS_SKIP_MTIME | ATTRS_SKIP_CRTIME);
if (temp_copy_name) {
if (do_rename(fnametmp, fname) < 0) {
/* These flags are used in the live flist data. */
-@@ -167,6 +168,7 @@
- #define ATTRS_REPORT (1<<0)
+@@ -168,6 +169,7 @@
#define ATTRS_SKIP_MTIME (1<<1)
- #define ATTRS_DELAY_IMMUTABLE (1<<2)
-+#define ATTRS_SKIP_CRTIME (1<<3)
+ #define ATTRS_SET_NANO (1<<2)
+ #define ATTRS_DELAY_IMMUTABLE (1<<4)
++#define ATTRS_SKIP_CRTIME (1<<5)
#define FULL_FLUSH 1
#define NORMAL_FLUSH 0
-@@ -183,7 +185,7 @@
+@@ -184,7 +186,7 @@
#define FNAMECMP_FUZZY 0x83
/* For use by the itemize_changes code */
#define ITEM_REPORT_CHANGE (1<<1)
#define ITEM_REPORT_SIZE (1<<2) /* regular files only */
#define ITEM_REPORT_TIMEFAIL (1<<2) /* symlinks only */
-@@ -740,6 +742,7 @@ extern int file_extra_cnt;
+@@ -741,6 +743,7 @@ extern int file_extra_cnt;
extern int inc_recurse;
extern int uid_ndx;
extern int gid_ndx;
extern int fileflags_ndx;
extern int acls_ndx;
extern int xattrs_ndx;
-@@ -747,6 +750,7 @@ extern int xattrs_ndx;
+@@ -748,6 +751,7 @@ extern int xattrs_ndx;
#define FILE_STRUCT_LEN (offsetof(struct file_struct, basename))
#define EXTRA_LEN (sizeof (union file_extras))
#define PTR_EXTRA_CNT ((sizeof (char *) + EXTRA_LEN - 1) / EXTRA_LEN)
#define DEV_EXTRA_CNT 2
#define DIRNODE_EXTRA_CNT 3
#define SUM_EXTRA_CNT ((MAX_DIGEST_LEN + EXTRA_LEN - 1) / EXTRA_LEN)
-@@ -1032,6 +1036,7 @@ typedef struct {
+@@ -1033,6 +1037,7 @@ typedef struct {
typedef struct {
STRUCT_STAT st;
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int size_only;
extern OFF_T max_size;
extern OFF_T min_size;
-@@ -575,6 +576,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
+@@ -576,6 +577,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
/* Perform our quick-check heuristic for determining if a file is unchanged. */
int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st)
{
./configure
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
extern int append_mode;
extern int make_backups;
extern int csum_length;
-@@ -582,7 +583,8 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st)
+@@ -583,7 +584,8 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st)
of the file time to determine whether to sync */
if (always_checksum > 0 && S_ISREG(st->st_mode)) {
char sum[MAX_DIGEST_LEN];
return memcmp(sum, F_SUM(file), flist_csum_len) == 0;
}
-@@ -2225,6 +2227,13 @@ void generate_files(int f_out, const char *local_name)
+@@ -2228,6 +2230,13 @@ void generate_files(int f_out, const char *local_name)
: "enabled");
}
dflt_perms = (ACCESSPERMS & ~orig_umask);
do {
-@@ -2350,6 +2359,9 @@ void generate_files(int f_out, const char *local_name)
+@@ -2353,6 +2362,9 @@ void generate_files(int f_out, const char *local_name)
wait_for_receiver();
}
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -241,12 +241,16 @@ enum msgcode {
+@@ -242,12 +242,16 @@ enum msgcode {
MSG_IO_ERROR=22,/* the sending side had an I/O error */
MSG_IO_TIMEOUT=33,/* tell client about a daemon's timeout value */
MSG_NOOP=42, /* a do-nothing message (legacy protocol-30 only) */
#define NDX_DONE -1
#define NDX_FLIST_EOF -2
#define NDX_DEL_STATS -3
-@@ -1267,7 +1271,8 @@ extern short info_levels[], debug_levels[];
+@@ -1268,7 +1272,8 @@ extern short info_levels[], debug_levels[];
#define DEBUG_CHDIR (DEBUG_BIND+1)
#define DEBUG_CONNECT (DEBUG_CHDIR+1)
#define DEBUG_CMD (DEBUG_CONNECT+1)
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
-@@ -463,7 +463,9 @@ static int fattr_find(struct file_struct *f, char *fname)
+@@ -464,7 +464,9 @@ static int fattr_find(struct file_struct *f, char *fname)
continue;
}
}
diff = u_strcmp(fmid->basename, f->basename);
if (diff == 0) {
good_match = mid;
-@@ -1942,6 +1944,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1945,6 +1947,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fnamecmp = partialptr;
fnamecmp_type = FNAMECMP_PARTIAL_DIR;
statret = 0;
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/backup.c b/backup.c
--- a/backup.c
+++ b/backup.c
extern int whole_file;
extern int list_only;
extern int read_batch;
-@@ -97,10 +98,12 @@ extern char *tmpdir;
+@@ -97,11 +98,13 @@ extern char *tmpdir;
extern char *basis_dir[MAX_BASIS_DIRS+1];
extern struct file_list *cur_flist, *first_flist, *dir_flist;
extern filter_rule_list filter_list, daemon_filter_list;
+extern struct file_list the_fattr_list;
int maybe_ATTRS_REPORT = 0;
+ int maybe_ATTRS_SET_NANO = 0;
static dev_t dev_zero;
+static int unexplored_dirs = 1;
static int deldelay_size = 0, deldelay_cnt = 0;
static char *deldelay_buf = NULL;
static int deldelay_fd = -1;
-@@ -271,13 +274,18 @@ static void do_delayed_deletions(char *delbuf)
+@@ -272,13 +275,18 @@ static void do_delayed_deletions(char *delbuf)
* all the --delete-WHEN options. Note that the fbuf pointer must point to a
* MAXPATHLEN buffer with the name of the directory in it (the functions we
* call will append names onto the end, but the old dir value will be restored
if (!fbuf) {
change_local_filter_dir(NULL, 0, 0);
-@@ -291,17 +299,22 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
+@@ -292,17 +300,22 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
maybe_send_keepalive(time(NULL), MSK_ALLOW_FLUSH);
if (io_error & IOERR_GENERAL && !ignore_errors) {
if (one_file_system) {
if (file->flags & FLAG_TOP_DIR)
filesystem_dev = *fs_dev;
-@@ -311,6 +324,14 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
+@@ -312,6 +325,14 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
dirlist = get_dirlist(fbuf, dlen, 0);
/* If an item in dirlist is not found in flist, delete it
* from the filesystem. */
for (i = dirlist->used; i--; ) {
-@@ -323,6 +344,10 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
+@@ -324,6 +345,10 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
f_name(fp, NULL));
continue;
}
/* Here we want to match regardless of file type. Replacement
* of a file with one of another type is handled separately by
* a delete_item call with a DEL_MAKE_ROOM flag. */
-@@ -331,14 +356,19 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
+@@ -332,14 +357,19 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
if (!(fp->mode & S_IWUSR) && !am_root && fp->flags & FLAG_OWNED_BY_US)
flags |= DEL_NO_UID_WRITE;
f_name(fp, delbuf);
flist_free(dirlist);
}
-@@ -374,14 +404,125 @@ static void do_delete_pass(void)
+@@ -375,14 +405,125 @@ static void do_delete_pass(void)
|| !S_ISDIR(st.st_mode))
continue;
static inline int time_diff(STRUCT_STAT *stp, struct file_struct *file)
{
#ifdef ST_MTIME_NSEC
-@@ -1155,6 +1296,7 @@ static void list_file_entry(struct file_struct *f)
+@@ -1156,6 +1297,7 @@ static void list_file_entry(struct file_struct *f)
}
}
static int phase = 0;
static int dflt_perms;
-@@ -1277,7 +1419,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1280,7 +1422,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
&& do_stat(dn, &sx.st) < 0) {
if (dry_run)
goto parent_is_dry_missing;
rsyserr(FERROR_XFER, errno,
"recv_generator: mkdir %s failed",
full_fname(dn));
-@@ -1430,7 +1572,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1433,7 +1575,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
if (real_ret != 0 && do_mkdir(fname,file->mode|added_perms) < 0 && errno != EEXIST) {
if (!relative_paths || errno != ENOENT
|| (do_mkdir(fname, file->mode|added_perms) < 0 && errno != EEXIST)) {
rsyserr(FERROR_XFER, errno,
"recv_generator: mkdir %s failed",
-@@ -1479,9 +1621,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1482,9 +1624,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
else if (delete_during && f_out != -1 && !phase
&& !(file->flags & FLAG_MISSING_DIR)) {
change_local_filter_dir(fname, strlen(fname), F_DEPTH(file));
}
prior_dir_file = file;
-@@ -1746,8 +1891,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1749,8 +1894,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
#endif
rsyserr(FERROR_XFER, stat_errno, "recv_generator: failed to stat %s",
full_fname(fname));
goto cleanup;
-@@ -2206,6 +2357,12 @@ void generate_files(int f_out, const char *local_name)
+@@ -2209,6 +2360,12 @@ void generate_files(int f_out, const char *local_name)
if (DEBUG_GTE(GENR, 1))
rprintf(FINFO, "generator starting pid=%d\n", (int)getpid());
if (delete_before && !solo_file && cur_flist->used > 0)
do_delete_pass();
if (delete_during == 2) {
-@@ -2216,7 +2373,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2219,7 +2376,7 @@ void generate_files(int f_out, const char *local_name)
}
info_levels[INFO_FLIST] = info_levels[INFO_PROGRESS] = 0;
whole_file = 0;
if (DEBUG_GTE(FLIST, 1)) {
rprintf(FINFO, "delta-transmission %s\n",
-@@ -2252,7 +2409,7 @@ void generate_files(int f_out, const char *local_name)
+@@ -2255,7 +2412,7 @@ void generate_files(int f_out, const char *local_name)
dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp));
} else
dirdev = MAKEDEV(0, 0);
} else
change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp));
}
-@@ -2299,7 +2456,21 @@ void generate_files(int f_out, const char *local_name)
+@@ -2302,7 +2459,21 @@ void generate_files(int f_out, const char *local_name)
} while ((cur_flist = cur_flist->next) != NULL);
if (delete_during)
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -252,7 +252,7 @@ enum msgcode {
+@@ -253,7 +253,7 @@ enum msgcode {
#define NDX_DEL_STATS -3
#define NDX_FLIST_OFFSET -101
#define DEL_NO_UID_WRITE (1<<0) /* file/dir has our uid w/o write perm */
#define DEL_RECURSE (1<<1) /* if dir, delete all contents */
#define DEL_DIR_IS_EMPTY (1<<2) /* internal delete_FUNCTIONS use only */
-@@ -262,6 +262,7 @@ enum msgcode {
+@@ -263,6 +263,7 @@ enum msgcode {
#define DEL_FOR_DEVICE (1<<6) /* making room for a replacement device */
#define DEL_FOR_SPECIAL (1<<7) /* making room for a replacement special */
#define DEL_FOR_BACKUP (1<<8) /* the delete is for a backup operation */
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int human_readable;
extern int ignore_existing;
extern int ignore_non_existing;
-@@ -1688,6 +1689,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1691,6 +1692,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
fnamecmp_type = FNAMECMP_FNAME;
if (statret == 0 && !S_ISREG(sx.st.st_mode)) {
-@@ -2112,6 +2119,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
+@@ -2115,6 +2122,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
ignore_existing = -ignore_existing;
ignore_non_existing = -ignore_non_existing;
update_only = -update_only;
always_checksum = -always_checksum;
size_only = -size_only;
append_mode = -append_mode;
-@@ -2137,6 +2145,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
+@@ -2140,6 +2148,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
ignore_existing = -ignore_existing;
ignore_non_existing = -ignore_non_existing;
update_only = -update_only;
./configure
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
extern int delete_mode;
extern int delete_before;
extern int delete_during;
-@@ -469,6 +471,10 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
+@@ -470,6 +472,10 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
return 0;
if (perms_differ(file, sxp))
return 0;
if (ownership_differs(file, sxp))
return 0;
#ifdef SUPPORT_ACLS
-@@ -520,6 +526,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
+@@ -521,6 +527,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
if (gid_ndx && !(file->flags & FLAG_SKIP_GROUP)
&& sxp->st.st_gid != (gid_t)F_GROUP(file))
iflags |= ITEM_REPORT_GROUP;
#ifdef SUPPORT_ACLS
if (preserve_acls && !S_ISLNK(file->mode)) {
if (!ACL_READY(*sxp))
-@@ -1412,6 +1423,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1415,6 +1426,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
file->mode = dest_mode(file->mode, sx.st.st_mode,
dflt_perms, statret == 0);
}
if (statret != 0 && basis_dir[0] != NULL) {
int j = try_dests_non(file, fname, ndx, fnamecmpbuf, &sx,
itemizing, code);
-@@ -1456,10 +1471,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1459,10 +1474,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
* readable and writable permissions during the time we are
* putting files within them. This is then restored to the
* former permissions after the transfer is done. */
rsyserr(FERROR_XFER, errno,
"failed to modify permissions on %s",
full_fname(fname));
-@@ -1495,6 +1515,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1498,6 +1518,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
file->mode = dest_mode(file->mode, sx.st.st_mode, dflt_perms,
exists);
}
#ifdef SUPPORT_HARD_LINKS
if (preserve_hard_links && F_HLINK_NOT_FIRST(file)
-@@ -2062,12 +2086,16 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
+@@ -2065,12 +2089,16 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
continue;
fname = f_name(file, NULL);
if (fix_dir_perms)
* or gid unless have the privilege. */
rsyserr(FERROR_XFER, errno, "%s %s failed",
@@ -559,7 +593,7 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
- || (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);
+ ATTRS_DELAY_IMMUTABLE
-+ | (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))
/* These flags are used in the live flist data. */
-@@ -165,6 +166,7 @@
-
+@@ -166,6 +167,7 @@
#define ATTRS_REPORT (1<<0)
#define ATTRS_SKIP_MTIME (1<<1)
-+#define ATTRS_DELAY_IMMUTABLE (1<<2)
+ #define ATTRS_SET_NANO (1<<2)
++#define ATTRS_DELAY_IMMUTABLE (1<<4)
#define FULL_FLUSH 1
#define NORMAL_FLUSH 0
-@@ -191,6 +193,7 @@
+@@ -192,6 +194,7 @@
#define ITEM_REPORT_GROUP (1<<6)
#define ITEM_REPORT_ACL (1<<7)
#define ITEM_REPORT_XATTR (1<<8)
#define ITEM_BASIS_TYPE_FOLLOWS (1<<11)
#define ITEM_XNAME_FOLLOWS (1<<12)
#define ITEM_IS_NEW (1<<13)
-@@ -528,6 +531,28 @@ typedef unsigned int size_t;
+@@ -529,6 +532,28 @@ typedef unsigned int size_t;
#endif
#endif
/* Find a variable that is either exactly 32-bits or longer.
* If some code depends on 32-bit truncation, it will need to
* take special action in a "#if SIZEOF_INT32 > 4" section. */
-@@ -715,6 +740,7 @@ extern int file_extra_cnt;
+@@ -716,6 +741,7 @@ extern int file_extra_cnt;
extern int inc_recurse;
extern int uid_ndx;
extern int gid_ndx;
extern int acls_ndx;
extern int xattrs_ndx;
-@@ -756,6 +782,11 @@ extern int xattrs_ndx;
+@@ -757,6 +783,11 @@ extern int xattrs_ndx;
/* When the associated option is on, all entries will have these present: */
#define F_OWNER(f) REQ_EXTRA(f, uid_ndx)->unum
#define F_GROUP(f) REQ_EXTRA(f, gid_ndx)->unum
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
#define XFLG_FATAL_ERRORS (1<<0)
#define XFLG_OLD_PREFIXES (1<<1)
-@@ -862,6 +865,8 @@ struct map_struct {
+@@ -863,6 +866,8 @@ struct map_struct {
int status; /* first errno from read errors */
};
#define NAME_IS_FILE (0) /* filter name as a file */
#define NAME_IS_DIR (1<<0) /* filter name as a dir */
#define NAME_IS_XATTR (1<<2) /* filter name as an xattr */
-@@ -887,8 +892,18 @@ struct map_struct {
+@@ -888,8 +893,18 @@ struct map_struct {
#define FILTRULE_CLEAR_LIST (1<<18)/* this item is the "!" token */
#define FILTRULE_PERISHABLE (1<<19)/* perishable if parent dir goes away */
#define FILTRULE_XATTR (1<<20)/* rule only applies to xattr names */
typedef struct filter_struct {
struct filter_struct *next;
-@@ -898,6 +913,11 @@ typedef struct filter_struct {
+@@ -899,6 +914,11 @@ typedef struct filter_struct {
int slash_cnt;
struct filter_list_struct *mergelist;
} u;
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
extern int preserve_links;
extern int preserve_devices;
extern int preserve_specials;
-@@ -1782,6 +1783,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1785,6 +1786,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fname, fnamecmpbuf);
}
sx.st.st_size = F_LENGTH(fuzzy_file);
statret = 0;
fnamecmp = fnamecmpbuf;
}
-@@ -1949,6 +1958,18 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1952,6 +1961,18 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
if (read_batch)
goto cleanup;
+#endif
&& (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))
@@ -653,6 +662,16 @@ int set_file_attrs(const char *fname, struct file_struct *file, stat_x *sxp,
&& !set_fileflags(fname, fileflags))
goto cleanup;
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -555,6 +555,17 @@ typedef unsigned int size_t;
+@@ -556,6 +556,17 @@ typedef unsigned int size_t;
#define ST_FLAGS(st) NO_FFLAGS
#endif
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
./configure
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -478,6 +478,15 @@ enum delret {
+@@ -479,6 +479,15 @@ enum delret {
#define iconv_t int
#endif
./configure
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -1276,7 +1276,8 @@ extern short info_levels[], debug_levels[];
+@@ -1277,7 +1277,8 @@ extern short info_levels[], debug_levels[];
#define DEBUG_FUZZY (DEBUG_FLIST+1)
#define DEBUG_GENR (DEBUG_FUZZY+1)
#define DEBUG_HASH (DEBUG_GENR+1)
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/authenticate.c b/authenticate.c
--- a/authenticate.c
+++ b/authenticate.c
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/access.c b/access.c
--- a/access.c
+++ b/access.c
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int delete_mode;
extern int delete_before;
extern int delete_during;
-@@ -489,6 +490,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
+@@ -490,6 +491,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
const char *xname)
{
if (statret >= 0) { /* A from-dest-dir statret can == 1! */
int keep_time = !preserve_times ? 0
: S_ISDIR(file->mode) ? preserve_times & PRESERVE_DIR_TIMES
: S_ISLNK(file->mode) ? preserve_times & PRESERVE_LINK_TIMES
-@@ -515,10 +517,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
+@@ -516,10 +518,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
} else if (preserve_executability
&& ((sxp->st.st_mode & 0111 ? 1 : 0) ^ (file->mode & 0111 ? 1 : 0)))
iflags |= ITEM_REPORT_PERMS;
iflags |= ITEM_REPORT_GROUP;
#ifdef SUPPORT_ACLS
if (preserve_acls && !S_ISLNK(file->mode)) {
-@@ -1408,7 +1411,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1411,7 +1414,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
real_ret = statret;
if (file->flags & FLAG_DIR_CREATED)
statret = -1;
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
TODO: the configure changes should abort if the user requests --enable-slp
and we can't honor that request.
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -204,6 +204,10 @@
+@@ -205,6 +205,10 @@
#define SIGNIFICANT_ITEM_FLAGS (~(\
ITEM_BASIS_TYPE_FOLLOWS | ITEM_XNAME_FOLLOWS | ITEM_LOCAL_CHANGE))
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int size_only;
extern OFF_T max_size;
extern OFF_T min_size;
-@@ -575,7 +576,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
+@@ -576,7 +577,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
/* Perform our quick-check heuristic for determining if a file is unchanged. */
int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st)
{
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.c
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/io.c b/io.c
--- a/io.c
+++ b/io.c
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
This patch has not yet been tested by me (Wayne), but was provided
Darryl Dixon. Thanks!
-based-on: c4a3f55be35726d0a033996dc37b0fb248b45cb5
+based-on: d73762eea3f15f2c56bb3fa9394ad1883c25c949
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
extern int preserve_specials;
extern int preserve_hard_links;
extern int preserve_executability;
-@@ -1690,7 +1691,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
+@@ -1693,7 +1694,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx,
fnamecmp_type = FNAMECMP_FNAME;