From: Wayne Davison Date: Wed, 30 Dec 2009 22:09:55 +0000 (-0800) Subject: Updated patches to work with the current trunk. X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/commitdiff_plain/c1ff70aa47e11c5b37634479a0facee775a7b6d9 Updated patches to work with the current trunk. --- diff --git a/acls.diff b/acls.diff index 87ad3d0..ff1f178 100644 --- a/acls.diff +++ b/acls.diff @@ -9,7 +9,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/acls.c b/acls.c --- a/acls.c +++ b/acls.c @@ -325,7 +325,7 @@ diff --git a/acls.c b/acls.c diff --git a/compat.c b/compat.c --- a/compat.c +++ b/compat.c -@@ -189,13 +189,6 @@ void setup_protocol(int f_out,int f_in) +@@ -191,13 +191,6 @@ void setup_protocol(int f_out,int f_in) if (protocol_version < 30) { if (append_mode == 1) append_mode = 2; diff --git a/adaptec_acl_mods.diff b/adaptec_acl_mods.diff index bd6ed31..eaa1ed2 100644 --- a/adaptec_acl_mods.diff +++ b/adaptec_acl_mods.diff @@ -24,7 +24,7 @@ Todo: Fix a bug that could lose some bits when stripping some (supposedly) superfluous ACL info. -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/lib/sysacls.c b/lib/sysacls.c --- a/lib/sysacls.c +++ b/lib/sysacls.c diff --git a/atimes.diff b/atimes.diff index ed33c74..e8ef66c 100644 --- a/atimes.diff +++ b/atimes.diff @@ -4,11 +4,11 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/compat.c b/compat.c --- a/compat.c +++ b/compat.c -@@ -43,6 +43,7 @@ extern int protocol_version; +@@ -44,6 +44,7 @@ extern int protocol_version; extern int protect_args; extern int preserve_uid; extern int preserve_gid; @@ -16,7 +16,7 @@ diff --git a/compat.c b/compat.c extern int preserve_acls; extern int preserve_xattrs; extern int need_messages_from_generator; -@@ -60,7 +61,7 @@ extern char *iconv_opt; +@@ -61,7 +62,7 @@ extern char *iconv_opt; #endif /* These index values are for the file-list's extra-attribute array. */ @@ -25,7 +25,7 @@ diff --git a/compat.c b/compat.c int receiver_symlink_times = 0; /* receiver can set the time on a symlink */ int sender_symlink_iconv = 0; /* sender should convert symlink content */ -@@ -136,6 +137,8 @@ void setup_protocol(int f_out,int f_in) +@@ -138,6 +139,8 @@ void setup_protocol(int f_out,int f_in) uid_ndx = ++file_extra_cnt; if (preserve_gid) gid_ndx = ++file_extra_cnt; @@ -37,7 +37,7 @@ diff --git a/compat.c b/compat.c diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c -@@ -54,6 +54,7 @@ extern int missing_args; +@@ -55,6 +55,7 @@ extern int missing_args; extern int uid_ndx; extern int gid_ndx; extern int eol_nulls; @@ -45,7 +45,7 @@ diff --git a/flist.c b/flist.c extern int relative_paths; extern int implied_dirs; extern int file_extra_cnt; -@@ -404,7 +405,7 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -406,7 +407,7 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, #endif int ndx, int first_ndx) { @@ -54,7 +54,7 @@ diff --git a/flist.c b/flist.c static mode_t mode; #ifdef SUPPORT_HARD_LINKS static int64 dev; -@@ -504,6 +505,13 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -506,6 +507,13 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, modtime = file->modtime; if (NSEC_BUMP(file) && protocol_version >= 31) xflags |= XMIT_MOD_NSEC; @@ -68,7 +68,7 @@ diff --git a/flist.c b/flist.c #ifdef SUPPORT_HARD_LINKS if (tmp_dev != 0) { -@@ -590,6 +598,8 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -592,6 +600,8 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, write_varint(f, F_MOD_NSEC(file)); if (!(xflags & XMIT_SAME_MODE)) write_int(f, to_wire_mode(mode)); @@ -77,7 +77,7 @@ diff --git a/flist.c b/flist.c if (preserve_uid && !(xflags & XMIT_SAME_UID)) { if (protocol_version < 30) write_int(f, uid); -@@ -675,7 +685,7 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -677,7 +687,7 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, static struct file_struct *recv_file_entry(int f, struct file_list *flist, int xflags) { @@ -86,7 +86,7 @@ diff --git a/flist.c b/flist.c static mode_t mode; #ifdef SUPPORT_HARD_LINKS static int64 dev; -@@ -819,6 +829,16 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x +@@ -821,6 +831,16 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x modtime_nsec = 0; if (!(xflags & XMIT_SAME_MODE)) mode = from_wire_mode(read_int(f)); @@ -103,7 +103,7 @@ diff --git a/flist.c b/flist.c if (chmod_modes && !S_ISLNK(mode) && mode) mode = tweak_mode(mode, chmod_modes); -@@ -979,6 +999,8 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x +@@ -981,6 +1001,8 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x F_GROUP(file) = gid; file->flags |= gid_flags; } @@ -112,7 +112,7 @@ diff --git a/flist.c b/flist.c if (unsort_ndx) F_NDX(file) = flist->used + flist->ndx_start; -@@ -1374,6 +1396,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1376,6 +1398,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, F_OWNER(file) = st.st_uid; if (gid_ndx) /* Check gid_ndx instead of preserve_gid for del support */ F_GROUP(file) = st.st_gid; @@ -124,7 +124,7 @@ diff --git a/flist.c b/flist.c diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c -@@ -455,6 +455,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -454,6 +454,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; @@ -134,7 +134,7 @@ diff --git a/generator.c b/generator.c #if !defined HAVE_LCHMOD && !defined HAVE_SETATTRLIST if (S_ISLNK(file->mode)) { ; -@@ -825,6 +828,8 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, +@@ -824,6 +827,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; @@ -143,7 +143,7 @@ diff --git a/generator.c b/generator.c 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)) { -@@ -1017,6 +1022,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx, +@@ -1016,6 +1021,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]; @@ -151,7 +151,7 @@ diff --git a/generator.c b/generator.c int64 len; int colwidth = human_readable ? 14 : 11; -@@ -1032,10 +1038,11 @@ static void list_file_entry(struct file_struct *f) +@@ -1031,10 +1037,11 @@ static void list_file_entry(struct file_struct *f) #ifdef SUPPORT_LINKS if (preserve_links && S_ISLNK(f->mode)) { @@ -166,7 +166,7 @@ diff --git a/generator.c b/generator.c } else #endif if (missing_args == 2 && f->mode == 0) { -@@ -1043,9 +1050,11 @@ static void list_file_entry(struct file_struct *f) +@@ -1042,9 +1049,11 @@ static void list_file_entry(struct file_struct *f) colwidth + 31, "*missing", f_name(f, NULL)); } else { @@ -180,7 +180,7 @@ diff --git a/generator.c b/generator.c } } -@@ -1925,7 +1934,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx) +@@ -1924,7 +1933,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx) STRUCT_STAT st; if (link_stat(fname, &st, 0) == 0 && cmp_time(st.st_mtime, file->modtime) != 0) @@ -263,7 +263,7 @@ diff --git a/options.c b/options.c {"omit-dir-times", 'O', POPT_ARG_VAL, &omit_dir_times, 1, 0, 0 }, {"no-omit-dir-times",0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 }, {"no-O", 0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 }, -@@ -2326,6 +2331,8 @@ void server_options(char **args, int *argc_p) +@@ -2341,6 +2346,8 @@ void server_options(char **args, int *argc_p) argstr[x++] = 'D'; if (preserve_times) argstr[x++] = 't'; @@ -402,7 +402,7 @@ diff --git a/rsync.yo b/rsync.yo dit(bf(--super)) This tells the receiving side to attempt super-user activities even if the receiving rsync wasn't run by the super-user. These activities include: preserving users via the bf(--owner) option, preserving -@@ -1931,7 +1938,10 @@ quote(itemization( +@@ -1945,7 +1952,10 @@ quote(itemization( sender's value (requires bf(--owner) and super-user privileges). it() A bf(g) means the group is different and is being updated to the sender's value (requires bf(--group) and the authority to set the group). @@ -439,7 +439,7 @@ new file mode 100644 diff --git a/testsuite/rsync.fns b/testsuite/rsync.fns --- a/testsuite/rsync.fns +++ b/testsuite/rsync.fns -@@ -214,6 +214,10 @@ checkit() { +@@ -218,6 +218,10 @@ checkit() { # We can just write everything to stdout/stderr, because the # wrapper hides it unless there is a problem. @@ -450,7 +450,7 @@ diff --git a/testsuite/rsync.fns b/testsuite/rsync.fns echo "Running: \"$1\"" eval "$1" status=$? -@@ -221,10 +225,13 @@ checkit() { +@@ -225,10 +229,13 @@ checkit() { failed="YES"; fi diff --git a/backup-dir-dels.diff b/backup-dir-dels.diff index 3b1282e..e67ba21 100644 --- a/backup-dir-dels.diff +++ b/backup-dir-dels.diff @@ -19,7 +19,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/backup.c b/backup.c --- a/backup.c +++ b/backup.c @@ -230,7 +230,7 @@ diff --git a/options.c b/options.c {"list-only", 0, POPT_ARG_VAL, &list_only, 2, 0, 0 }, {"read-batch", 0, POPT_ARG_STRING, &batch_name, OPT_READ_BATCH, 0, 0 }, {"write-batch", 0, POPT_ARG_STRING, &batch_name, OPT_WRITE_BATCH, 0, 0 }, -@@ -1991,6 +2001,8 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2006,6 +2016,8 @@ int parse_arguments(int *argc_p, const char ***argv_p) tmpdir = sanitize_path(NULL, tmpdir, NULL, 0, SP_DEFAULT); if (backup_dir) backup_dir = sanitize_path(NULL, backup_dir, NULL, 0, SP_DEFAULT); @@ -239,7 +239,7 @@ diff --git a/options.c b/options.c } if (daemon_filter_list.head && !am_sender) { filter_rule_list *elp = &daemon_filter_list; -@@ -2012,6 +2024,14 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2027,6 +2039,14 @@ int parse_arguments(int *argc_p, const char ***argv_p) if (check_filter(elp, FLOG, dir, 1) < 0) goto options_rejected; } @@ -254,7 +254,7 @@ diff --git a/options.c b/options.c } if (!backup_suffix) -@@ -2023,6 +2043,20 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2038,6 +2058,20 @@ int parse_arguments(int *argc_p, const char ***argv_p) backup_suffix); return 0; } @@ -275,7 +275,7 @@ diff --git a/options.c b/options.c if (backup_dir) { while (*backup_dir == '.' && backup_dir[1] == '/') backup_dir += 2; -@@ -2056,6 +2090,34 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2071,6 +2105,34 @@ int parse_arguments(int *argc_p, const char ***argv_p) "P *%s", backup_suffix); parse_filter_str(&filter_list, backup_dir_buf, rule_template(0), 0); } @@ -310,7 +310,7 @@ diff --git a/options.c b/options.c if (make_backups && !backup_dir) { omit_dir_times = 0; /* Implied, so avoid -O to sender. */ -@@ -2469,6 +2531,10 @@ void server_options(char **args, int *argc_p) +@@ -2484,6 +2546,10 @@ void server_options(char **args, int *argc_p) args[ac++] = "--backup-dir"; args[ac++] = backup_dir; } @@ -321,7 +321,7 @@ diff --git a/options.c b/options.c /* Only send --suffix if it specifies a non-default value. */ if (strcmp(backup_suffix, backup_dir ? "" : BACKUP_SUFFIX) != 0) { -@@ -2477,7 +2543,14 @@ void server_options(char **args, int *argc_p) +@@ -2492,7 +2558,14 @@ void server_options(char **args, int *argc_p) goto oom; args[ac++] = arg; } diff --git a/catch_crash_signals.diff b/catch_crash_signals.diff index 4229422..3ecf176 100644 --- a/catch_crash_signals.diff +++ b/catch_crash_signals.diff @@ -25,7 +25,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/errcode.h b/errcode.h --- a/errcode.h +++ b/errcode.h @@ -52,7 +52,7 @@ diff --git a/log.c b/log.c diff --git a/main.c b/main.c --- a/main.c +++ b/main.c -@@ -176,8 +176,11 @@ static void wait_process_with_flush(pid_t pid, int *exit_code_ptr) +@@ -180,8 +180,11 @@ static void wait_process_with_flush(pid_t pid, int *exit_code_ptr) *exit_code_ptr = RERR_TERMINATED; else *exit_code_ptr = RERR_WAITCHILD; @@ -65,7 +65,7 @@ diff --git a/main.c b/main.c } void write_del_stats(int f) -@@ -1416,6 +1419,14 @@ RETSIGTYPE remember_children(UNUSED(int val)) +@@ -1432,6 +1435,14 @@ RETSIGTYPE remember_children(UNUSED(int val)) break; } } @@ -80,7 +80,7 @@ diff --git a/main.c b/main.c } #endif #ifndef HAVE_SIGACTION -@@ -1474,6 +1485,12 @@ static RETSIGTYPE rsync_panic_handler(UNUSED(int whatsig)) +@@ -1490,6 +1501,12 @@ static RETSIGTYPE rsync_panic_handler(UNUSED(int whatsig)) } #endif @@ -93,7 +93,7 @@ diff --git a/main.c b/main.c int main(int argc,char *argv[]) { -@@ -1496,6 +1513,11 @@ int main(int argc,char *argv[]) +@@ -1512,6 +1529,11 @@ int main(int argc,char *argv[]) SIGACTMASK(SIGFPE, rsync_panic_handler); SIGACTMASK(SIGABRT, rsync_panic_handler); SIGACTMASK(SIGBUS, rsync_panic_handler); diff --git a/checksum-reading.diff b/checksum-reading.diff index 214f8a4..139cc58 100644 --- a/checksum-reading.diff +++ b/checksum-reading.diff @@ -16,7 +16,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/checksum.c b/checksum.c --- a/checksum.c +++ b/checksum.c @@ -70,7 +70,7 @@ diff --git a/flist.c b/flist.c extern int module_id; extern int ignore_errors; extern int numeric_ids; -@@ -60,6 +62,7 @@ extern int file_extra_cnt; +@@ -61,6 +63,7 @@ extern int file_extra_cnt; extern int ignore_perishable; extern int non_perishable_cnt; extern int prune_empty_dirs; @@ -78,7 +78,7 @@ diff --git a/flist.c b/flist.c extern int copy_links; extern int copy_unsafe_links; extern int protocol_version; -@@ -70,6 +73,7 @@ extern int sender_symlink_iconv; +@@ -72,6 +75,7 @@ extern int sender_symlink_iconv; extern int output_needs_newline; extern int sender_keeps_checksum; extern int unsort_ndx; @@ -86,7 +86,7 @@ diff --git a/flist.c b/flist.c extern struct stats stats; extern char *filesfrom_host; extern char *usermap, *groupmap; -@@ -94,6 +98,12 @@ extern iconv_t ic_send, ic_recv; +@@ -96,6 +100,12 @@ extern iconv_t ic_send, ic_recv; #endif #endif @@ -99,7 +99,7 @@ diff --git a/flist.c b/flist.c #define PTR_SIZE (sizeof (struct file_struct *)) int io_error; -@@ -135,7 +145,11 @@ static char tmp_sum[MAX_DIGEST_LEN]; +@@ -137,7 +147,11 @@ static char tmp_sum[MAX_DIGEST_LEN]; static char empty_sum[MAX_DIGEST_LEN]; static int flist_count_offset; /* for --delete --progress */ @@ -112,7 +112,7 @@ diff --git a/flist.c b/flist.c static void output_flist(struct file_list *flist); void init_flist(void) -@@ -350,6 +364,238 @@ static void flist_done_allocating(struct file_list *flist) +@@ -352,6 +366,238 @@ static void flist_done_allocating(struct file_list *flist) flist->pool_boundary = ptr; } @@ -351,7 +351,7 @@ diff --git a/flist.c b/flist.c /* Call this with EITHER (1) "file, NULL, 0" to chdir() to the file's * F_PATHNAME(), or (2) "NULL, dir, dirlen" to chdir() to the supplied dir, * with dir == NULL taken to be the starting directory, and dirlen < 0 -@@ -1141,7 +1387,7 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1143,7 +1389,7 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, STRUCT_STAT *stp, int flags, int filter_level) { static char *lastdir; @@ -360,7 +360,7 @@ diff --git a/flist.c b/flist.c struct file_struct *file; char thisname[MAXPATHLEN]; char linkname[MAXPATHLEN]; -@@ -1287,9 +1533,16 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1289,9 +1535,16 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, memcpy(lastdir, thisname, len); lastdir[len] = '\0'; lastdir_len = len; @@ -378,7 +378,7 @@ diff --git a/flist.c b/flist.c basename_len = strlen(basename) + 1; /* count the '\0' */ #ifdef SUPPORT_LINKS -@@ -1307,11 +1560,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1309,11 +1562,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, extra_len += EXTRA_LEN; #endif @@ -392,7 +392,7 @@ diff --git a/flist.c b/flist.c #if EXTRA_ROUNDING > 0 if (extra_len & (EXTRA_ROUNDING * EXTRA_LEN)) -@@ -1394,8 +1644,14 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1396,8 +1646,14 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, return NULL; } @@ -409,7 +409,7 @@ diff --git a/flist.c b/flist.c if (unsort_ndx) F_NDX(file) = stats.num_dirs; -@@ -2527,7 +2783,7 @@ struct file_list *recv_file_list(int f) +@@ -2546,7 +2802,7 @@ struct file_list *recv_file_list(int f) rprintf(FINFO, "[%s] flist_eof=1\n", who_am_i()); } @@ -418,7 +418,7 @@ diff --git a/flist.c b/flist.c if (protocol_version < 30) { /* Recv the io_error flag */ -@@ -2750,7 +3006,7 @@ void flist_free(struct file_list *flist) +@@ -2769,7 +3025,7 @@ void flist_free(struct file_list *flist) /* This routine ensures we don't have any duplicate names in our file list. * duplicate names can cause corruption because of the pipelining. */ @@ -427,7 +427,7 @@ diff --git a/flist.c b/flist.c { char fbuf[MAXPATHLEN]; int i, prev_i; -@@ -2801,7 +3057,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root) +@@ -2820,7 +3076,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root) /* If one is a dir and the other is not, we want to * keep the dir because it might have contents in the * list. Otherwise keep the first one. */ @@ -436,7 +436,7 @@ diff --git a/flist.c b/flist.c struct file_struct *fp = flist->sorted[j]; if (!S_ISDIR(fp->mode)) keep = i, drop = j; -@@ -2817,8 +3073,8 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root) +@@ -2836,8 +3092,8 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root) } else keep = j, drop = i; @@ -447,7 +447,7 @@ diff --git a/flist.c b/flist.c rprintf(FINFO, "removing duplicate name %s from file list (%d)\n", f_name(file, fbuf), drop + flist->ndx_start); -@@ -2840,7 +3096,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root) +@@ -2859,7 +3115,7 @@ static void flist_sort_and_clean(struct file_list *flist, int strip_root) } flist->high = prev_i; @@ -467,7 +467,7 @@ diff --git a/generator.c b/generator.c extern int remove_source_files; extern int delay_updates; extern int update_only; -@@ -522,7 +523,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -521,7 +522,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. */ @@ -476,7 +476,7 @@ diff --git a/generator.c b/generator.c { if (st->st_size != F_LENGTH(file)) return 0; -@@ -531,7 +532,10 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) +@@ -530,7 +531,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]; @@ -488,7 +488,7 @@ diff --git a/generator.c b/generator.c return memcmp(sum, F_SUM(file), checksum_len) == 0; } -@@ -795,7 +799,7 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, +@@ -794,7 +798,7 @@ static int try_dests_reg(struct file_struct *file, char *fname, int ndx, match_level = 1; /* FALL THROUGH */ case 1: @@ -497,7 +497,7 @@ diff --git a/generator.c b/generator.c continue; best_match = j; match_level = 2; -@@ -1081,7 +1085,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1080,7 +1084,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 = NULL; @@ -506,7 +506,7 @@ diff --git a/generator.c b/generator.c struct file_struct *fuzzy_file = NULL; int fd = -1, f_copy = -1; stat_x sx, real_sx; -@@ -1165,8 +1169,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1164,8 +1168,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, flist_free(fuzzy_dirlist); fuzzy_dirlist = NULL; } @@ -517,7 +517,7 @@ diff --git a/generator.c b/generator.c #ifdef SUPPORT_ACLS if (!preserve_perms) dflt_perms = default_perms_for_dir(dn); -@@ -1174,10 +1178,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1173,10 +1177,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, } parent_dirname = dn; @@ -537,7 +537,7 @@ diff --git a/generator.c b/generator.c } statret = link_stat(fname, &sx.st, keep_dirlinks && is_dir); -@@ -1600,7 +1609,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1599,7 +1608,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, ; else if (fnamecmp_type == FNAMECMP_FUZZY) ; @@ -659,7 +659,7 @@ diff --git a/options.c b/options.c {"block-size", 'B', POPT_ARG_LONG, &block_size, 0, 0, 0 }, {"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 }, {"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 }, -@@ -1651,6 +1654,23 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1652,6 +1655,23 @@ int parse_arguments(int *argc_p, const char ***argv_p) } break; @@ -683,7 +683,7 @@ diff --git a/options.c b/options.c case OPT_INFO: arg = poptGetOptArg(pc); parse_output_words(info_words, info_levels, arg, USER_PRIORITY); -@@ -1851,6 +1871,9 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1866,6 +1886,9 @@ int parse_arguments(int *argc_p, const char ***argv_p) } #endif diff --git a/checksum-updating.diff b/checksum-updating.diff index a68de7b..3d1f1cc 100644 --- a/checksum-updating.diff +++ b/checksum-updating.diff @@ -17,7 +17,7 @@ TODO: - Fix the code that removes .rsyncsums files when a dir becomes empty. -based-on: patch/checksum-reading +based-on: patch/master/checksum-reading diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c @@ -29,7 +29,7 @@ diff --git a/flist.c b/flist.c extern int am_root; extern int am_server; extern int am_daemon; -@@ -106,6 +107,9 @@ extern iconv_t ic_send, ic_recv; +@@ -108,6 +109,9 @@ extern iconv_t ic_send, ic_recv; #define PTR_SIZE (sizeof (struct file_struct *)) @@ -39,7 +39,7 @@ diff --git a/flist.c b/flist.c int io_error; int checksum_len; dev_t filesystem_dev; /* used to implement -x */ -@@ -145,8 +149,13 @@ static char tmp_sum[MAX_DIGEST_LEN]; +@@ -147,8 +151,13 @@ static char tmp_sum[MAX_DIGEST_LEN]; static char empty_sum[MAX_DIGEST_LEN]; static int flist_count_offset; /* for --delete --progress */ @@ -53,7 +53,7 @@ diff --git a/flist.c b/flist.c } *csum_cache = NULL; static void flist_sort_and_clean(struct file_list *flist, int flags); -@@ -364,7 +373,79 @@ static void flist_done_allocating(struct file_list *flist) +@@ -366,7 +375,79 @@ static void flist_done_allocating(struct file_list *flist) flist->pool_boundary = ptr; } @@ -134,7 +134,7 @@ diff --git a/flist.c b/flist.c { int slot, slots = am_sender ? 1 : basis_dir_cnt + 1; -@@ -378,6 +459,9 @@ void reset_checksum_cache() +@@ -380,6 +461,9 @@ void reset_checksum_cache() struct file_list *flist = csum_cache[slot].flist; if (flist) { @@ -144,7 +144,7 @@ diff --git a/flist.c b/flist.c /* Reset the pool memory and empty the file-list array. */ pool_free_old(flist->file_pool, pool_boundary(flist->file_pool, 0)); -@@ -388,6 +472,10 @@ void reset_checksum_cache() +@@ -390,6 +474,10 @@ void reset_checksum_cache() flist->low = 0; flist->high = -1; flist->next = NULL; @@ -155,7 +155,7 @@ diff --git a/flist.c b/flist.c } } -@@ -395,7 +483,7 @@ void reset_checksum_cache() +@@ -397,7 +485,7 @@ void reset_checksum_cache() static int add_checksum(struct file_list *flist, const char *dirname, const char *basename, int basename_len, OFF_T file_length, time_t mtime, uint32 ctime, uint32 inode, @@ -164,7 +164,7 @@ diff --git a/flist.c b/flist.c { struct file_struct *file; int alloc_len, extra_len; -@@ -412,7 +500,7 @@ static int add_checksum(struct file_list *flist, const char *dirname, +@@ -414,7 +502,7 @@ static int add_checksum(struct file_list *flist, const char *dirname, if (extra_len & (EXTRA_ROUNDING * EXTRA_LEN)) extra_len = (extra_len | (EXTRA_ROUNDING * EXTRA_LEN)) + EXTRA_LEN; #endif @@ -173,7 +173,7 @@ diff --git a/flist.c b/flist.c bp = pool_alloc(flist->file_pool, alloc_len, "add_checksum"); memset(bp, 0, extra_len + FILE_STRUCT_LEN); -@@ -421,7 +509,14 @@ static int add_checksum(struct file_list *flist, const char *dirname, +@@ -423,7 +511,14 @@ static int add_checksum(struct file_list *flist, const char *dirname, bp += FILE_STRUCT_LEN; memcpy(bp, basename, basename_len); @@ -188,7 +188,7 @@ diff --git a/flist.c b/flist.c file->mode = S_IFREG; file->modtime = mtime; file->len32 = (uint32)file_length; -@@ -450,10 +545,11 @@ static void read_checksums(int slot, struct file_list *flist, const char *dirnam +@@ -452,10 +547,11 @@ static void read_checksums(int slot, struct file_list *flist, const char *dirnam char line[MAXPATHLEN+1024], fbuf[MAXPATHLEN], sum[MAX_DIGEST_LEN]; FILE *fp; char *cp; @@ -201,7 +201,7 @@ diff --git a/flist.c b/flist.c int dlen = dirname ? strlcpy(fbuf, dirname, sizeof fbuf) : 0; if (dlen >= (int)(sizeof fbuf - 1 - RSYNCSUMS_LEN)) -@@ -474,7 +570,7 @@ static void read_checksums(int slot, struct file_list *flist, const char *dirnam +@@ -476,7 +572,7 @@ static void read_checksums(int slot, struct file_list *flist, const char *dirnam while (fgets(line, sizeof line, fp)) { cp = line; if (protocol_version >= 30) { @@ -210,7 +210,7 @@ diff --git a/flist.c b/flist.c if (*cp == '=') while (*++cp == '=') {} else -@@ -485,7 +581,14 @@ static void read_checksums(int slot, struct file_list *flist, const char *dirnam +@@ -487,7 +583,14 @@ static void read_checksums(int slot, struct file_list *flist, const char *dirnam } if (*cp == '=') { @@ -226,7 +226,7 @@ diff --git a/flist.c b/flist.c } else { for (i = 0; i < checksum_len*2; i++, cp++) { int x; -@@ -503,13 +606,14 @@ static void read_checksums(int slot, struct file_list *flist, const char *dirnam +@@ -505,13 +608,14 @@ static void read_checksums(int slot, struct file_list *flist, const char *dirnam else sum[i/2] = x << 4; } @@ -242,7 +242,7 @@ diff --git a/flist.c b/flist.c if (*cp == '=') while (*++cp == '=') {} else -@@ -559,24 +663,112 @@ static void read_checksums(int slot, struct file_list *flist, const char *dirnam +@@ -561,24 +665,112 @@ static void read_checksums(int slot, struct file_list *flist, const char *dirnam continue; strlcpy(fbuf+dlen, cp, sizeof fbuf - dlen); @@ -357,7 +357,7 @@ diff --git a/flist.c b/flist.c read_checksums(slot, flist, file->dirname); } -@@ -588,12 +780,31 @@ void get_cached_checksum(int slot, const char *fname, struct file_struct *file, +@@ -590,12 +782,31 @@ void get_cached_checksum(int slot, const char *fname, struct file_struct *file, && (checksum_files & CSF_LAX || (F_CTIME(fp) == (uint32)stp->st_ctime && F_INODE(fp) == (uint32)stp->st_ino))) { @@ -390,7 +390,7 @@ diff --git a/flist.c b/flist.c } /* Call this with EITHER (1) "file, NULL, 0" to chdir() to the file's -@@ -1488,6 +1699,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1490,6 +1701,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, if (is_excluded(thisname, S_ISDIR(st.st_mode) != 0, filter_level)) { if (ignore_perishable) non_perishable_cnt++; @@ -399,7 +399,7 @@ diff --git a/flist.c b/flist.c return NULL; } -@@ -1534,13 +1747,13 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1536,13 +1749,13 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, lastdir[len] = '\0'; lastdir_len = len; if (checksum_files && am_sender && flist) @@ -415,7 +415,7 @@ diff --git a/flist.c b/flist.c } } basename_len = strlen(basename) + 1; /* count the '\0' */ -@@ -1646,7 +1859,7 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1648,7 +1861,7 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, if (always_checksum && am_sender && S_ISREG(st.st_mode)) { if (flist && checksum_files) @@ -424,7 +424,7 @@ diff --git a/flist.c b/flist.c else file_checksum(thisname, st.st_size, tmp_sum); if (sender_keeps_checksum) -@@ -2019,6 +2232,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len, +@@ -2021,6 +2234,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len, closedir(d); @@ -434,7 +434,7 @@ diff --git a/flist.c b/flist.c if (f >= 0 && recurse && !divert_dirs) { int i, end = flist->used - 1; /* send_if_directory() bumps flist->used, so use "end". */ -@@ -2652,6 +2868,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) +@@ -2671,6 +2887,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) rprintf(FINFO, "[%s] flist_eof=1\n", who_am_i()); } @@ -447,7 +447,7 @@ diff --git a/flist.c b/flist.c diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c -@@ -111,6 +111,7 @@ static int dir_tweaking; +@@ -110,6 +110,7 @@ static int dir_tweaking; static int symlink_timeset_failed_flags; static int need_retouch_dir_times; static int need_retouch_dir_perms; @@ -455,7 +455,7 @@ diff --git a/generator.c b/generator.c static const char *solo_file = NULL; enum nonregtype { -@@ -533,7 +534,7 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st, int slot +@@ -532,7 +533,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) @@ -464,7 +464,7 @@ diff --git a/generator.c b/generator.c else file_checksum(fn, st->st_size, sum); return memcmp(sum, F_SUM(file), checksum_len) == 0; -@@ -1184,7 +1185,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1183,7 +1184,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, fuzzy_dirlist = get_dirlist(fnamecmpbuf, -1, 1); } if (checksum_files) { @@ -474,7 +474,7 @@ diff --git a/generator.c b/generator.c } need_new_dirscan = 0; } -@@ -1342,6 +1344,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1341,6 +1343,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, else change_local_filter_dir(fname, strlen(fname), F_DEPTH(file)); } @@ -482,7 +482,7 @@ diff --git a/generator.c b/generator.c goto cleanup; } -@@ -1615,6 +1618,8 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1614,6 +1617,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); @@ -491,7 +491,7 @@ diff --git a/generator.c b/generator.c if (itemizing) itemize(fnamecmp, file, ndx, statret, &sx, 0, 0, NULL); #ifdef SUPPORT_HARD_LINKS -@@ -2122,6 +2127,7 @@ void generate_files(int f_out, const char *local_name) +@@ -2115,6 +2120,7 @@ void generate_files(int f_out, const char *local_name) } else change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp)); } @@ -499,7 +499,7 @@ diff --git a/generator.c b/generator.c } for (i = cur_flist->low; i <= cur_flist->high; i++) { struct file_struct *file = cur_flist->sorted[i]; -@@ -2216,6 +2222,9 @@ void generate_files(int f_out, const char *local_name) +@@ -2209,6 +2215,9 @@ void generate_files(int f_out, const char *local_name) wait_for_receiver(); } @@ -520,7 +520,7 @@ diff --git a/io.c b/io.c extern int protocol_version; extern int remove_source_files; extern int preserve_hard_links; -@@ -987,6 +988,9 @@ static void got_flist_entry_status(enum festatus status, int ndx) +@@ -1025,6 +1026,9 @@ static void got_flist_entry_status(enum festatus status, int ndx) flist_ndx_push(&hlink_list, ndx); flist->in_progress++; } @@ -547,7 +547,7 @@ diff --git a/loadparm.c b/loadparm.c diff --git a/options.c b/options.c --- a/options.c +++ b/options.c -@@ -1656,7 +1656,15 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1657,7 +1657,15 @@ int parse_arguments(int *argc_p, const char ***argv_p) case OPT_SUMFILES: arg = poptGetOptArg(pc); diff --git a/checksum-xattr.diff b/checksum-xattr.diff index 7c0e828..b465ad0 100644 --- a/checksum-xattr.diff +++ b/checksum-xattr.diff @@ -8,11 +8,11 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c -@@ -1308,7 +1308,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1310,7 +1310,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, #endif if (always_checksum && am_sender && S_ISREG(st.st_mode)) { @@ -25,7 +25,7 @@ diff --git a/flist.c b/flist.c diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c -@@ -531,7 +531,8 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) +@@ -530,7 +530,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]; diff --git a/copy-devices.diff b/copy-devices.diff index 7646790..62635ec 100644 --- a/copy-devices.diff +++ b/copy-devices.diff @@ -8,7 +8,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c @@ -20,7 +20,7 @@ diff --git a/generator.c b/generator.c extern int preserve_specials; extern int preserve_hard_links; extern int preserve_executability; -@@ -1495,7 +1496,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1494,7 +1495,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, goto cleanup; } @@ -56,7 +56,7 @@ diff --git a/options.c b/options.c {"specials", 0, POPT_ARG_VAL, &preserve_specials, 1, 0, 0 }, {"no-specials", 0, POPT_ARG_VAL, &preserve_specials, 0, 0, 0 }, {"links", 'l', POPT_ARG_VAL, &preserve_links, 1, 0, 0 }, -@@ -2646,6 +2649,9 @@ void server_options(char **args, int *argc_p) +@@ -2661,6 +2664,9 @@ void server_options(char **args, int *argc_p) else if (remove_source_files) args[ac++] = "--remove-sent-files"; @@ -90,7 +90,7 @@ diff --git a/rsync.c b/rsync.c diff --git a/sender.c b/sender.c --- a/sender.c +++ b/sender.c -@@ -340,6 +340,20 @@ void send_files(int f_in, int f_out) +@@ -341,6 +341,20 @@ void send_files(int f_in, int f_out) exit_cleanup(RERR_FILEIO); } diff --git a/crtimes.diff b/crtimes.diff index 72afa70..439020f 100644 --- a/crtimes.diff +++ b/crtimes.diff @@ -8,11 +8,11 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: patch/fileflags +based-on: patch/master/fileflags diff --git a/compat.c b/compat.c --- a/compat.c +++ b/compat.c -@@ -44,6 +44,7 @@ extern int force_change; +@@ -45,6 +45,7 @@ extern int force_change; extern int protect_args; extern int preserve_uid; extern int preserve_gid; @@ -20,7 +20,7 @@ diff --git a/compat.c b/compat.c extern int preserve_fileflags; extern int preserve_acls; extern int preserve_xattrs; -@@ -62,7 +63,7 @@ extern char *iconv_opt; +@@ -63,7 +64,7 @@ extern char *iconv_opt; #endif /* These index values are for the file-list's extra-attribute array. */ @@ -29,7 +29,7 @@ diff --git a/compat.c b/compat.c int receiver_symlink_times = 0; /* receiver can set the time on a symlink */ int sender_symlink_iconv = 0; /* sender should convert symlink content */ -@@ -138,6 +139,8 @@ void setup_protocol(int f_out,int f_in) +@@ -140,6 +141,8 @@ void setup_protocol(int f_out,int f_in) uid_ndx = ++file_extra_cnt; if (preserve_gid) gid_ndx = ++file_extra_cnt; @@ -41,7 +41,7 @@ diff --git a/compat.c b/compat.c diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c -@@ -55,6 +55,7 @@ extern int missing_args; +@@ -56,6 +56,7 @@ extern int missing_args; extern int uid_ndx; extern int gid_ndx; extern int eol_nulls; @@ -49,7 +49,7 @@ diff --git a/flist.c b/flist.c extern int relative_paths; extern int implied_dirs; extern int file_extra_cnt; -@@ -405,7 +406,7 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -407,7 +408,7 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, #endif int ndx, int first_ndx) { @@ -58,7 +58,7 @@ diff --git a/flist.c b/flist.c static mode_t mode; #ifdef SUPPORT_FILEFLAGS static uint32 fileflags; -@@ -516,6 +517,13 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -518,6 +519,13 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, modtime = file->modtime; if (NSEC_BUMP(file) && protocol_version >= 31) xflags |= XMIT_MOD_NSEC; @@ -72,7 +72,7 @@ diff --git a/flist.c b/flist.c #ifdef SUPPORT_HARD_LINKS if (tmp_dev != 0) { -@@ -600,6 +608,8 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -602,6 +610,8 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, } if (xflags & XMIT_MOD_NSEC) write_varint(f, F_MOD_NSEC(file)); @@ -81,7 +81,7 @@ diff --git a/flist.c b/flist.c if (!(xflags & XMIT_SAME_MODE)) write_int(f, to_wire_mode(mode)); #ifdef SUPPORT_FILEFLAGS -@@ -691,7 +701,7 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -693,7 +703,7 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, static struct file_struct *recv_file_entry(int f, struct file_list *flist, int xflags) { @@ -90,7 +90,7 @@ diff --git a/flist.c b/flist.c static mode_t mode; #ifdef SUPPORT_FILEFLAGS static uint32 fileflags; -@@ -836,6 +846,19 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x +@@ -838,6 +848,19 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x modtime_nsec = read_varint(f); else modtime_nsec = 0; @@ -110,7 +110,7 @@ diff --git a/flist.c b/flist.c if (!(xflags & XMIT_SAME_MODE)) mode = from_wire_mode(read_int(f)); -@@ -1006,6 +1029,8 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x +@@ -1008,6 +1031,8 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x F_GROUP(file) = gid; file->flags |= gid_flags; } @@ -119,7 +119,7 @@ diff --git a/flist.c b/flist.c if (unsort_ndx) F_NDX(file) = flist->used + flist->ndx_start; -@@ -1405,6 +1430,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1407,6 +1432,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, F_OWNER(file) = st.st_uid; if (gid_ndx) /* Check gid_ndx instead of preserve_gid for del support */ F_GROUP(file) = st.st_gid; @@ -139,7 +139,7 @@ diff --git a/generator.c b/generator.c extern int preserve_hard_links; extern int preserve_executability; extern int preserve_fileflags; -@@ -419,6 +420,13 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) +@@ -418,6 +419,13 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) if (gid_ndx && !(file->flags & FLAG_SKIP_GROUP) && sxp->st.st_gid != (gid_t)F_GROUP(file)) return 0; @@ -153,7 +153,7 @@ diff --git a/generator.c b/generator.c #ifdef SUPPORT_ACLS if (preserve_acls && !S_ISLNK(file->mode)) { if (!ACL_READY(*sxp)) -@@ -462,6 +470,12 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -461,6 +469,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; @@ -166,7 +166,7 @@ diff --git a/generator.c b/generator.c #if !defined HAVE_LCHMOD && !defined HAVE_SETATTRLIST if (S_ISLNK(file->mode)) { ; -@@ -1029,6 +1043,7 @@ static int try_dests_non(struct file_struct *file, char *fname, int ndx, +@@ -1028,6 +1042,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]; @@ -174,7 +174,7 @@ diff --git a/generator.c b/generator.c int64 len; int colwidth = human_readable ? 14 : 11; -@@ -1044,10 +1059,11 @@ static void list_file_entry(struct file_struct *f) +@@ -1043,10 +1058,11 @@ static void list_file_entry(struct file_struct *f) #ifdef SUPPORT_LINKS if (preserve_links && S_ISLNK(f->mode)) { @@ -189,7 +189,7 @@ diff --git a/generator.c b/generator.c } else #endif if (missing_args == 2 && f->mode == 0) { -@@ -1055,9 +1071,11 @@ static void list_file_entry(struct file_struct *f) +@@ -1054,9 +1070,11 @@ static void list_file_entry(struct file_struct *f) colwidth + 31, "*missing", f_name(f, NULL)); } else { @@ -203,7 +203,7 @@ diff --git a/generator.c b/generator.c } } -@@ -1148,6 +1166,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1147,6 +1165,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, return; } } @@ -285,7 +285,7 @@ diff --git a/options.c b/options.c {"omit-dir-times", 'O', POPT_ARG_VAL, &omit_dir_times, 1, 0, 0 }, {"no-omit-dir-times",0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 }, {"no-O", 0, POPT_ARG_VAL, &omit_dir_times, 0, 0, 0 }, -@@ -2352,6 +2357,8 @@ void server_options(char **args, int *argc_p) +@@ -2367,6 +2372,8 @@ void server_options(char **args, int *argc_p) argstr[x++] = 'D'; if (preserve_times) argstr[x++] = 't'; @@ -405,7 +405,7 @@ diff --git a/rsync.yo b/rsync.yo dit(bf(--super)) This tells the receiving side to attempt super-user activities even if the receiving rsync wasn't run by the super-user. These activities include: preserving users via the bf(--owner) option, preserving -@@ -1904,7 +1908,7 @@ with older versions of rsync, but that also turns on the output of other +@@ -1918,7 +1922,7 @@ with older versions of rsync, but that also turns on the output of other verbose messages). The "%i" escape has a cryptic output that is 11 letters long. The general @@ -414,7 +414,7 @@ diff --git a/rsync.yo b/rsync.yo type of update being done, bf(X) is replaced by the file-type, and the other letters represent attributes that may be output if they are being modified. -@@ -1963,6 +1967,8 @@ quote(itemization( +@@ -1977,6 +1981,8 @@ quote(itemization( it() The bf(f) means that the fileflags information changed. it() The bf(a) means that the ACL information changed. it() The bf(x) means that the extended attribute information changed. diff --git a/cvs-entries.diff b/cvs-entries.diff index 851f89b..e14575b 100644 --- a/cvs-entries.diff +++ b/cvs-entries.diff @@ -8,7 +8,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/exclude.c b/exclude.c --- a/exclude.c +++ b/exclude.c diff --git a/daemon-forward-lookup.diff b/daemon-forward-lookup.diff index 802d10b..dbaf43c 100644 --- a/daemon-forward-lookup.diff +++ b/daemon-forward-lookup.diff @@ -8,7 +8,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/access.c b/access.c --- a/access.c +++ b/access.c diff --git a/date-only.diff b/date-only.diff index 681c4df..607c1da 100644 --- a/date-only.diff +++ b/date-only.diff @@ -14,7 +14,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c @@ -26,7 +26,7 @@ diff --git a/generator.c b/generator.c extern int size_only; extern OFF_T max_size; extern OFF_T min_size; -@@ -524,6 +525,9 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -523,6 +524,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) { @@ -63,7 +63,7 @@ diff --git a/options.c b/options.c {"one-file-system", 'x', POPT_ARG_NONE, 0, 'x', 0, 0 }, {"no-one-file-system",'x',POPT_ARG_VAL, &one_file_system, 0, 0, 0 }, {"no-x", 'x', POPT_ARG_VAL, &one_file_system, 0, 0, 0 }, -@@ -2530,6 +2533,9 @@ void server_options(char **args, int *argc_p) +@@ -2545,6 +2548,9 @@ void server_options(char **args, int *argc_p) else if (missing_args == 1 && !am_sender) args[ac++] = "--ignore-missing-args"; diff --git a/db.diff b/db.diff index 6320cba..d2635f3 100644 --- a/db.diff +++ b/db.diff @@ -23,7 +23,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/Makefile.in b/Makefile.in --- a/Makefile.in +++ b/Makefile.in @@ -82,15 +82,15 @@ diff --git a/checksum.c b/checksum.c diff --git a/cleanup.c b/cleanup.c --- a/cleanup.c +++ b/cleanup.c -@@ -27,6 +27,7 @@ extern int am_daemon; - extern int am_sender; - extern int am_generator; +@@ -26,6 +26,7 @@ extern int am_server; + extern int am_daemon; + extern int am_receiver; extern int io_error; +extern int use_db; extern int keep_partial; extern int got_xfer_error; extern int protocol_version; -@@ -139,6 +140,12 @@ NORETURN void _exit_cleanup(int code, const char *file, int line) +@@ -140,6 +141,12 @@ NORETURN void _exit_cleanup(int code, const char *file, int line) /* FALLTHROUGH */ #include "case_N.h" @@ -147,7 +147,7 @@ diff --git a/clientserver.c b/clientserver.c diff --git a/configure.in b/configure.in --- a/configure.in +++ b/configure.in -@@ -331,7 +331,7 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \ +@@ -337,7 +337,7 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \ sys/un.h sys/attr.h mcheck.h arpa/inet.h arpa/nameser.h locale.h \ netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h \ sys/acl.h acl/libacl.h attr/xattr.h sys/xattr.h sys/extattr.h \ @@ -156,7 +156,7 @@ diff --git a/configure.in b/configure.in AC_HEADER_MAJOR AC_CACHE_CHECK([if makedev takes 3 args],rsync_cv_MAKEDEV_TAKES_3_ARGS,[ -@@ -1013,6 +1013,29 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x" +@@ -1019,6 +1019,29 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x" fi fi @@ -761,7 +761,7 @@ new file mode 100644 diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c -@@ -53,6 +53,7 @@ extern int preserve_specials; +@@ -54,6 +54,7 @@ extern int delete_during; extern int missing_args; extern int uid_ndx; extern int gid_ndx; @@ -769,7 +769,7 @@ diff --git a/flist.c b/flist.c extern int eol_nulls; extern int relative_paths; extern int implied_dirs; -@@ -1307,11 +1308,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1309,11 +1310,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, extra_len += EXTRA_LEN; #endif @@ -783,7 +783,7 @@ diff --git a/flist.c b/flist.c #if EXTRA_ROUNDING > 0 if (extra_len & (EXTRA_ROUNDING * EXTRA_LEN)) -@@ -1394,8 +1392,12 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1396,8 +1394,12 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, return NULL; } @@ -798,7 +798,7 @@ diff --git a/flist.c b/flist.c if (unsort_ndx) F_NDX(file) = stats.num_dirs; -@@ -2060,6 +2062,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) +@@ -2075,6 +2077,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) | (eol_nulls || reading_remotely ? RL_EOL_NULLS : 0); int implied_dot_dir = 0; @@ -819,7 +819,7 @@ diff --git a/generator.c b/generator.c extern int append_mode; extern int make_backups; extern int csum_length; -@@ -531,7 +532,8 @@ int unchanged_file(char *fn, struct file_struct *file, STRUCT_STAT *st) +@@ -530,7 +531,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]; @@ -829,16 +829,16 @@ diff --git a/generator.c b/generator.c return memcmp(sum, F_SUM(file), checksum_len) == 0; } -@@ -2076,6 +2078,9 @@ void generate_files(int f_out, const char *local_name) +@@ -2075,6 +2077,9 @@ void generate_files(int f_out, const char *local_name) : "enabled"); } + if (use_db && always_checksum) + db_connect(); + - /* Since we often fill up the outgoing socket and then just sit around - * waiting for the other 2 processes to do their thing, we don't want - * to exit on a timeout. If the data stops flowing, the receiver will + dflt_perms = (ACCESSPERMS & ~orig_umask); + + do { diff --git a/loadparm.c b/loadparm.c --- a/loadparm.c +++ b/loadparm.c @@ -885,7 +885,7 @@ diff --git a/main.c b/main.c extern int file_total; extern int recurse; extern int xfer_dirs; -@@ -80,6 +81,7 @@ extern char *filesfrom_host; +@@ -83,6 +84,7 @@ extern char *filesfrom_host; extern char *partial_dir; extern char *dest_option; extern char *rsync_path; @@ -893,7 +893,7 @@ diff --git a/main.c b/main.c extern char *shell_cmd; extern char *batch_name; extern char *password_file; -@@ -1593,6 +1595,9 @@ int main(int argc,char *argv[]) +@@ -1609,6 +1611,9 @@ int main(int argc,char *argv[]) exit_cleanup(RERR_SYNTAX); } @@ -912,7 +912,7 @@ diff --git a/options.c b/options.c char *filesfrom_host = NULL; +char *db_config = NULL; int eol_nulls = 0; - int protect_args = 0; + int protect_args = -1; int human_readable = 1; @@ -567,6 +568,7 @@ static void print_rsync_version(enum logcode f) char const *links = "no "; diff --git a/detect-renamed-lax.diff b/detect-renamed-lax.diff index 0332365..9785f47 100644 --- a/detect-renamed-lax.diff +++ b/detect-renamed-lax.diff @@ -20,11 +20,11 @@ switches to --detect-moved blindly accepts the staged file. -- Matt McCutchen -based-on: patch/detect-renamed +based-on: patch/master/detect-renamed diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c -@@ -469,7 +469,9 @@ static int fattr_find(struct file_struct *f, char *fname) +@@ -468,7 +468,9 @@ static int fattr_find(struct file_struct *f, char *fname) continue; } } @@ -35,7 +35,7 @@ diff --git a/generator.c b/generator.c diff = u_strcmp(fmid->basename, f->basename); if (diff == 0) { good_match = mid; -@@ -1784,6 +1786,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1783,6 +1785,21 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, fnamecmp = partialptr; fnamecmp_type = FNAMECMP_PARTIAL_DIR; statret = 0; @@ -80,7 +80,7 @@ diff --git a/options.c b/options.c {"fuzzy", 'y', POPT_ARG_VAL, &fuzzy_basis, 1, 0, 0 }, {"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, {"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, -@@ -2517,8 +2521,14 @@ void server_options(char **args, int *argc_p) +@@ -2532,8 +2536,14 @@ void server_options(char **args, int *argc_p) args[ac++] = "--super"; if (size_only) args[ac++] = "--size-only"; @@ -109,7 +109,7 @@ diff --git a/rsync.yo b/rsync.yo --compare-dest=DIR also compare received files relative to DIR --copy-dest=DIR ... and include copies of unchanged files --link-dest=DIR hardlink to files in DIR when unchanged -@@ -1642,6 +1644,17 @@ the bf(--partial-dir) option, that directory will be used instead. These +@@ -1656,6 +1658,17 @@ the bf(--partial-dir) option, that directory will be used instead. These potential alternate-basis files will be removed as the transfer progresses. This option conflicts with bf(--inplace) and bf(--append). diff --git a/detect-renamed.diff b/detect-renamed.diff index 7d4682d..2df5d30 100644 --- a/detect-renamed.diff +++ b/detect-renamed.diff @@ -32,11 +32,11 @@ TODO: a file that can't use it, while missing out on giving it to a file that could use it. -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/compat.c b/compat.c --- a/compat.c +++ b/compat.c -@@ -40,6 +40,7 @@ extern int checksum_seed; +@@ -41,6 +41,7 @@ extern int checksum_seed; extern int basis_dir_cnt; extern int prune_empty_dirs; extern int protocol_version; @@ -44,7 +44,7 @@ diff --git a/compat.c b/compat.c extern int protect_args; extern int preserve_uid; extern int preserve_gid; -@@ -119,6 +120,7 @@ void set_allow_inc_recurse(void) +@@ -121,6 +122,7 @@ void set_allow_inc_recurse(void) allow_inc_recurse = 0; else if (!am_sender && (delete_before || delete_after @@ -104,7 +104,7 @@ diff --git a/delete.c b/delete.c diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c -@@ -62,6 +62,7 @@ extern int non_perishable_cnt; +@@ -63,6 +63,7 @@ extern int non_perishable_cnt; extern int prune_empty_dirs; extern int copy_links; extern int copy_unsafe_links; @@ -112,7 +112,7 @@ diff --git a/flist.c b/flist.c extern int protocol_version; extern int sanitize_paths; extern int munge_symlinks; -@@ -132,6 +133,8 @@ static int64 tmp_dev, tmp_ino; +@@ -134,6 +135,8 @@ static int64 tmp_dev, tmp_ino; #endif static char tmp_sum[MAX_DIGEST_LEN]; @@ -121,7 +121,7 @@ diff --git a/flist.c b/flist.c static char empty_sum[MAX_DIGEST_LEN]; static int flist_count_offset; /* for --delete --progress */ -@@ -299,6 +302,45 @@ static int is_excluded(const char *fname, int is_dir, int filter_level) +@@ -301,6 +304,45 @@ static int is_excluded(const char *fname, int is_dir, int filter_level) return 0; } @@ -167,7 +167,7 @@ diff --git a/flist.c b/flist.c static void send_directory(int f, struct file_list *flist, char *fbuf, int len, int flags); -@@ -2529,6 +2571,25 @@ struct file_list *recv_file_list(int f) +@@ -2548,6 +2590,25 @@ struct file_list *recv_file_list(int f) flist_sort_and_clean(flist, relative_paths); @@ -196,7 +196,7 @@ diff --git a/flist.c b/flist.c diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c -@@ -81,6 +81,7 @@ extern char *partial_dir; +@@ -80,6 +80,7 @@ extern char *partial_dir; extern int compare_dest; extern int copy_dest; extern int link_dest; @@ -204,7 +204,7 @@ diff --git a/generator.c b/generator.c extern int whole_file; extern int list_only; extern int read_batch; -@@ -98,10 +99,12 @@ extern char *tmpdir; +@@ -97,10 +98,12 @@ 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; @@ -217,7 +217,7 @@ diff --git a/generator.c b/generator.c static int deldelay_size = 0, deldelay_cnt = 0; static char *deldelay_buf = NULL; static int deldelay_fd = -1; -@@ -181,6 +184,8 @@ static int remember_delete(struct file_struct *file, const char *fname, int flag +@@ -180,6 +183,8 @@ static int remember_delete(struct file_struct *file, const char *fname, int flag if (!flush_delete_delay()) return 0; } @@ -226,7 +226,7 @@ diff --git a/generator.c b/generator.c return 1; } -@@ -272,13 +277,18 @@ static void do_delayed_deletions(char *delbuf) +@@ -271,13 +276,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 @@ -249,8 +249,8 @@ diff --git a/generator.c b/generator.c int save_uid_ndx = uid_ndx; if (!fbuf) { -@@ -293,17 +303,22 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) - maybe_send_keepalive(); +@@ -292,17 +302,22 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) + maybe_send_keepalive(time(NULL), True); if (io_error && !ignore_errors) { - if (already_warned) @@ -277,7 +277,7 @@ diff --git a/generator.c b/generator.c if (one_file_system) { if (file->flags & FLAG_TOP_DIR) filesystem_dev = *fs_dev; -@@ -316,6 +331,14 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) +@@ -315,6 +330,14 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) dirlist = get_dirlist(fbuf, dlen, 0); @@ -292,7 +292,7 @@ diff --git a/generator.c b/generator.c /* If an item in dirlist is not found in flist, delete it * from the filesystem. */ for (i = dirlist->used; i--; ) { -@@ -328,6 +351,10 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) +@@ -327,6 +350,10 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) f_name(fp, NULL)); continue; } @@ -303,7 +303,7 @@ diff --git a/generator.c b/generator.c /* 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. */ -@@ -336,14 +363,19 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) +@@ -335,14 +362,19 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) if (!(fp->mode & S_IWUSR) && !am_root && (uid_t)F_OWNER(fp) == our_uid) flags |= DEL_NO_UID_WRITE; f_name(fp, delbuf); @@ -327,7 +327,7 @@ diff --git a/generator.c b/generator.c flist_free(dirlist); if (!save_uid_ndx) { -@@ -381,14 +413,122 @@ static void do_delete_pass(void) +@@ -380,14 +412,122 @@ static void do_delete_pass(void) || !S_ISDIR(st.st_mode)) continue; @@ -452,7 +452,7 @@ diff --git a/generator.c b/generator.c int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) { #ifndef CAN_SET_SYMLINK_TIMES -@@ -1049,6 +1189,7 @@ static void list_file_entry(struct file_struct *f) +@@ -1048,6 +1188,7 @@ static void list_file_entry(struct file_struct *f) } } @@ -460,7 +460,7 @@ diff --git a/generator.c b/generator.c static int phase = 0; static int dflt_perms; -@@ -1328,9 +1469,12 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1327,9 +1468,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)) { @@ -476,7 +476,7 @@ diff --git a/generator.c b/generator.c change_local_filter_dir(fname, strlen(fname), F_DEPTH(file)); } goto cleanup; -@@ -1589,8 +1733,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1588,8 +1732,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, goto cleanup; } #endif @@ -492,7 +492,7 @@ diff --git a/generator.c b/generator.c rsyserr(FERROR_XFER, stat_errno, "recv_generator: failed to stat %s", full_fname(fname)); goto cleanup; -@@ -2057,6 +2207,12 @@ void generate_files(int f_out, const char *local_name) +@@ -2056,6 +2206,12 @@ void generate_files(int f_out, const char *local_name) if (DEBUG_GTE(GENR, 1)) rprintf(FINFO, "generator starting pid=%ld\n", (long)getpid()); @@ -505,7 +505,7 @@ diff --git a/generator.c b/generator.c if (delete_before && !solo_file && cur_flist->used > 0) do_delete_pass(); if (delete_during == 2) { -@@ -2067,7 +2223,7 @@ void generate_files(int f_out, const char *local_name) +@@ -2066,7 +2222,7 @@ void generate_files(int f_out, const char *local_name) } info_levels[INFO_FLIST] = info_levels[INFO_PROGRESS] = 0; @@ -514,7 +514,7 @@ diff --git a/generator.c b/generator.c whole_file = 0; if (DEBUG_GTE(FLIST, 1)) { rprintf(FINFO, "delta-transmission %s\n", -@@ -2109,7 +2265,7 @@ void generate_files(int f_out, const char *local_name) +@@ -2102,7 +2258,7 @@ void generate_files(int f_out, const char *local_name) dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp)); } else dirdev = MAKEDEV(0, 0); @@ -523,7 +523,7 @@ diff --git a/generator.c b/generator.c } else change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp)); } -@@ -2156,7 +2312,21 @@ void generate_files(int f_out, const char *local_name) +@@ -2149,7 +2305,21 @@ void generate_files(int f_out, const char *local_name) } while ((cur_flist = cur_flist->next) != NULL); if (delete_during) @@ -573,7 +573,7 @@ diff --git a/options.c b/options.c {"fuzzy", 'y', POPT_ARG_VAL, &fuzzy_basis, 1, 0, 0 }, {"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, {"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, -@@ -2142,7 +2145,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2157,7 +2160,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) inplace = 1; } @@ -582,7 +582,7 @@ diff --git a/options.c b/options.c partial_dir = tmp_partialdir; if (inplace) { -@@ -2151,6 +2154,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2166,6 +2169,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) snprintf(err_buf, sizeof err_buf, "--%s cannot be used with --%s\n", append_mode ? "append" : "inplace", @@ -590,7 +590,7 @@ diff --git a/options.c b/options.c delay_updates ? "delay-updates" : "partial-dir"); return 0; } -@@ -2513,6 +2517,8 @@ void server_options(char **args, int *argc_p) +@@ -2528,6 +2532,8 @@ void server_options(char **args, int *argc_p) args[ac++] = "--super"; if (size_only) args[ac++] = "--size-only"; @@ -630,7 +630,7 @@ diff --git a/rsync.yo b/rsync.yo --compare-dest=DIR also compare received files relative to DIR --copy-dest=DIR ... and include copies of unchanged files --link-dest=DIR hardlink to files in DIR when unchanged -@@ -1626,6 +1627,21 @@ Note that the use of the bf(--delete) option might get rid of any potential +@@ -1640,6 +1641,21 @@ Note that the use of the bf(--delete) option might get rid of any potential fuzzy-match files, so either use bf(--delete-after) or specify some filename exclusions if you need to prevent this. diff --git a/downdate.diff b/downdate.diff index af9e881..147a1d2 100644 --- a/downdate.diff +++ b/downdate.diff @@ -7,7 +7,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c @@ -19,7 +19,7 @@ diff --git a/generator.c b/generator.c extern int human_readable; extern int ignore_existing; extern int ignore_non_existing; -@@ -1530,6 +1531,13 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1529,6 +1530,13 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, goto cleanup; } @@ -33,7 +33,7 @@ diff --git a/generator.c b/generator.c fnamecmp = fname; fnamecmp_type = FNAMECMP_FNAME; -@@ -1963,6 +1971,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo) +@@ -1962,6 +1970,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; @@ -41,7 +41,7 @@ diff --git a/generator.c b/generator.c always_checksum = -always_checksum; size_only = -size_only; append_mode = -append_mode; -@@ -1988,6 +1997,7 @@ void check_for_finished_files(int itemizing, enum logcode code, int check_redo) +@@ -1987,6 +1996,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; diff --git a/drop-cache.diff b/drop-cache.diff index 0fb8d67..28e4b47 100644 --- a/drop-cache.diff +++ b/drop-cache.diff @@ -69,7 +69,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/checksum.c b/checksum.c --- a/checksum.c +++ b/checksum.c @@ -87,7 +87,7 @@ diff --git a/checksum.c b/checksum.c diff --git a/cleanup.c b/cleanup.c --- a/cleanup.c +++ b/cleanup.c -@@ -50,7 +50,13 @@ void close_all(void) +@@ -51,7 +51,13 @@ void close_all(void) int fd; int ret; STRUCT_STAT st; @@ -104,7 +104,7 @@ diff --git a/cleanup.c b/cleanup.c diff --git a/configure.in b/configure.in --- a/configure.in +++ b/configure.in -@@ -583,7 +583,7 @@ AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \ +@@ -589,7 +589,7 @@ AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \ setlocale setmode open64 lseek64 mkstemp64 mtrace va_copy __va_copy \ seteuid strerror putenv iconv_open locale_charset nl_langinfo getxattr \ extattr_get_link sigaction sigprocmask setattrlist getgrouplist \ @@ -132,7 +132,7 @@ diff --git a/fileio.c b/fileio.c diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c -@@ -112,6 +112,10 @@ static int need_retouch_dir_times; +@@ -111,6 +111,10 @@ static int need_retouch_dir_times; static int need_retouch_dir_perms; static const char *solo_file = NULL; @@ -174,7 +174,7 @@ diff --git a/options.c b/options.c {"existing", 0, POPT_ARG_NONE, &ignore_non_existing, 0, 0, 0 }, {"ignore-non-existing",0,POPT_ARG_NONE, &ignore_non_existing, 0, 0, 0 }, {"ignore-existing", 0, POPT_ARG_NONE, &ignore_existing, 0, 0, 0 }, -@@ -2272,6 +2279,11 @@ void server_options(char **args, int *argc_p) +@@ -2287,6 +2294,11 @@ void server_options(char **args, int *argc_p) if (!am_sender) args[ac++] = "--sender"; @@ -225,7 +225,7 @@ diff --git a/rsync.yo b/rsync.yo diff --git a/sender.c b/sender.c --- a/sender.c +++ b/sender.c -@@ -48,6 +48,10 @@ extern struct file_list *cur_flist, *first_flist, *dir_flist; +@@ -49,6 +49,10 @@ extern struct file_list *cur_flist, *first_flist, *dir_flist; BOOL extra_flist_sending_enabled; diff --git a/fileflags.diff b/fileflags.diff index 5668f56..4cd9c8a 100644 --- a/fileflags.diff +++ b/fileflags.diff @@ -8,7 +8,7 @@ To use this patch, run these commands for a successful build: ./configure make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/Makefile.in b/Makefile.in --- a/Makefile.in +++ b/Makefile.in @@ -21,7 +21,7 @@ diff --git a/Makefile.in b/Makefile.in # Programs we must have to run the test cases CHECK_PROGS = rsync$(EXEEXT) tls$(EXEEXT) getgroups$(EXEEXT) getfsdev$(EXEEXT) \ -@@ -108,7 +108,7 @@ getgroups$(EXEEXT): getgroups.o +@@ -111,7 +111,7 @@ getgroups$(EXEEXT): getgroups.o getfsdev$(EXEEXT): getfsdev.o $(CC) $(CFLAGS) $(LDFLAGS) -o $@ getfsdev.o $(LIBS) @@ -33,7 +33,7 @@ diff --git a/Makefile.in b/Makefile.in diff --git a/compat.c b/compat.c --- a/compat.c +++ b/compat.c -@@ -40,9 +40,11 @@ extern int checksum_seed; +@@ -41,9 +41,11 @@ extern int checksum_seed; extern int basis_dir_cnt; extern int prune_empty_dirs; extern int protocol_version; @@ -45,7 +45,7 @@ diff --git a/compat.c b/compat.c extern int preserve_acls; extern int preserve_xattrs; extern int need_messages_from_generator; -@@ -60,7 +62,7 @@ extern char *iconv_opt; +@@ -61,7 +63,7 @@ extern char *iconv_opt; #endif /* These index values are for the file-list's extra-attribute array. */ @@ -54,7 +54,7 @@ diff --git a/compat.c b/compat.c int receiver_symlink_times = 0; /* receiver can set the time on a symlink */ int sender_symlink_iconv = 0; /* sender should convert symlink content */ -@@ -136,6 +138,8 @@ void setup_protocol(int f_out,int f_in) +@@ -138,6 +140,8 @@ void setup_protocol(int f_out,int f_in) uid_ndx = ++file_extra_cnt; if (preserve_gid) gid_ndx = ++file_extra_cnt; @@ -66,7 +66,7 @@ diff --git a/compat.c b/compat.c diff --git a/configure.in b/configure.in --- a/configure.in +++ b/configure.in -@@ -583,7 +583,7 @@ AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \ +@@ -589,7 +589,7 @@ AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \ setlocale setmode open64 lseek64 mkstemp64 mtrace va_copy __va_copy \ seteuid strerror putenv iconv_open locale_charset nl_langinfo getxattr \ extattr_get_link sigaction sigprocmask setattrlist getgrouplist \ @@ -131,10 +131,10 @@ diff --git a/flist.c b/flist.c extern int preserve_devices; extern int preserve_specials; +extern int preserve_fileflags; + extern int delete_during; extern int missing_args; extern int uid_ndx; - extern int gid_ndx; -@@ -406,6 +407,9 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -408,6 +409,9 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, { static time_t modtime; static mode_t mode; @@ -144,7 +144,7 @@ diff --git a/flist.c b/flist.c #ifdef SUPPORT_HARD_LINKS static int64 dev; #endif -@@ -449,6 +453,14 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -451,6 +455,14 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, xflags |= XMIT_SAME_MODE; else mode = file->mode; @@ -159,7 +159,7 @@ diff --git a/flist.c b/flist.c if (preserve_devices && IS_DEVICE(mode)) { if (protocol_version < 28) { -@@ -590,6 +602,10 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -592,6 +604,10 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, write_varint(f, F_MOD_NSEC(file)); if (!(xflags & XMIT_SAME_MODE)) write_int(f, to_wire_mode(mode)); @@ -170,7 +170,7 @@ diff --git a/flist.c b/flist.c if (preserve_uid && !(xflags & XMIT_SAME_UID)) { if (protocol_version < 30) write_int(f, uid); -@@ -677,6 +693,9 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x +@@ -679,6 +695,9 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x { static int64 modtime; static mode_t mode; @@ -180,7 +180,7 @@ diff --git a/flist.c b/flist.c #ifdef SUPPORT_HARD_LINKS static int64 dev; #endif -@@ -822,6 +841,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x +@@ -824,6 +843,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x if (chmod_modes && !S_ISLNK(mode) && mode) mode = tweak_mode(mode, chmod_modes); @@ -191,7 +191,7 @@ diff --git a/flist.c b/flist.c if (preserve_uid && !(xflags & XMIT_SAME_UID)) { if (protocol_version < 30) -@@ -973,6 +996,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x +@@ -975,6 +998,10 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x } #endif file->mode = mode; @@ -202,7 +202,7 @@ diff --git a/flist.c b/flist.c if (preserve_uid) F_OWNER(file) = uid; if (preserve_gid) { -@@ -1370,6 +1397,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1372,6 +1399,10 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, } #endif file->mode = st.st_mode; @@ -227,7 +227,7 @@ diff --git a/generator.c b/generator.c extern int uid_ndx; extern int gid_ndx; extern int delete_mode; -@@ -406,6 +408,11 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) +@@ -405,6 +407,11 @@ int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp) && ((sxp->st.st_mode & 0111 ? 1 : 0) ^ (file->mode & 0111 ? 1 : 0))) return 0; @@ -239,7 +239,7 @@ diff --git a/generator.c b/generator.c if (am_root && uid_ndx && sxp->st.st_uid != (uid_t)F_OWNER(file)) return 0; -@@ -471,6 +478,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -470,6 +477,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; @@ -251,7 +251,7 @@ diff --git a/generator.c b/generator.c #ifdef SUPPORT_ACLS if (preserve_acls && !S_ISLNK(file->mode)) { if (!ACL_READY(*sxp)) -@@ -1265,6 +1277,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1264,6 +1276,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); } @@ -262,7 +262,7 @@ diff --git a/generator.c b/generator.c if (statret != 0 && basis_dir[0] != NULL) { int j = try_dests_non(file, fname, ndx, fnamecmpbuf, &sx, itemizing, code); -@@ -1305,10 +1321,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1304,10 +1320,15 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, /* We need to ensure that the dirs in the transfer have writable * permissions during the time we are putting files within them. * This is then fixed after the transfer is done. */ @@ -279,7 +279,7 @@ diff --git a/generator.c b/generator.c rsyserr(FERROR_XFER, errno, "failed to modify permissions on %s", full_fname(fname)); -@@ -1343,6 +1364,10 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1342,6 +1363,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); } @@ -290,7 +290,7 @@ diff --git a/generator.c b/generator.c #ifdef SUPPORT_HARD_LINKS if (preserve_hard_links && F_HLINK_NOT_FIRST(file) -@@ -1920,13 +1945,17 @@ static void touch_up_dirs(struct file_list *flist, int ndx) +@@ -1919,13 +1944,17 @@ static void touch_up_dirs(struct file_list *flist, int ndx) continue; fname = f_name(file, NULL); if (fix_dir_perms) @@ -309,7 +309,7 @@ diff --git a/generator.c b/generator.c +#endif if (counter >= loopchk_limit) { if (allowed_lull) - maybe_send_keepalive(); + maybe_send_keepalive(time(NULL), True); diff --git a/log.c b/log.c --- a/log.c +++ b/log.c @@ -420,7 +420,7 @@ diff --git a/options.c b/options.c {"ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 1, 0, 0 }, {"no-ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 0, 0, 0 }, {"max-delete", 0, POPT_ARG_INT, &max_delete, 0, 0, 0 }, -@@ -2420,6 +2446,9 @@ void server_options(char **args, int *argc_p) +@@ -2435,6 +2461,9 @@ void server_options(char **args, int *argc_p) if (xfer_dirs && !recurse && delete_mode && am_sender) args[ac++] = "--no-r"; @@ -430,7 +430,7 @@ diff --git a/options.c b/options.c if (do_compression && def_compress_level != Z_DEFAULT_COMPRESSION) { if (asprintf(&arg, "--compress-level=%d", def_compress_level) < 0) goto oom; -@@ -2507,6 +2536,16 @@ void server_options(char **args, int *argc_p) +@@ -2522,6 +2551,16 @@ void server_options(char **args, int *argc_p) args[ac++] = "--delete-excluded"; if (force_delete) args[ac++] = "--force"; @@ -732,7 +732,7 @@ diff --git a/rsync.yo b/rsync.yo bf(--recursive) option was also enabled. dit(bf(--max-delete=NUM)) This tells rsync not to delete more than NUM -@@ -1875,7 +1904,7 @@ with older versions of rsync, but that also turns on the output of other +@@ -1889,7 +1918,7 @@ with older versions of rsync, but that also turns on the output of other verbose messages). The "%i" escape has a cryptic output that is 11 letters long. The general @@ -741,7 +741,7 @@ diff --git a/rsync.yo b/rsync.yo type of update being done, bf(X) is replaced by the file-type, and the other letters represent attributes that may be output if they are being modified. -@@ -1931,7 +1960,7 @@ quote(itemization( +@@ -1945,7 +1974,7 @@ quote(itemization( sender's value (requires bf(--owner) and super-user privileges). it() A bf(g) means the group is different and is being updated to the sender's value (requires bf(--group) and the authority to set the group). diff --git a/filter-attribute-mods.diff b/filter-attribute-mods.diff index 212a9bd..f7ceb0f 100644 --- a/filter-attribute-mods.diff +++ b/filter-attribute-mods.diff @@ -9,7 +9,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/exclude.c b/exclude.c --- a/exclude.c +++ b/exclude.c @@ -238,7 +238,7 @@ diff --git a/exclude.c b/exclude.c diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c -@@ -80,6 +80,7 @@ extern struct chmod_mode_struct *chmod_modes; +@@ -82,6 +82,7 @@ extern struct chmod_mode_struct *chmod_modes; extern filter_rule_list filter_list; extern filter_rule_list daemon_filter_list; @@ -246,7 +246,7 @@ diff --git a/flist.c b/flist.c #ifdef ICONV_OPTION extern int filesfrom_convert; -@@ -282,7 +283,8 @@ static inline int path_is_daemon_excluded(char *path, int ignore_filename) +@@ -284,7 +285,8 @@ static inline int path_is_daemon_excluded(char *path, int ignore_filename) /* This function is used to check if a file should be included/excluded * from the list of files based on its name and type etc. The value of @@ -256,7 +256,7 @@ diff --git a/flist.c b/flist.c static int is_excluded(const char *fname, int is_dir, int filter_level) { #if 0 /* This currently never happens, so avoid a useless compare. */ -@@ -291,6 +293,8 @@ static int is_excluded(const char *fname, int is_dir, int filter_level) +@@ -293,6 +295,8 @@ static int is_excluded(const char *fname, int is_dir, int filter_level) #endif if (is_daemon_excluded(fname, is_dir)) return 1; @@ -265,7 +265,7 @@ diff --git a/flist.c b/flist.c if (filter_level != ALL_FILTERS) return 0; if (filter_list.head -@@ -1169,7 +1173,7 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1171,7 +1175,7 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, } else if (readlink_stat(thisname, &st, linkname) != 0) { int save_errno = errno; /* See if file is excluded before reporting an error. */ @@ -274,7 +274,7 @@ diff --git a/flist.c b/flist.c && (is_excluded(thisname, 0, filter_level) || is_excluded(thisname, 1, filter_level))) { if (ignore_perishable && save_errno != ENOENT) -@@ -1214,6 +1218,12 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1216,6 +1220,12 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, if (filter_level == NO_FILTERS) goto skip_filters; @@ -287,7 +287,7 @@ diff --git a/flist.c b/flist.c if (S_ISDIR(st.st_mode)) { if (!xfer_dirs) { -@@ -1414,12 +1424,23 @@ static struct file_struct *send_file_name(int f, struct file_list *flist, +@@ -1416,12 +1426,23 @@ static struct file_struct *send_file_name(int f, struct file_list *flist, int flags, int filter_level) { struct file_struct *file; @@ -312,7 +312,7 @@ diff --git a/flist.c b/flist.c file->mode = tweak_mode(file->mode, chmod_modes); if (f >= 0) { -@@ -2285,7 +2306,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) +@@ -2300,7 +2321,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) struct file_struct *file; file = send_file_name(f, flist, fbuf, &st, FLAG_TOP_DIR | FLAG_CONTENT_DIR | flags, @@ -321,7 +321,7 @@ diff --git a/flist.c b/flist.c if (!file) continue; if (inc_recurse) { -@@ -2299,7 +2320,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) +@@ -2314,7 +2335,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) } else send_if_directory(f, flist, file, fbuf, len, flags); } else @@ -395,7 +395,7 @@ diff --git a/rsync.yo b/rsync.yo See the bf(--perms) and bf(--executability) options for how the resulting permission value can be applied to the files in the transfer. -@@ -1832,6 +1834,10 @@ be omitted, but if USER is empty, a leading colon must be supplied. +@@ -1846,6 +1848,10 @@ be omitted, but if USER is empty, a leading colon must be supplied. If you specify "--chown=foo:bar, this is exactly the same as specifying "--usermap=*:foo --groupmap=*:bar", only easier. @@ -406,7 +406,7 @@ diff --git a/rsync.yo b/rsync.yo dit(bf(--timeout=TIMEOUT)) This option allows you to set a maximum I/O timeout in seconds. If no data is transferred for the specified time then rsync will exit. The default is 0, which means no timeout. -@@ -2657,6 +2663,15 @@ itemization( +@@ -2671,6 +2677,15 @@ itemization( option's default rules that exclude things like "CVS" and "*.o" are marked as perishable, and will not prevent a directory that was removed on the source from being deleted on the destination. @@ -422,7 +422,7 @@ diff --git a/rsync.yo b/rsync.yo ) manpagesection(MERGE-FILE FILTER RULES) -@@ -2718,6 +2733,12 @@ itemization( +@@ -2732,6 +2747,12 @@ itemization( a rule prefix such as bf(hide)). ) diff --git a/fsync.diff b/fsync.diff index 61891a2..4e1b545 100644 --- a/fsync.diff +++ b/fsync.diff @@ -7,7 +7,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/options.c b/options.c --- a/options.c +++ b/options.c @@ -35,7 +35,7 @@ diff --git a/options.c b/options.c {"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 }, {"rsync-path", 0, POPT_ARG_STRING, &rsync_path, 0, 0, 0 }, {"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 }, -@@ -2592,6 +2595,9 @@ void server_options(char **args, int *argc_p) +@@ -2607,6 +2610,9 @@ void server_options(char **args, int *argc_p) args[ac++] = tmpdir; } diff --git a/group-auth.diff b/group-auth.diff index f478946..ae3f363 100644 --- a/group-auth.diff +++ b/group-auth.diff @@ -11,7 +11,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/authenticate.c b/authenticate.c --- a/authenticate.c +++ b/authenticate.c diff --git a/ignore-case.diff b/ignore-case.diff index 4b9d833..f0601fb 100644 --- a/ignore-case.diff +++ b/ignore-case.diff @@ -12,7 +12,7 @@ TODO: - Make this code handle multibyte character encodings, and honor the --iconv setting when converting case. -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/exclude.c b/exclude.c --- a/exclude.c +++ b/exclude.c @@ -56,7 +56,7 @@ diff --git a/flist.c b/flist.c extern int ignore_errors; extern int numeric_ids; extern int recurse; -@@ -2991,6 +2992,7 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2) +@@ -3010,6 +3011,7 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2) { int dif; const uchar *c1, *c2; @@ -64,7 +64,7 @@ diff --git a/flist.c b/flist.c enum fnc_state state1, state2; enum fnc_type type1, type2; enum fnc_type t_path = protocol_version >= 29 ? t_PATH : t_ITEM; -@@ -3101,7 +3103,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2) +@@ -3120,7 +3122,15 @@ int f_name_cmp(const struct file_struct *f1, const struct file_struct *f2) if (type1 != type2) return type1 == t_PATH ? 1 : -1; } @@ -237,7 +237,7 @@ diff --git a/options.c b/options.c {"files-from", 0, POPT_ARG_STRING, &files_from, 0, 0, 0 }, {"from0", '0', POPT_ARG_VAL, &eol_nulls, 1, 0, 0}, {"no-from0", 0, POPT_ARG_VAL, &eol_nulls, 0, 0, 0}, -@@ -2542,6 +2546,9 @@ void server_options(char **args, int *argc_p) +@@ -2557,6 +2561,9 @@ void server_options(char **args, int *argc_p) args[ac++] = arg; } @@ -258,9 +258,9 @@ diff --git a/rsync.yo b/rsync.yo --address=ADDRESS bind address for outgoing socket to daemon --port=PORT specify double-colon alternate port number --sockopts=OPTIONS specify custom TCP options -@@ -1584,6 +1585,10 @@ side will also be translated - from the local to the remote character-set. The translation happens before - wild-cards are expanded. See also the bf(--files-from) option. +@@ -1598,6 +1599,10 @@ default (with is overridden by both the environment and the command-line). + This option will eventually become a new default setting at some + as-yet-undetermined point in the future. +dit(bf(--ignore-case)) This option tells rsync to ignore upper-/lower-case +differences when comparing filenames. This can avoid problems when sending diff --git a/link-by-hash.diff b/link-by-hash.diff index 2d6b6d4..53fff8f 100644 --- a/link-by-hash.diff +++ b/link-by-hash.diff @@ -12,7 +12,7 @@ To use this patch, run these commands for a successful build: ./configure make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/Makefile.in b/Makefile.in --- a/Makefile.in +++ b/Makefile.in @@ -28,7 +28,7 @@ diff --git a/Makefile.in b/Makefile.in diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c -@@ -72,6 +72,7 @@ extern int sender_keeps_checksum; +@@ -74,6 +74,7 @@ extern int sender_keeps_checksum; extern int unsort_ndx; extern struct stats stats; extern char *filesfrom_host; @@ -36,7 +36,7 @@ diff --git a/flist.c b/flist.c extern char *usermap, *groupmap; extern char curr_dir[MAXPATHLEN]; -@@ -908,7 +909,7 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x +@@ -910,7 +911,7 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x extra_len += EXTRA_LEN; #endif @@ -425,7 +425,7 @@ diff --git a/options.c b/options.c {"fuzzy", 'y', POPT_ARG_VAL, &fuzzy_basis, 1, 0, 0 }, {"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, {"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 }, -@@ -1763,6 +1766,21 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1764,6 +1767,21 @@ int parse_arguments(int *argc_p, const char ***argv_p) return 0; #endif @@ -447,7 +447,7 @@ diff --git a/options.c b/options.c default: /* A large opt value means that set_refuse_options() * turned this option off. */ -@@ -2621,6 +2639,11 @@ void server_options(char **args, int *argc_p) +@@ -2636,6 +2654,11 @@ void server_options(char **args, int *argc_p) } else if (inplace) args[ac++] = "--inplace"; @@ -536,7 +536,7 @@ diff --git a/receiver.c b/receiver.c diff --git a/rsync.c b/rsync.c --- a/rsync.c +++ b/rsync.c -@@ -48,6 +48,7 @@ extern int flist_eof; +@@ -49,6 +49,7 @@ extern int flist_eof; extern int file_old_total; extern int keep_dirlinks; extern int make_backups; diff --git a/nameconverter.diff b/nameconverter.diff index b198507..368e03e 100644 --- a/nameconverter.diff +++ b/nameconverter.diff @@ -20,7 +20,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/clientserver.c b/clientserver.c --- a/clientserver.c +++ b/clientserver.c diff --git a/netgroup-auth.diff b/netgroup-auth.diff index d118132..c05941f 100644 --- a/netgroup-auth.diff +++ b/netgroup-auth.diff @@ -9,7 +9,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/access.c b/access.c --- a/access.c +++ b/access.c diff --git a/omit-dir-changes.diff b/omit-dir-changes.diff index 92dc4c3..3b2a3ac 100644 --- a/omit-dir-changes.diff +++ b/omit-dir-changes.diff @@ -7,7 +7,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c @@ -19,7 +19,7 @@ diff --git a/generator.c b/generator.c extern int uid_ndx; extern int gid_ndx; extern int delete_mode; -@@ -437,6 +438,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -436,6 +437,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! */ @@ -27,7 +27,7 @@ diff --git a/generator.c b/generator.c int keep_time = !preserve_times ? 0 : S_ISDIR(file->mode) ? preserve_times > 1 : #ifdef CAN_SET_SYMLINK_TIMES -@@ -466,10 +468,11 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -465,10 +467,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; @@ -42,7 +42,7 @@ diff --git a/generator.c b/generator.c iflags |= ITEM_REPORT_GROUP; #ifdef SUPPORT_ACLS if (preserve_acls && !S_ISLNK(file->mode)) { -@@ -1261,7 +1264,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1260,7 +1263,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, real_sx = sx; if (file->flags & FLAG_DIR_CREATED) statret = -1; @@ -78,7 +78,7 @@ diff --git a/options.c b/options.c {"modify-window", 0, POPT_ARG_INT, &modify_window, OPT_MODIFY_WINDOW, 0, 0 }, {"super", 0, POPT_ARG_VAL, &am_root, 2, 0, 0 }, {"no-super", 0, POPT_ARG_VAL, &am_root, 0, 0, 0 }, -@@ -2057,6 +2060,8 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2072,6 +2075,8 @@ int parse_arguments(int *argc_p, const char ***argv_p) parse_filter_str(&filter_list, backup_dir_buf, rule_template(0), 0); } @@ -87,7 +87,7 @@ diff --git a/options.c b/options.c if (make_backups && !backup_dir) { omit_dir_times = 0; /* Implied, so avoid -O to sender. */ if (preserve_times > 1) -@@ -2300,6 +2305,8 @@ void server_options(char **args, int *argc_p) +@@ -2315,6 +2320,8 @@ void server_options(char **args, int *argc_p) argstr[x++] = 'm'; if (omit_dir_times) argstr[x++] = 'O'; diff --git a/openssl-support.diff b/openssl-support.diff index cc70ab5..daa419b 100644 --- a/openssl-support.diff +++ b/openssl-support.diff @@ -35,7 +35,7 @@ To use this patch, run these commands for a successful build: ./configure make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/Makefile.in b/Makefile.in --- a/Makefile.in +++ b/Makefile.in @@ -51,9 +51,9 @@ diff --git a/Makefile.in b/Makefile.in diff --git a/cleanup.c b/cleanup.c --- a/cleanup.c +++ b/cleanup.c -@@ -27,6 +27,9 @@ extern int am_daemon; - extern int am_sender; - extern int am_generator; +@@ -26,6 +26,9 @@ extern int am_server; + extern int am_daemon; + extern int am_receiver; extern int io_error; +#ifdef HAVE_OPENSSL +extern int use_ssl; @@ -61,8 +61,8 @@ diff --git a/cleanup.c b/cleanup.c extern int keep_partial; extern int got_xfer_error; extern int protocol_version; -@@ -136,6 +139,14 @@ NORETURN void _exit_cleanup(int code, const char *file, int line) - code, file, line); +@@ -137,6 +140,14 @@ NORETURN void _exit_cleanup(int code, const char *file, int line) + who_am_i(), code, file, line); } +#ifdef HAVE_OPENSSL @@ -198,7 +198,7 @@ diff --git a/clientserver.c b/clientserver.c diff --git a/configure.in b/configure.in --- a/configure.in +++ b/configure.in -@@ -312,6 +312,21 @@ if test x"$enable_locale" != x"no"; then +@@ -318,6 +318,21 @@ if test x"$enable_locale" != x"no"; then AC_DEFINE(CONFIG_LOCALE) fi @@ -332,7 +332,7 @@ diff --git a/options.c b/options.c {"verbose", 'v', POPT_ARG_NONE, 0, 'v', 0, 0 }, {"no-verbose", 0, POPT_ARG_VAL, &verbose, 0, 0, 0 }, {"no-v", 0, POPT_ARG_VAL, &verbose, 0, 0, 0 }, -@@ -1359,6 +1399,12 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1360,6 +1400,12 @@ int parse_arguments(int *argc_p, const char ***argv_p) verbose++; break; @@ -345,7 +345,7 @@ diff --git a/options.c b/options.c default: rprintf(FERROR, "rsync: %s: %s (in daemon mode)\n", -@@ -1385,6 +1431,17 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1386,6 +1432,17 @@ int parse_arguments(int *argc_p, const char ***argv_p) exit_cleanup(RERR_SYNTAX); } @@ -363,7 +363,7 @@ diff --git a/options.c b/options.c *argv_p = argv = poptGetArgs(pc); *argc_p = argc = count_args(argv); am_starting_up = 0; -@@ -1763,6 +1820,12 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1764,6 +1821,12 @@ int parse_arguments(int *argc_p, const char ***argv_p) return 0; #endif @@ -376,7 +376,7 @@ diff --git a/options.c b/options.c default: /* A large opt value means that set_refuse_options() * turned this option off. */ -@@ -2145,6 +2208,17 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2160,6 +2223,17 @@ int parse_arguments(int *argc_p, const char ***argv_p) if (delay_updates && !partial_dir) partial_dir = tmp_partialdir; @@ -394,7 +394,7 @@ diff --git a/options.c b/options.c if (inplace) { #ifdef HAVE_FTRUNCATE if (partial_dir) { -@@ -2735,9 +2809,18 @@ char *check_for_hostspec(char *s, char **host_ptr, int *port_ptr) +@@ -2750,9 +2824,18 @@ char *check_for_hostspec(char *s, char **host_ptr, int *port_ptr) { char *path; diff --git a/osx-xattr-nodev.diff b/osx-xattr-nodev.diff index c84c1ee..6c8ee62 100644 --- a/osx-xattr-nodev.diff +++ b/osx-xattr-nodev.diff @@ -8,4 +8,4 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/preallocate.diff b/preallocate.diff index c3b54f6..042d983 100644 --- a/preallocate.diff +++ b/preallocate.diff @@ -9,7 +9,7 @@ To use this patch, run these commands for a successful build: ./configure make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/compat.c b/compat.c --- a/compat.c +++ b/compat.c @@ -39,7 +39,7 @@ diff --git a/compat.c b/compat.c diff --git a/configure.in b/configure.in --- a/configure.in +++ b/configure.in -@@ -583,13 +583,49 @@ AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \ +@@ -589,13 +589,49 @@ AC_CHECK_FUNCS(waitpid wait4 getcwd strdup chown chmod lchmod mknod mkfifo \ setlocale setmode open64 lseek64 mkstemp64 mtrace va_copy __va_copy \ seteuid strerror putenv iconv_open locale_charset nl_langinfo getxattr \ extattr_get_link sigaction sigprocmask setattrlist getgrouplist \ @@ -150,7 +150,7 @@ diff --git a/options.c b/options.c {"inplace", 0, POPT_ARG_VAL, &inplace, 1, 0, 0 }, {"no-inplace", 0, POPT_ARG_VAL, &inplace, 0, 0, 0 }, {"append", 0, POPT_ARG_NONE, 0, OPT_APPEND, 0, 0 }, -@@ -2646,6 +2657,9 @@ void server_options(char **args, int *argc_p) +@@ -2661,6 +2672,9 @@ void server_options(char **args, int *argc_p) else if (remove_source_files) args[ac++] = "--remove-sent-files"; diff --git a/slow-down.diff b/slow-down.diff index de149d0..ba38499 100644 --- a/slow-down.diff +++ b/slow-down.diff @@ -14,11 +14,11 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c -@@ -70,6 +70,7 @@ extern int sender_symlink_iconv; +@@ -72,6 +72,7 @@ extern int sender_symlink_iconv; extern int output_needs_newline; extern int sender_keeps_checksum; extern int unsort_ndx; @@ -26,7 +26,7 @@ diff --git a/flist.c b/flist.c extern struct stats stats; extern char *filesfrom_host; extern char *usermap, *groupmap; -@@ -1752,6 +1753,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len, +@@ -1754,6 +1755,9 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len, } send_file_name(f, flist, fbuf, NULL, flags, filter_level); diff --git a/slp.diff b/slp.diff index 492939e..e81fb8b 100644 --- a/slp.diff +++ b/slp.diff @@ -10,7 +10,7 @@ To use this patch, run these commands for a successful build: TODO: the configure changes should abort if the user requests --enable-slp and we can't honor that request. -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/Makefile.in b/Makefile.in --- a/Makefile.in +++ b/Makefile.in @@ -61,7 +61,7 @@ diff --git a/clientserver.c b/clientserver.c diff --git a/configure.in b/configure.in --- a/configure.in +++ b/configure.in -@@ -677,6 +677,29 @@ if test $rsync_cv_can_hardlink_special = yes; then +@@ -683,6 +683,29 @@ if test $rsync_cv_can_hardlink_special = yes; then AC_DEFINE(CAN_HARDLINK_SPECIAL, 1, [Define to 1 if link() can hard-link special files.]) fi @@ -127,7 +127,7 @@ diff --git a/loadparm.c b/loadparm.c diff --git a/main.c b/main.c --- a/main.c +++ b/main.c -@@ -1222,6 +1222,18 @@ static int start_client(int argc, char *argv[]) +@@ -1238,6 +1238,18 @@ static int start_client(int argc, char *argv[]) if (!read_batch) { /* for read_batch, NO source is specified */ char *path = check_for_hostspec(argv[0], &shell_machine, &rsync_port); diff --git a/soften-links.diff b/soften-links.diff index 1e99f0e..42547cb 100644 --- a/soften-links.diff +++ b/soften-links.diff @@ -10,7 +10,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/syscall.c b/syscall.c --- a/syscall.c +++ b/syscall.c diff --git a/source-backup.diff b/source-backup.diff index 0ed2653..4fa8937 100644 --- a/source-backup.diff +++ b/source-backup.diff @@ -9,7 +9,7 @@ To use this patch, run these commands for a successful build: -- Matt McCutchen -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/options.c b/options.c --- a/options.c +++ b/options.c @@ -37,7 +37,7 @@ diff --git a/options.c b/options.c {"no-backup", 0, POPT_ARG_VAL, &make_backups, 0, 0, 0 }, {"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 }, {"suffix", 0, POPT_ARG_STRING, &backup_suffix, 0, 0, 0 }, -@@ -2521,6 +2524,8 @@ void server_options(char **args, int *argc_p) +@@ -2536,6 +2539,8 @@ void server_options(char **args, int *argc_p) goto oom; args[ac++] = arg; } @@ -83,7 +83,7 @@ diff --git a/sender.c b/sender.c extern int inplace; extern int batch_fd; extern int write_batch; -@@ -125,6 +126,7 @@ void successful_send(int ndx) +@@ -126,6 +127,7 @@ void successful_send(int ndx) char fname[MAXPATHLEN]; struct file_struct *file; struct file_list *flist; @@ -91,7 +91,7 @@ diff --git a/sender.c b/sender.c if (!remove_source_files) return; -@@ -135,7 +137,11 @@ void successful_send(int ndx) +@@ -136,7 +138,11 @@ void successful_send(int ndx) return; f_name(file, fname); diff --git a/source-filter_dest-filter.diff b/source-filter_dest-filter.diff index 65f77cd..d0d67bf 100644 --- a/source-filter_dest-filter.diff +++ b/source-filter_dest-filter.diff @@ -30,7 +30,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c @@ -42,7 +42,7 @@ diff --git a/generator.c b/generator.c extern int size_only; extern OFF_T max_size; extern OFF_T min_size; -@@ -524,7 +525,7 @@ void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre +@@ -523,7 +524,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) { @@ -54,7 +54,7 @@ diff --git a/generator.c b/generator.c diff --git a/main.c b/main.c --- a/main.c +++ b/main.c -@@ -149,7 +149,7 @@ pid_t wait_process(pid_t pid, int *status_ptr, int flags) +@@ -153,7 +153,7 @@ pid_t wait_process(pid_t pid, int *status_ptr, int flags) } /* Wait for a process to exit, calling io_flush while waiting. */ @@ -117,7 +117,7 @@ diff --git a/options.c b/options.c {"remote-option", 'M', POPT_ARG_STRING, 0, 'M', 0, 0 }, {"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 }, {"checksum-seed", 0, POPT_ARG_INT, &checksum_seed, 0, 0, 0 }, -@@ -2186,6 +2195,16 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2201,6 +2210,16 @@ int parse_arguments(int *argc_p, const char ***argv_p) } } @@ -134,7 +134,7 @@ diff --git a/options.c b/options.c if (files_from) { char *h, *p; int q; -@@ -2530,6 +2549,25 @@ void server_options(char **args, int *argc_p) +@@ -2545,6 +2564,25 @@ void server_options(char **args, int *argc_p) else if (missing_args == 1 && !am_sender) args[ac++] = "--ignore-missing-args"; @@ -343,7 +343,7 @@ diff --git a/rsync.yo b/rsync.yo --protocol=NUM force an older protocol version to be used --iconv=CONVERT_SPEC request charset conversion of filenames --checksum-seed=NUM set block/file checksum seed (advanced) -@@ -2321,6 +2324,33 @@ file previously generated by bf(--write-batch). +@@ -2335,6 +2338,33 @@ file previously generated by bf(--write-batch). If em(FILE) is bf(-), the batch data will be read from standard input. See the "BATCH MODE" section for details. @@ -385,10 +385,10 @@ diff --git a/sender.c b/sender.c extern int write_batch; extern int file_old_total; +extern char *source_filter; + extern BOOL we_send_keepalive_messages; extern struct stats stats; extern struct file_list *cur_flist, *first_flist, *dir_flist; - -@@ -177,6 +178,26 @@ void send_files(int f_in, int f_out) +@@ -178,6 +179,26 @@ void send_files(int f_in, int f_out) int f_xfer = write_batch < 0 ? batch_fd : f_out; int save_io_error = io_error; int ndx, j; @@ -415,7 +415,7 @@ diff --git a/sender.c b/sender.c if (DEBUG_GTE(SEND, 1)) rprintf(FINFO, "send_files starting\n"); -@@ -310,6 +331,7 @@ void send_files(int f_in, int f_out) +@@ -311,6 +332,7 @@ void send_files(int f_in, int f_out) exit_cleanup(RERR_PROTOCOL); } @@ -423,7 +423,7 @@ diff --git a/sender.c b/sender.c fd = do_open(fname, O_RDONLY, 0); if (fd == -1) { if (errno == ENOENT) { -@@ -331,6 +353,33 @@ void send_files(int f_in, int f_out) +@@ -332,6 +354,33 @@ void send_files(int f_in, int f_out) continue; } @@ -457,7 +457,7 @@ diff --git a/sender.c b/sender.c /* map the local file */ if (do_fstat(fd, &st) != 0) { io_error |= IOERR_GENERAL; -@@ -381,6 +430,8 @@ void send_files(int f_in, int f_out) +@@ -382,6 +431,8 @@ void send_files(int f_in, int f_out) } } close(fd); diff --git a/sparse-block.diff b/sparse-block.diff index 5dbbe34..b82df27 100644 --- a/sparse-block.diff +++ b/sparse-block.diff @@ -18,7 +18,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/fileio.c b/fileio.c --- a/fileio.c +++ b/fileio.c @@ -66,7 +66,7 @@ diff --git a/options.c b/options.c {"inplace", 0, POPT_ARG_VAL, &inplace, 1, 0, 0 }, {"no-inplace", 0, POPT_ARG_VAL, &inplace, 0, 0, 0 }, {"append", 0, POPT_ARG_NONE, 0, OPT_APPEND, 0, 0 }, -@@ -2453,6 +2456,12 @@ void server_options(char **args, int *argc_p) +@@ -2468,6 +2471,12 @@ void server_options(char **args, int *argc_p) args[ac++] = arg; } diff --git a/stdout.diff b/stdout.diff index 31289fa..d5fcc8d 100644 --- a/stdout.diff +++ b/stdout.diff @@ -7,7 +7,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/options.c b/options.c --- a/options.c +++ b/options.c @@ -35,7 +35,7 @@ diff --git a/options.c b/options.c {"remote-option", 'M', POPT_ARG_STRING, 0, 'M', 0, 0 }, {"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 }, {"checksum-seed", 0, POPT_ARG_INT, &checksum_seed, 0, 0, 0 }, -@@ -1778,6 +1781,13 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1793,6 +1796,13 @@ int parse_arguments(int *argc_p, const char ***argv_p) } } diff --git a/time-limit.diff b/time-limit.diff index 3548942..1ec9c19 100644 --- a/time-limit.diff +++ b/time-limit.diff @@ -9,7 +9,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/io.c b/io.c --- a/io.c +++ b/io.c @@ -21,34 +21,27 @@ diff --git a/io.c b/io.c extern struct file_list *cur_flist; #ifdef ICONV_OPTION extern int filesfrom_convert; -@@ -154,16 +155,24 @@ static void check_timeout(void) - { - time_t t; +@@ -161,11 +162,19 @@ static void check_timeout(BOOL allow_keepalive) + * the receiver ignores them. Note that the am_receiver flag is not + * set until the receiver forks from the generator, so timeouts will be + * based on receiving data on the receiving side until that event. */ +- if (!io_timeout || am_receiver) ++ if ((!io_timeout || am_receiver) && !stop_at_utime) + return; + + t = time(NULL); -+ if ((!io_timeout || ignore_timeout) && !stop_at_utime) -+ return; -+ -+ t = time(NULL); -+ + if (stop_at_utime && t >= stop_at_utime) { + rprintf(FERROR, "run-time limit exceeded\n"); + exit_cleanup(RERR_TIMEOUT); + } + - if (!io_timeout || ignore_timeout) - return; - - if (!last_io_in) { -- last_io_in = time(NULL); -+ last_io_in = t; - return; - } - -- t = time(NULL); -- - if (t - last_io_in >= io_timeout) { - if (!am_server && !am_daemon) { - rprintf(FERROR, "io timeout after %d seconds -- exiting\n", ++ if (!io_timeout || am_receiver) ++ return; ++ + if (allow_keepalive && we_send_keepalive_messages) { + /* This may put data into iobuf.msg w/o flushing. */ + maybe_send_keepalive(t, False); diff --git a/options.c b/options.c --- a/options.c +++ b/options.c @@ -86,7 +79,7 @@ diff --git a/options.c b/options.c {"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 }, {"rsync-path", 0, POPT_ARG_STRING, &rsync_path, 0, 0, 0 }, {"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 }, -@@ -1763,6 +1769,36 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1764,6 +1770,36 @@ int parse_arguments(int *argc_p, const char ***argv_p) return 0; #endif @@ -123,7 +116,7 @@ diff --git a/options.c b/options.c default: /* A large opt value means that set_refuse_options() * turned this option off. */ -@@ -2465,6 +2501,15 @@ void server_options(char **args, int *argc_p) +@@ -2480,6 +2516,15 @@ void server_options(char **args, int *argc_p) args[ac++] = arg; } @@ -151,7 +144,7 @@ diff --git a/rsync.yo b/rsync.yo --write-batch=FILE write a batched update to FILE --only-write-batch=FILE like --write-batch but w/o updating dest --read-batch=FILE read a batched update from FILE -@@ -2295,6 +2297,19 @@ files can show up as being rapidly sent when the data is quickly buffered, +@@ -2309,6 +2311,19 @@ files can show up as being rapidly sent when the data is quickly buffered, while other can show up as very slow when the flushing of the output buffer occurs. This may be fixed in a future version. diff --git a/transliterate.diff b/transliterate.diff index 77f9ed8..2dc0e8b 100644 --- a/transliterate.diff +++ b/transliterate.diff @@ -13,11 +13,11 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/flist.c b/flist.c --- a/flist.c +++ b/flist.c -@@ -86,6 +86,9 @@ extern int filesfrom_convert; +@@ -88,6 +88,9 @@ extern int filesfrom_convert; extern iconv_t ic_send, ic_recv; #endif @@ -27,7 +27,7 @@ diff --git a/flist.c b/flist.c #ifdef HAVE_UTIMENSAT #ifdef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC #define ST_MTIME_NSEC st_mtim.tv_nsec -@@ -673,6 +676,24 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, +@@ -675,6 +678,24 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, stats.total_size += F_LENGTH(file); } @@ -52,7 +52,7 @@ diff --git a/flist.c b/flist.c static struct file_struct *recv_file_entry(int f, struct file_list *flist, int xflags) { static int64 modtime; -@@ -741,6 +762,9 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x +@@ -743,6 +764,9 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x } #endif @@ -90,7 +90,7 @@ diff --git a/options.c b/options.c {"ipv4", '4', POPT_ARG_VAL, &default_af_hint, AF_INET, 0, 0 }, {"ipv6", '6', POPT_ARG_VAL, &default_af_hint, AF_INET6, 0, 0 }, {"8-bit-output", '8', POPT_ARG_VAL, &allow_8bit_chars, 1, 0, 0 }, -@@ -2232,6 +2236,31 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -2247,6 +2251,31 @@ int parse_arguments(int *argc_p, const char ***argv_p) } } @@ -122,7 +122,7 @@ diff --git a/options.c b/options.c am_starting_up = 0; return 1; -@@ -2646,6 +2675,12 @@ void server_options(char **args, int *argc_p) +@@ -2661,6 +2690,12 @@ void server_options(char **args, int *argc_p) else if (remove_source_files) args[ac++] = "--remove-sent-files"; @@ -146,7 +146,7 @@ diff --git a/rsync.yo b/rsync.yo --checksum-seed=NUM set block/file checksum seed (advanced) -4, --ipv4 prefer IPv4 -6, --ipv6 prefer IPv6 -@@ -2359,6 +2360,22 @@ daemon uses the charset specified in its "charset" configuration parameter +@@ -2373,6 +2374,22 @@ daemon uses the charset specified in its "charset" configuration parameter regardless of the remote charset you actually pass. Thus, you may feel free to specify just the local charset for a daemon transfer (e.g. bf(--iconv=utf8)). diff --git a/tru64.diff b/tru64.diff index 869ae19..a2dac69 100644 --- a/tru64.diff +++ b/tru64.diff @@ -6,7 +6,7 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/syscall.c b/syscall.c --- a/syscall.c +++ b/syscall.c diff --git a/write-devices.diff b/write-devices.diff index dddd37a..5281fb7 100644 --- a/write-devices.diff +++ b/write-devices.diff @@ -10,7 +10,7 @@ To use this patch, run these commands for a successful build: This patch has not yet been tested by me (Wayne), but was provided Darryl Dixon. Thanks! -based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d +based-on: a01e3b490eb36ccf9e704840e1b6683dab867550 diff --git a/generator.c b/generator.c --- a/generator.c +++ b/generator.c @@ -22,7 +22,7 @@ diff --git a/generator.c b/generator.c extern int preserve_specials; extern int preserve_hard_links; extern int preserve_executability; -@@ -1533,7 +1534,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, +@@ -1532,7 +1533,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, fnamecmp = fname; fnamecmp_type = FNAMECMP_FNAME; @@ -58,7 +58,7 @@ diff --git a/options.c b/options.c {"specials", 0, POPT_ARG_VAL, &preserve_specials, 1, 0, 0 }, {"no-specials", 0, POPT_ARG_VAL, &preserve_specials, 0, 0, 0 }, {"links", 'l', POPT_ARG_VAL, &preserve_links, 1, 0, 0 }, -@@ -1763,6 +1766,11 @@ int parse_arguments(int *argc_p, const char ***argv_p) +@@ -1764,6 +1767,11 @@ int parse_arguments(int *argc_p, const char ***argv_p) return 0; #endif @@ -70,7 +70,7 @@ diff --git a/options.c b/options.c default: /* A large opt value means that set_refuse_options() * turned this option off. */ -@@ -2646,6 +2654,9 @@ void server_options(char **args, int *argc_p) +@@ -2661,6 +2669,9 @@ void server_options(char **args, int *argc_p) else if (remove_source_files) args[ac++] = "--remove-sent-files"; diff --git a/xattrs.diff b/xattrs.diff index 635d852..422f4e3 100644 --- a/xattrs.diff +++ b/xattrs.diff @@ -10,11 +10,11 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make -based-on: patch/acls +based-on: patch/master/acls diff --git a/compat.c b/compat.c --- a/compat.c +++ b/compat.c -@@ -189,13 +189,6 @@ void setup_protocol(int f_out,int f_in) +@@ -191,13 +191,6 @@ void setup_protocol(int f_out,int f_in) if (protocol_version < 30) { if (append_mode == 1) append_mode = 2;