./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/acls.c b/acls.c
--- a/acls.c
+++ b/acls.c
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -222,13 +222,6 @@ void setup_protocol(int f_out,int f_in)
+@@ -457,13 +457,6 @@ void setup_protocol(int f_out,int f_in)
if (protocol_version < 30) {
if (append_mode == 1)
append_mode = 2;
Fix a bug that could lose some bits when stripping some (supposedly)
superfluous ACL info.
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/lib/sysacls.c b/lib/sysacls.c
--- a/lib/sysacls.c
+++ b/lib/sysacls.c
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -692,6 +692,7 @@ void usage(enum logcode F)
+@@ -693,6 +693,7 @@ void usage(enum logcode F)
rprintf(F," -R, --relative use relative path names\n");
rprintf(F," --no-implied-dirs don't send implied dirs with --relative\n");
rprintf(F," -b, --backup make backups (see --suffix & --backup-dir)\n");
rprintf(F," --backup-dir=DIR make backups into hierarchy based in DIR\n");
rprintf(F," --suffix=SUFFIX set backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
rprintf(F," -u, --update skip files that are newer on the receiver\n");
-@@ -1019,7 +1020,8 @@ static struct poptOption long_options[] = {
+@@ -1020,7 +1021,8 @@ static struct poptOption long_options[] = {
{"no-i", 0, POPT_ARG_VAL, &itemize_changes, 0, 0, 0 },
{"bwlimit", 0, POPT_ARG_STRING, &bwlimit_arg, OPT_BWLIMIT, 0, 0 },
{"no-bwlimit", 0, POPT_ARG_VAL, &bwlimit, 0, 0, 0 },
{"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 },
-@@ -2750,6 +2752,10 @@ void server_options(char **args, int *argc_p)
+@@ -2751,6 +2753,10 @@ void server_options(char **args, int *argc_p)
}
if (am_sender) {
char *sockopts = NULL;
char *usermap = NULL;
char *groupmap = NULL;
-@@ -695,6 +701,8 @@ void usage(enum logcode F)
+@@ -696,6 +702,8 @@ void usage(enum logcode F)
rprintf(F," --backup-deleted make backups only of deleted files\n");
rprintf(F," --backup-dir=DIR make backups into hierarchy based in DIR\n");
rprintf(F," --suffix=SUFFIX set backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
rprintf(F," -u, --update skip files that are newer on the receiver\n");
rprintf(F," --inplace update destination files in-place (SEE MAN PAGE)\n");
rprintf(F," --append append data onto shorter files\n");
-@@ -1024,7 +1032,9 @@ static struct poptOption long_options[] = {
+@@ -1025,7 +1033,9 @@ static struct poptOption long_options[] = {
{"backup-deleted", 0, POPT_ARG_VAL, &make_backups, 1, 0, 0 },
{"no-backup", 0, POPT_ARG_VAL, &make_backups, 0, 0, 0 },
{"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 },
{"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 },
-@@ -2227,6 +2237,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2228,6 +2238,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);
}
if (daemon_filter_list.head && !am_sender) {
filter_rule_list *elp = &daemon_filter_list;
-@@ -2248,6 +2260,14 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2249,6 +2261,14 @@ int parse_arguments(int *argc_p, const char ***argv_p)
if (check_filter(elp, FLOG, dir, 1) < 0)
goto options_rejected;
}
}
if (!backup_suffix)
-@@ -2259,6 +2279,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2260,6 +2280,20 @@ int parse_arguments(int *argc_p, const char ***argv_p)
backup_suffix);
return 0;
}
if (backup_dir) {
size_t len;
while (*backup_dir == '.' && backup_dir[1] == '/')
-@@ -2294,6 +2328,34 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2295,6 +2329,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);
}
if (preserve_times) {
preserve_times = PRESERVE_FILE_TIMES;
-@@ -2736,6 +2798,10 @@ void server_options(char **args, int *argc_p)
+@@ -2737,6 +2799,10 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--backup-dir";
args[ac++] = backup_dir;
}
/* Only send --suffix if it specifies a non-default value. */
if (strcmp(backup_suffix, backup_dir ? "" : BACKUP_SUFFIX) != 0) {
-@@ -2744,6 +2810,14 @@ void server_options(char **args, int *argc_p)
+@@ -2745,6 +2811,14 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
int max_delete = INT_MIN;
OFF_T max_size = -1;
OFF_T min_size = -1;
-@@ -686,6 +687,7 @@ void usage(enum logcode F)
+@@ -687,6 +688,7 @@ void usage(enum logcode F)
rprintf(F," -q, --quiet suppress non-error messages\n");
rprintf(F," --no-motd suppress daemon-mode MOTD (see manpage caveat)\n");
rprintf(F," -c, --checksum skip based on checksum, not mod-time & size\n");
rprintf(F," -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)\n");
rprintf(F," --no-OPTION turn off an implied OPTION (e.g. --no-D)\n");
rprintf(F," -r, --recursive recurse into directories\n");
-@@ -837,7 +839,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -838,7 +840,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_FILTER, OPT_COMPARE_DEST, OPT_COPY_DEST, OPT_LINK_DEST, OPT_HELP,
OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
OPT_SERVER, OPT_REFUSED_BASE = 9000};
-@@ -985,6 +987,7 @@ static struct poptOption long_options[] = {
+@@ -986,6 +988,7 @@ static struct poptOption long_options[] = {
{"checksum", 'c', POPT_ARG_VAL, &always_checksum, 1, 0, 0 },
{"no-checksum", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 },
{"no-c", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 },
{"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 },
-@@ -1792,6 +1795,23 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1793,6 +1796,23 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
break;
case OPT_INFO:
arg = poptGetOptArg(pc);
parse_output_words(info_words, info_levels, arg, USER_PRIORITY);
-@@ -2072,6 +2092,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2073,6 +2093,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
#endif
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -1797,7 +1797,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1798,7 +1798,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
case OPT_SUMFILES:
arg = poptGetOptArg(pc);
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/loadparm.c b/loadparm.c
--- a/loadparm.c
+++ b/loadparm.c
int remove_source_files = 0;
int one_file_system = 0;
int protocol_version = PROTOCOL_VERSION;
-@@ -798,6 +800,8 @@ void usage(enum logcode F)
+@@ -799,6 +801,8 @@ void usage(enum logcode F)
rprintf(F," --address=ADDRESS bind address for outgoing socket to daemon\n");
rprintf(F," --port=PORT specify double-colon alternate port number\n");
rprintf(F," --sockopts=OPTIONS specify custom TCP options\n");
rprintf(F," --blocking-io use blocking I/O for the remote shell\n");
rprintf(F," --stats give some file-transfer stats\n");
rprintf(F," -8, --8-bit-output leave high-bit chars unescaped in output\n");
-@@ -1067,6 +1071,8 @@ static struct poptOption long_options[] = {
+@@ -1068,6 +1072,8 @@ static struct poptOption long_options[] = {
#endif
{"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 },
{"server", 0, POPT_ARG_NONE, 0, OPT_SERVER, 0, 0 },
{"sender", 0, POPT_ARG_NONE, 0, OPT_SENDER, 0, 0 },
-@@ -1094,6 +1100,8 @@ static void daemon_usage(enum logcode F)
+@@ -1095,6 +1101,8 @@ static void daemon_usage(enum logcode F)
rprintf(F," --log-file=FILE override the \"log file\" setting\n");
rprintf(F," --log-file-format=FMT override the \"log format\" setting\n");
rprintf(F," --sockopts=OPTIONS specify custom TCP options\n");
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int write_devices = 0;
int preserve_links = 0;
int preserve_hard_links = 0;
-@@ -719,6 +720,7 @@ void usage(enum logcode F)
+@@ -720,6 +721,7 @@ void usage(enum logcode F)
rprintf(F," -o, --owner preserve owner (super-user only)\n");
rprintf(F," -g, --group preserve group\n");
rprintf(F," --devices preserve device files (super-user only)\n");
rprintf(F," --specials preserve special files\n");
rprintf(F," -D same as --devices --specials\n");
rprintf(F," -t, --times preserve modification times\n");
-@@ -910,6 +912,7 @@ static struct poptOption long_options[] = {
+@@ -911,6 +913,7 @@ static struct poptOption long_options[] = {
{"no-D", 0, POPT_ARG_NONE, 0, OPT_NO_D, 0, 0 },
{"devices", 0, POPT_ARG_VAL, &preserve_devices, 1, 0, 0 },
{"no-devices", 0, POPT_ARG_VAL, &preserve_devices, 0, 0, 0 },
{"write-devices", 0, POPT_ARG_VAL, &write_devices, 1, 0, 0 },
{"no-write-devices", 0, POPT_ARG_VAL, &write_devices, 0, 0, 0 },
{"specials", 0, POPT_ARG_VAL, &preserve_specials, 1, 0, 0 },
-@@ -2918,6 +2921,9 @@ void server_options(char **args, int *argc_p)
+@@ -2919,6 +2922,9 @@ void server_options(char **args, int *argc_p)
else if (remove_source_files)
args[ac++] = "--remove-sent-files";
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -52,6 +52,7 @@ extern int protect_args;
+@@ -43,6 +43,7 @@ extern int protect_args;
extern int preserve_uid;
extern int preserve_gid;
extern int preserve_atimes;
extern int preserve_acls;
extern int preserve_xattrs;
extern int preserve_fileflags;
-@@ -73,7 +74,7 @@ extern char *iconv_opt;
- extern const char *negotiated_csum_name;
+@@ -78,7 +79,7 @@ int inplace_partial = 0;
+ int do_negotiated_strings = 0;
/* These index values are for the file-list's extra-attribute array. */
-int pathname_ndx, depth_ndx, atimes_ndx, uid_ndx, gid_ndx, fileflags_ndx, acls_ndx, xattrs_ndx, unsort_ndx;
int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
int sender_symlink_iconv = 0; /* sender should convert symlink content */
-@@ -155,6 +156,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -390,6 +391,8 @@ void setup_protocol(int f_out,int f_in)
* aligned for direct int64-pointer memory access. */
if (preserve_atimes)
atimes_ndx = (file_extra_cnt += EXTRA64_CNT);
if (am_sender) /* This is most likely in the in64 union as well. */
pathname_ndx = (file_extra_cnt += PTR_EXTRA_CNT);
else
-@@ -320,6 +323,10 @@ void setup_protocol(int f_out,int f_in)
+@@ -555,6 +558,10 @@ void setup_protocol(int f_out,int f_in)
want_xattr_optim = protocol_version >= 31 && !(compat_flags & CF_AVOID_XATTR_OPTIM);
proper_seed_order = compat_flags & CF_CHKSUM_SEED_FIX ? 1 : 0;
xfer_flags_as_varint = compat_flags & CF_VARINT_FLIST_FLAGS ? 1 : 0;
int update_only = 0;
int open_noatime = 0;
int cvs_exclude = 0;
-@@ -584,6 +585,7 @@ static void print_rsync_version(enum logcode f)
+@@ -585,6 +586,7 @@ static void print_rsync_version(enum logcode f)
char const *simd = "no ";
char const *xxhash = "no ";
char const *fileflags = "no ";
STRUCT_STAT *dumstat;
#if SUBPROTOCOL_VERSION != 0
-@@ -629,6 +631,9 @@ static void print_rsync_version(enum logcode f)
+@@ -630,6 +632,9 @@ static void print_rsync_version(enum logcode f)
#ifdef SUPPORT_FILEFLAGS
fileflags = "";
#endif
rprintf(f, "%s version %s protocol version %d%s\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-@@ -644,8 +649,8 @@ static void print_rsync_version(enum logcode f)
+@@ -645,8 +650,8 @@ static void print_rsync_version(enum logcode f)
got_socketpair, hardlinks, links, ipv6, have_inplace);
rprintf(f, " %sappend, %sACLs, %sxattrs, %siconv, %ssymtimes, %sprealloc, %sSIMD, %sxxhash,\n",
have_inplace, acls, xattrs, iconv, symtimes, prealloc, simd, xxhash);
#ifdef MAINTAINER_MODE
rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
-@@ -735,6 +740,9 @@ void usage(enum logcode F)
+@@ -736,6 +741,9 @@ void usage(enum logcode F)
rprintf(F," -t, --times preserve modification times\n");
rprintf(F," -U, --atimes preserve access (last-used) times\n");
rprintf(F," --open-noatime avoid changing the atime on opened files\n");
rprintf(F," -O, --omit-dir-times omit directories from --times\n");
rprintf(F," -J, --omit-link-times omit symlinks from --times\n");
rprintf(F," --super receiver attempts super-user activities\n");
-@@ -910,6 +918,11 @@ static struct poptOption long_options[] = {
+@@ -911,6 +919,11 @@ static struct poptOption long_options[] = {
{"no-U", 0, POPT_ARG_VAL, &preserve_atimes, 0, 0, 0 },
{"open-noatime", 0, POPT_ARG_VAL, &open_noatime, 1, 0, 0 },
{"no-open-noatime", 0, POPT_ARG_VAL, &open_noatime, 0, 0, 0 },
{"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 },
-@@ -2608,6 +2621,10 @@ void server_options(char **args, int *argc_p)
+@@ -2609,6 +2622,10 @@ void server_options(char **args, int *argc_p)
if (preserve_atimes > 1)
argstr[x++] = 'U';
}
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int daemon_bwlimit = 0;
int bwlimit = 0;
int fuzzy_basis = 0;
-@@ -774,6 +775,7 @@ void usage(enum logcode F)
+@@ -775,6 +776,7 @@ void usage(enum logcode F)
rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n");
rprintf(F," -M, --remote-option=OPTION send OPTION to the remote side only\n");
rprintf(F," --size-only skip files that match in size\n");
rprintf(F," -@, --modify-window=NUM set the accuracy for mod-time comparisons\n");
rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n");
-@@ -937,6 +939,7 @@ static struct poptOption long_options[] = {
+@@ -938,6 +940,7 @@ static struct poptOption long_options[] = {
{"chmod", 0, POPT_ARG_STRING, 0, OPT_CHMOD, 0, 0 },
{"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 },
{"size-only", 0, POPT_ARG_NONE, &size_only, 0, 0, 0 },
{"one-file-system", 'x', POPT_ARG_NONE, 0, 'x', 0, 0 },
{"no-one-file-system",0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 },
{"no-x", 0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 },
-@@ -2801,6 +2804,9 @@ void server_options(char **args, int *argc_p)
+@@ -2802,6 +2805,9 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
./configure
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
extern char *checksum_choice;
#define CSUM_NONE 0
-@@ -454,6 +455,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -310,6 +311,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
MD5_Update(&m5, (uchar *)map_ptr(buf, i, remainder), remainder);
MD5_Final((uchar *)sum, &m5);
break;
}
case CSUM_MD4:
-@@ -493,6 +496,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -349,6 +352,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
mdfour_update(&m, (uchar *)map_ptr(buf, i, remainder), remainder);
mdfour_result(&m, (uchar *)sum);
int keep_partial = 0;
int safe_symlinks = 0;
@@ -277,6 +282,7 @@ static struct output_struct debug_words[COUNT_DEBUG+1] = {
+ DEBUG_WORD(CHDIR, W_CLI|W_SRV, "Debug when the current directory changes"),
DEBUG_WORD(CONNECT, W_CLI, "Debug connection events (levels 1-2)"),
DEBUG_WORD(CMD, W_CLI, "Debug commands+options that are issued (levels 1-2)"),
- DEBUG_WORD(CSUM, W_CLI|W_SRV, "Debug checksum negotiation"),
+ DEBUG_WORD(DB, W_SND|W_REC, "Debug DB operations (levels 1-5)"),
DEBUG_WORD(DEL, W_REC, "Debug delete actions (levels 1-3)"),
DEBUG_WORD(DELTASUM, W_SND|W_REC, "Debug delta-transfer checksumming (levels 1-4)"),
DEBUG_WORD(DUP, W_REC, "Debug weeding of duplicate names"),
-@@ -581,6 +587,7 @@ static void print_rsync_version(enum logcode f)
+@@ -582,6 +588,7 @@ static void print_rsync_version(enum logcode f)
char const *ipv6 = "no ";
char const *simd = "no ";
char const *xxhash = "no ";
STRUCT_STAT *dumstat;
#if SUBPROTOCOL_VERSION != 0
-@@ -623,6 +630,12 @@ static void print_rsync_version(enum logcode f)
+@@ -624,6 +631,12 @@ static void print_rsync_version(enum logcode f)
#ifdef SUPPORT_XXHASH
xxhash = "";
#endif
rprintf(f, "%s version %s protocol version %d%s\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-@@ -636,8 +649,10 @@ static void print_rsync_version(enum logcode f)
+@@ -637,8 +650,10 @@ static void print_rsync_version(enum logcode f)
(int)(sizeof (int64) * 8));
rprintf(f, " %ssocketpairs, %shardlinks, %ssymlinks, %sIPv6, batchfiles, %sinplace,\n",
got_socketpair, hardlinks, links, ipv6, have_inplace);
#ifdef MAINTAINER_MODE
rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
-@@ -686,6 +701,9 @@ void usage(enum logcode F)
+@@ -687,6 +702,9 @@ void usage(enum logcode F)
rprintf(F," -q, --quiet suppress non-error messages\n");
rprintf(F," --no-motd suppress daemon-mode MOTD (see manpage caveat)\n");
rprintf(F," -c, --checksum skip based on checksum, not mod-time & size\n");
rprintf(F," -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)\n");
rprintf(F," --no-OPTION turn off an implied OPTION (e.g. --no-D)\n");
rprintf(F," -r, --recursive recurse into directories\n");
-@@ -838,6 +856,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -839,6 +857,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG,
OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
OPT_SERVER, OPT_REFUSED_BASE = 9000};
-@@ -985,6 +1004,10 @@ static struct poptOption long_options[] = {
+@@ -986,6 +1005,10 @@ static struct poptOption long_options[] = {
{"checksum", 'c', POPT_ARG_VAL, &always_checksum, 1, 0, 0 },
{"no-checksum", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 },
{"no-c", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 },
{"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 },
-@@ -1076,6 +1099,9 @@ static struct poptOption long_options[] = {
+@@ -1077,6 +1100,9 @@ static struct poptOption long_options[] = {
{"dparam", 0, POPT_ARG_STRING, 0, OPT_DAEMON, 0, 0 },
{"detach", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 },
{"no-detach", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 },
{0,0,0,0, 0, 0, 0}
};
-@@ -1129,6 +1155,50 @@ static struct poptOption long_daemon_options[] = {
+@@ -1130,6 +1156,50 @@ static struct poptOption long_daemon_options[] = {
{0,0,0,0, 0, 0, 0}
};
static char err_buf[200];
-@@ -1252,6 +1322,8 @@ static void set_refuse_options(void)
+@@ -1253,6 +1323,8 @@ static void set_refuse_options(void)
parse_one_refuse_match(0, "iconv", list_end);
#endif
parse_one_refuse_match(0, "log-file*", list_end);
}
/* Now we use the descrip values to actually mark the options for refusal. */
-@@ -1376,6 +1448,102 @@ static void create_refuse_error(int which)
+@@ -1377,6 +1449,102 @@ static void create_refuse_error(int which)
}
}
/* This is used to make sure that --daemon & --server cannot be aliased to
* something else. These options have always disabled popt aliases for the
* parsing of a daemon or server command-line, but we have to make sure that
-@@ -1414,6 +1582,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1415,6 +1583,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
return 0;
}
set_refuse_options();
#ifdef ICONV_OPTION
-@@ -1535,6 +1709,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1536,6 +1710,12 @@ int parse_arguments(int *argc_p, const char ***argv_p)
am_daemon = 1;
return 1;
case OPT_MODIFY_WINDOW:
/* The value has already been set by popt, but
* we need to remember that we're using a
-@@ -1609,6 +1789,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1610,6 +1790,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
preserve_devices = preserve_specials = 0;
break;
#define NDX_DONE -1
#define NDX_FLIST_EOF -2
#define NDX_DEL_STATS -3
-@@ -1318,7 +1322,8 @@ extern short info_levels[], debug_levels[];
+@@ -1330,7 +1334,8 @@ extern short info_levels[], debug_levels[];
+ #define DEBUG_CHDIR (DEBUG_BIND+1)
#define DEBUG_CONNECT (DEBUG_CHDIR+1)
#define DEBUG_CMD (DEBUG_CONNECT+1)
- #define DEBUG_CSUM (DEBUG_CMD+1)
--#define DEBUG_DEL (DEBUG_CSUM+1)
-+#define DEBUG_DB (DEBUG_CSUM+1)
+-#define DEBUG_DEL (DEBUG_CMD+1)
++#define DEBUG_DB (DEBUG_CMD+1)
+#define DEBUG_DEL (DEBUG_DB+1)
#define DEBUG_DELTASUM (DEBUG_DEL+1)
#define DEBUG_DUP (DEBUG_DELTASUM+1)
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -779,6 +779,8 @@ void usage(enum logcode F)
+@@ -780,6 +780,8 @@ void usage(enum logcode F)
rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n");
rprintf(F," --detect-renamed try to find renamed files to speed up the transfer\n");
rprintf(F," --compare-dest=DIR also compare destination files relative to DIR\n");
rprintf(F," --copy-dest=DIR ... and include copies of unchanged files\n");
rprintf(F," --link-dest=DIR hardlink to files in DIR when unchanged\n");
-@@ -991,7 +993,9 @@ static struct poptOption long_options[] = {
+@@ -992,7 +994,9 @@ static struct poptOption long_options[] = {
{"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
{"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
{"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
{"fuzzy", 'y', POPT_ARG_NONE, 0, 'y', 0, 0 },
{"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 },
{"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 },
-@@ -2788,8 +2792,14 @@ void server_options(char **args, int *argc_p)
+@@ -2789,8 +2793,14 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/backup.c b/backup.c
--- a/backup.c
+++ b/backup.c
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -47,6 +47,7 @@ extern int checksum_seed;
+@@ -38,6 +38,7 @@ extern int checksum_seed;
extern int basis_dir_cnt;
extern int prune_empty_dirs;
extern int protocol_version;
extern int protect_args;
extern int preserve_uid;
extern int preserve_gid;
-@@ -135,6 +136,7 @@ void set_allow_inc_recurse(void)
+@@ -153,6 +154,7 @@ void set_allow_inc_recurse(void)
allow_inc_recurse = 0;
else if (!am_sender
&& (delete_before || delete_after
int implied_dirs = 1;
int missing_args = 0; /* 0 = FERROR_XFER, 1 = ignore, 2 = delete */
int numeric_ids = 0;
-@@ -777,6 +778,7 @@ void usage(enum logcode F)
+@@ -778,6 +779,7 @@ void usage(enum logcode F)
rprintf(F," -@, --modify-window=NUM set the accuracy for mod-time comparisons\n");
rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n");
rprintf(F," --compare-dest=DIR also compare destination files relative to DIR\n");
rprintf(F," --copy-dest=DIR ... and include copies of unchanged files\n");
rprintf(F," --link-dest=DIR hardlink to files in DIR when unchanged\n");
-@@ -989,6 +991,7 @@ static struct poptOption long_options[] = {
+@@ -990,6 +992,7 @@ static struct poptOption long_options[] = {
{"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
{"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
{"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
{"fuzzy", 'y', POPT_ARG_NONE, 0, 'y', 0, 0 },
{"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 },
{"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 },
-@@ -2384,7 +2387,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2385,7 +2388,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
inplace = 1;
}
partial_dir = tmp_partialdir;
if (inplace) {
-@@ -2393,6 +2396,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2394,6 +2397,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",
delay_updates ? "delay-updates" : "partial-dir");
return 0;
}
-@@ -2784,6 +2788,8 @@ void server_options(char **args, int *argc_p)
+@@ -2785,6 +2789,8 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--super";
if (size_only)
args[ac++] = "--size-only";
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
extern int module_id;
extern int local_server;
extern int sanitize_paths;
-@@ -764,6 +765,7 @@ void usage(enum logcode F)
+@@ -765,6 +766,7 @@ void usage(enum logcode F)
rprintf(F," --partial keep partially transferred files\n");
rprintf(F," --partial-dir=DIR put a partially transferred file into DIR\n");
rprintf(F," --delay-updates put all updated files into place at transfer's end\n");
rprintf(F," -m, --prune-empty-dirs prune empty directory chains from the file-list\n");
rprintf(F," --numeric-ids don't map uid/gid values by user/group name\n");
rprintf(F," --usermap=STRING custom username mapping\n");
-@@ -1007,6 +1009,8 @@ static struct poptOption long_options[] = {
+@@ -1008,6 +1010,8 @@ static struct poptOption long_options[] = {
{"partial-dir", 0, POPT_ARG_STRING, &partial_dir, 0, 0, 0 },
{"delay-updates", 0, POPT_ARG_VAL, &delay_updates, 1, 0, 0 },
{"no-delay-updates", 0, POPT_ARG_VAL, &delay_updates, 0, 0, 0 },
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int update_only = 0;
int open_noatime = 0;
int cvs_exclude = 0;
-@@ -695,6 +696,7 @@ void usage(enum logcode F)
+@@ -696,6 +697,7 @@ void usage(enum logcode F)
rprintf(F," --backup-dir=DIR make backups into hierarchy based in DIR\n");
rprintf(F," --suffix=SUFFIX set backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX);
rprintf(F," -u, --update skip files that are newer on the receiver\n");
rprintf(F," --inplace update destination files in-place (SEE MAN PAGE)\n");
rprintf(F," --append append data onto shorter files\n");
rprintf(F," --append-verify like --append, but with old data in file checksum\n");
-@@ -941,6 +943,7 @@ static struct poptOption long_options[] = {
+@@ -942,6 +944,7 @@ static struct poptOption long_options[] = {
{"no-one-file-system",0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 },
{"no-x", 0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 },
{"update", 'u', POPT_ARG_NONE, &update_only, 0, 0, 0 },
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -47,12 +47,14 @@ extern int checksum_seed;
+@@ -38,12 +38,14 @@ extern int checksum_seed;
extern int basis_dir_cnt;
extern int prune_empty_dirs;
extern int protocol_version;
extern int xfer_flags_as_varint;
extern int need_messages_from_generator;
extern int delete_mode, delete_before, delete_during, delete_after;
-@@ -71,7 +73,7 @@ extern char *iconv_opt;
- extern const char *negotiated_csum_name;
+@@ -76,7 +78,7 @@ int inplace_partial = 0;
+ int do_negotiated_strings = 0;
/* These index values are for the file-list's extra-attribute array. */
-int pathname_ndx, depth_ndx, atimes_ndx, uid_ndx, gid_ndx, acls_ndx, xattrs_ndx, unsort_ndx;
int receiver_symlink_times = 0; /* receiver can set the time on a symlink */
int sender_symlink_iconv = 0; /* sender should convert symlink content */
-@@ -161,6 +163,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -396,6 +398,8 @@ void setup_protocol(int f_out,int f_in)
uid_ndx = ++file_extra_cnt;
if (preserve_gid)
gid_ndx = ++file_extra_cnt;
if (preserve_acls && !am_sender)
acls_ndx = ++file_extra_cnt;
if (preserve_xattrs)
-@@ -316,6 +320,10 @@ void setup_protocol(int f_out,int f_in)
+@@ -551,6 +555,10 @@ void setup_protocol(int f_out,int f_in)
want_xattr_optim = protocol_version >= 31 && !(compat_flags & CF_AVOID_XATTR_OPTIM);
proper_seed_order = compat_flags & CF_CHKSUM_SEED_FIX ? 1 : 0;
xfer_flags_as_varint = compat_flags & CF_VARINT_FLIST_FLAGS ? 1 : 0;
int io_timeout = 0;
int prune_empty_dirs = 0;
int use_qsort = 0;
-@@ -581,6 +583,7 @@ static void print_rsync_version(enum logcode f)
+@@ -582,6 +584,7 @@ static void print_rsync_version(enum logcode f)
char const *ipv6 = "no ";
char const *simd = "no ";
char const *xxhash = "no ";
STRUCT_STAT *dumstat;
#if SUBPROTOCOL_VERSION != 0
-@@ -623,6 +626,9 @@ static void print_rsync_version(enum logcode f)
+@@ -624,6 +627,9 @@ static void print_rsync_version(enum logcode f)
#ifdef SUPPORT_XXHASH
xxhash = "";
#endif
rprintf(f, "%s version %s protocol version %d%s\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-@@ -636,8 +642,10 @@ static void print_rsync_version(enum logcode f)
+@@ -637,8 +643,10 @@ static void print_rsync_version(enum logcode f)
(int)(sizeof (int64) * 8));
rprintf(f, " %ssocketpairs, %shardlinks, %ssymlinks, %sIPv6, batchfiles, %sinplace,\n",
got_socketpair, hardlinks, links, ipv6, have_inplace);
#ifdef MAINTAINER_MODE
rprintf(f, "Panic Action: \"%s\"\n", get_panic_action());
-@@ -708,6 +716,9 @@ void usage(enum logcode F)
+@@ -709,6 +717,9 @@ void usage(enum logcode F)
rprintf(F," -K, --keep-dirlinks treat symlinked dir on receiver as dir\n");
rprintf(F," -H, --hard-links preserve hard links\n");
rprintf(F," -p, --perms preserve permissions\n");
rprintf(F," -E, --executability preserve the file's executability\n");
rprintf(F," --chmod=CHMOD affect file and/or directory permissions\n");
#ifdef SUPPORT_ACLS
-@@ -757,7 +768,12 @@ void usage(enum logcode F)
+@@ -758,7 +769,12 @@ void usage(enum logcode F)
rprintf(F," --ignore-missing-args ignore missing source args without error\n");
rprintf(F," --delete-missing-args delete missing source args from destination\n");
rprintf(F," --ignore-errors delete even if there are I/O errors\n");
rprintf(F," --max-delete=NUM don't delete more than NUM files\n");
rprintf(F," --max-size=SIZE don't transfer any file larger than SIZE\n");
rprintf(F," --min-size=SIZE don't transfer any file smaller than SIZE\n");
-@@ -875,6 +891,10 @@ static struct poptOption long_options[] = {
+@@ -876,6 +892,10 @@ static struct poptOption long_options[] = {
{"perms", 'p', POPT_ARG_VAL, &preserve_perms, 1, 0, 0 },
{"no-perms", 0, POPT_ARG_VAL, &preserve_perms, 0, 0, 0 },
{"no-p", 0, POPT_ARG_VAL, &preserve_perms, 0, 0, 0 },
{"executability", 'E', POPT_ARG_NONE, &preserve_executability, 0, 0, 0 },
{"acls", 'A', POPT_ARG_NONE, 0, 'A', 0, 0 },
{"no-acls", 0, POPT_ARG_VAL, &preserve_acls, 0, 0, 0 },
-@@ -968,6 +988,14 @@ static struct poptOption long_options[] = {
+@@ -969,6 +989,14 @@ static struct poptOption long_options[] = {
{"remove-source-files",0,POPT_ARG_VAL, &remove_source_files, 1, 0, 0 },
{"force", 0, POPT_ARG_VAL, &force_delete, 1, 0, 0 },
{"no-force", 0, POPT_ARG_VAL, &force_delete, 0, 0, 0 },
{"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 },
-@@ -2685,6 +2713,9 @@ void server_options(char **args, int *argc_p)
+@@ -2686,6 +2714,9 @@ void server_options(char **args, int *argc_p)
if (xfer_dirs && !recurse && delete_mode && am_sender)
args[ac++] = "--no-r";
if (do_compression && def_compress_level != Z_DEFAULT_COMPRESSION) {
if (asprintf(&arg, "--compress-level=%d", def_compress_level) < 0)
goto oom;
-@@ -2778,6 +2809,16 @@ void server_options(char **args, int *argc_p)
+@@ -2779,6 +2810,16 @@ void server_options(char **args, int *argc_p)
args[ac++] = "--delete-excluded";
if (force_delete)
args[ac++] = "--force";
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
int ignore_times = 0;
int delete_mode = 0;
int delete_during = 0;
-@@ -765,6 +766,7 @@ void usage(enum logcode F)
+@@ -766,6 +767,7 @@ void usage(enum logcode F)
rprintf(F," --partial-dir=DIR put a partially transferred file into DIR\n");
rprintf(F," --delay-updates put all updated files into place at transfer's end\n");
rprintf(F," -m, --prune-empty-dirs prune empty directory chains from the file-list\n");
rprintf(F," --numeric-ids don't map uid/gid values by user/group name\n");
rprintf(F," --usermap=STRING custom username mapping\n");
rprintf(F," --groupmap=STRING custom groupname mapping\n");
-@@ -1042,6 +1044,7 @@ static struct poptOption long_options[] = {
+@@ -1043,6 +1045,7 @@ static struct poptOption long_options[] = {
{"no-timeout", 0, POPT_ARG_VAL, &io_timeout, 0, 0, 0 },
{"contimeout", 0, POPT_ARG_INT, &connect_timeout, 0, 0, 0 },
{"no-contimeout", 0, POPT_ARG_VAL, &connect_timeout, 0, 0, 0 },
{"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 },
-@@ -2864,6 +2867,9 @@ void server_options(char **args, int *argc_p)
+@@ -2865,6 +2868,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = tmpdir;
}
int preserve_perms = 0;
int preserve_fileflags = 0;
int preserve_executability = 0;
-@@ -731,6 +732,10 @@ void usage(enum logcode F)
+@@ -732,6 +733,10 @@ void usage(enum logcode F)
#endif
#ifdef SUPPORT_XATTRS
rprintf(F," -X, --xattrs preserve extended attributes\n");
#endif
rprintf(F," -o, --owner preserve owner (super-user only)\n");
rprintf(F," -g, --group preserve group\n");
-@@ -1008,6 +1013,12 @@ static struct poptOption long_options[] = {
+@@ -1009,6 +1014,12 @@ static struct poptOption long_options[] = {
{"no-force-change", 0, POPT_ARG_VAL, &force_change, 0, 0, 0 },
{"force-uchange", 0, POPT_ARG_VAL, &force_change, USR_IMMUTABLE, 0, 0 },
{"force-schange", 0, POPT_ARG_VAL, &force_change, SYS_IMMUTABLE, 0, 0 },
#endif
{"ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 1, 0, 0 },
{"no-ignore-errors", 0, POPT_ARG_VAL, &ignore_errors, 0, 0, 0 },
-@@ -2113,6 +2124,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2114,6 +2125,15 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
#endif
if (block_size) {
/* We may not know the real protocol_version at this point if this is the client
* option parsing, but we still want to check it so that the client can specify
-@@ -2733,6 +2753,11 @@ void server_options(char **args, int *argc_p)
+@@ -2734,6 +2754,11 @@ void server_options(char **args, int *argc_p)
if (preserve_fileflags)
args[ac++] = "--fileflags";
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
int blocking_io = -1;
int checksum_seed = 0;
int inplace = 0;
-@@ -795,6 +796,7 @@ void usage(enum logcode F)
+@@ -796,6 +797,7 @@ void usage(enum logcode F)
rprintf(F," -0, --from0 all *-from/filter files are delimited by 0s\n");
rprintf(F," -s, --protect-args no space-splitting; only wildcard special-chars\n");
rprintf(F," --copy-as=USER[:GROUP] specify user & optional group for the copy\n");
rprintf(F," --address=ADDRESS bind address for outgoing socket to daemon\n");
rprintf(F," --port=PORT specify double-colon alternate port number\n");
rprintf(F," --sockopts=OPTIONS specify custom TCP options\n");
-@@ -1027,6 +1029,8 @@ static struct poptOption long_options[] = {
+@@ -1028,6 +1030,8 @@ static struct poptOption long_options[] = {
{"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 },
{"only-write-batch", 0, POPT_ARG_STRING, &batch_name, OPT_ONLY_WRITE_BATCH, 0, 0 },
{"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},
-@@ -2814,6 +2818,9 @@ void server_options(char **args, int *argc_p)
+@@ -2815,6 +2819,9 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
./configure
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
./configure
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
extern char *checksum_choice;
#define CSUM_NONE 0
-@@ -540,7 +543,7 @@ static union {
+@@ -397,7 +400,7 @@ static union {
MD4_CTX m4;
#endif
MD5_CTX m5;
#ifdef SUPPORT_XXHASH
static XXH64_state_t* xxh64_state;
#endif
-@@ -557,6 +560,8 @@ void sum_init(int csum_type, int seed)
+@@ -414,6 +417,8 @@ void sum_init(int csum_type, int seed)
switch (csum_type) {
case CSUM_MD5:
MD5_Init(&ctx.m5);
break;
case CSUM_MD4:
#ifdef USE_OPENSSL
-@@ -607,6 +612,8 @@ void sum_update(const char *p, int32 len)
+@@ -464,6 +469,8 @@ void sum_update(const char *p, int32 len)
switch (cursum_type) {
case CSUM_MD5:
MD5_Update(&ctx.m5, (uchar *)p, len);
break;
case CSUM_MD4:
#ifdef USE_OPENSSL
-@@ -664,6 +671,8 @@ int sum_end(char *sum)
+@@ -521,6 +528,8 @@ int sum_end(char *sum)
switch (cursum_type) {
case CSUM_MD5:
MD5_Final((uchar *)sum, &ctx.m5);
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -62,6 +62,7 @@ extern char *dest_option;
- extern char *files_from;
+@@ -57,6 +57,7 @@ extern char *files_from;
extern char *filesfrom_host;
extern char *checksum_choice;
+ extern char *compress_choice;
+extern char *link_by_hash_dir;
extern filter_rule_list filter_list;
extern int need_unsorted_flist;
char *config_file = NULL;
char *shell_cmd = NULL;
char *logfile_name = NULL;
-@@ -215,7 +216,7 @@ static const char *debug_verbosity[] = {
+@@ -216,7 +217,7 @@ static const char *debug_verbosity[] = {
/*2*/ "BIND,CMD,CONNECT,DEL,DELTASUM,DUP,FILTER,FLIST,ICONV",
/*3*/ "ACL,BACKUP,CONNECT2,DELTASUM2,DEL2,EXIT,FILTER2,FLIST2,FUZZY,GENR,OWN,RECV,SEND,TIME",
/*4*/ "CMD2,DELTASUM3,DEL3,EXIT2,FLIST3,ICONV2,OWN2,PROTO,TIME2",
DEBUG_WORD(HLINK, W_SND|W_REC, "Debug hard-link actions (levels 1-3)"),
DEBUG_WORD(ICONV, W_CLI|W_SRV, "Debug iconv character conversions (levels 1-2)"),
DEBUG_WORD(IO, W_CLI|W_SRV, "Debug I/O routines (levels 1-4)"),
-@@ -780,6 +782,7 @@ void usage(enum logcode F)
+@@ -781,6 +783,7 @@ void usage(enum logcode F)
rprintf(F," --compare-dest=DIR also compare destination files relative to DIR\n");
rprintf(F," --copy-dest=DIR ... and include copies of unchanged files\n");
rprintf(F," --link-dest=DIR hardlink to files in DIR when unchanged\n");
rprintf(F," -z, --compress compress file data during the transfer\n");
rprintf(F," --compress-level=NUM explicitly set compression level\n");
rprintf(F," --skip-compress=LIST skip compressing files with a suffix in LIST\n");
-@@ -837,7 +840,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -838,7 +841,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_FILTER, OPT_COMPARE_DEST, OPT_COPY_DEST, OPT_LINK_DEST, OPT_HELP,
OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, OPT_MIN_SIZE, OPT_CHMOD,
OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
OPT_SERVER, OPT_REFUSED_BASE = 9000};
-@@ -989,6 +992,7 @@ static struct poptOption long_options[] = {
+@@ -990,6 +993,7 @@ static struct poptOption long_options[] = {
{"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 },
{"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 },
{"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 },
{"fuzzy", 'y', POPT_ARG_NONE, 0, 'y', 0, 0 },
{"no-fuzzy", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 },
{"no-y", 0, POPT_ARG_VAL, &fuzzy_basis, 0, 0, 0 },
-@@ -1421,6 +1425,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1422,6 +1426,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
iconv_opt = strdup(arg);
#endif
/* TODO: Call poptReadDefaultConfig; handle errors. */
/* The context leaks in case of an error, but if there's a
-@@ -1904,6 +1911,21 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1905,6 +1912,21 @@ int parse_arguments(int *argc_p, const char ***argv_p)
return 0;
#endif
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -2225,6 +2247,8 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2226,6 +2248,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);
}
if (daemon_filter_list.head && !am_sender) {
filter_rule_list *elp = &daemon_filter_list;
-@@ -2893,6 +2917,12 @@ void server_options(char **args, int *argc_p)
+@@ -2894,6 +2918,12 @@ void server_options(char **args, int *argc_p)
} else if (inplace)
args[ac++] = "--inplace";
diff --git a/rsync.h b/rsync.h
--- a/rsync.h
+++ b/rsync.h
-@@ -1327,7 +1327,8 @@ extern short info_levels[], debug_levels[];
+@@ -1339,7 +1339,8 @@ extern short info_levels[], debug_levels[];
#define DEBUG_FUZZY (DEBUG_FLIST+1)
#define DEBUG_GENR (DEBUG_FUZZY+1)
#define DEBUG_HASH (DEBUG_GENR+1)
+#define DEBUG_HLINK (DEBUG_HASHLINK+1)
#define DEBUG_ICONV (DEBUG_HLINK+1)
#define DEBUG_IO (DEBUG_ICONV+1)
- #define DEBUG_OWN (DEBUG_IO+1)
+ #define DEBUG_NSTR (DEBUG_IO+1)
diff --git a/rsync.yo b/rsync.yo
--- a/rsync.yo
+++ b/rsync.yo
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/authenticate.c b/authenticate.c
--- a/authenticate.c
+++ b/authenticate.c
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/access.c b/access.c
--- a/access.c
+++ b/access.c
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
int one_file_system = 0;
int protocol_version = PROTOCOL_VERSION;
int sparse_files = 0;
-@@ -726,6 +727,7 @@ void usage(enum logcode F)
+@@ -727,6 +728,7 @@ void usage(enum logcode F)
rprintf(F," --open-noatime avoid changing the atime on opened files\n");
rprintf(F," -O, --omit-dir-times omit directories from --times\n");
rprintf(F," -J, --omit-link-times omit symlinks from --times\n");
rprintf(F," --super receiver attempts super-user activities\n");
#ifdef SUPPORT_XATTRS
rprintf(F," --fake-super store/recover privileged attrs using xattrs\n");
-@@ -896,6 +898,7 @@ static struct poptOption long_options[] = {
+@@ -897,6 +899,7 @@ static struct poptOption long_options[] = {
{"omit-link-times", 'J', POPT_ARG_VAL, &omit_link_times, 1, 0, 0 },
{"no-omit-link-times",0, POPT_ARG_VAL, &omit_link_times, 0, 0, 0 },
{"no-J", 0, POPT_ARG_VAL, &omit_link_times, 0, 0, 0 },
{"modify-window", '@', 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 },
-@@ -2293,6 +2296,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2294,6 +2297,9 @@ int parse_arguments(int *argc_p, const char ***argv_p)
parse_filter_str(&filter_list, backup_dir_buf, rule_template(0), 0);
}
if (preserve_times) {
preserve_times = PRESERVE_FILE_TIMES;
if (!omit_dir_times)
-@@ -2544,6 +2550,8 @@ void server_options(char **args, int *argc_p)
+@@ -2545,6 +2551,8 @@ void server_options(char **args, int *argc_p)
argstr[x++] = 'O';
if (omit_link_times)
argstr[x++] = 'J';
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
size_t bwlimit_writemax = 0;
int ignore_existing = 0;
int ignore_non_existing = 0;
-@@ -811,6 +812,7 @@ void usage(enum logcode F)
+@@ -812,6 +813,7 @@ void usage(enum logcode F)
rprintf(F," --password-file=FILE read daemon-access password from FILE\n");
rprintf(F," --list-only list the files instead of copying them\n");
rprintf(F," --bwlimit=RATE limit socket I/O bandwidth\n");
#ifdef HAVE_SETVBUF
rprintf(F," --outbuf=N|L|B set output buffering to None, Line, or Block\n");
#endif
-@@ -1017,6 +1019,7 @@ static struct poptOption long_options[] = {
+@@ -1018,6 +1020,7 @@ static struct poptOption long_options[] = {
{"itemize-changes", 'i', POPT_ARG_NONE, 0, 'i', 0, 0 },
{"no-itemize-changes",0, POPT_ARG_VAL, &itemize_changes, 0, 0, 0 },
{"no-i", 0, POPT_ARG_VAL, &itemize_changes, 0, 0, 0 },
TODO: the configure changes should abort if the user requests --enable-slp
and we can't honor that request.
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -581,6 +581,7 @@ static void print_rsync_version(enum logcode f)
+@@ -582,6 +582,7 @@ static void print_rsync_version(enum logcode f)
char const *ipv6 = "no ";
char const *simd = "no ";
char const *xxhash = "no ";
STRUCT_STAT *dumstat;
#if SUBPROTOCOL_VERSION != 0
-@@ -623,6 +624,9 @@ static void print_rsync_version(enum logcode f)
+@@ -624,6 +625,9 @@ static void print_rsync_version(enum logcode f)
#ifdef SUPPORT_XXHASH
xxhash = "";
#endif
rprintf(f, "%s version %s protocol version %d%s\n",
RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-@@ -636,8 +640,10 @@ static void print_rsync_version(enum logcode f)
+@@ -637,8 +641,10 @@ static void print_rsync_version(enum logcode f)
(int)(sizeof (int64) * 8));
rprintf(f, " %ssocketpairs, %shardlinks, %ssymlinks, %sIPv6, batchfiles, %sinplace,\n",
got_socketpair, hardlinks, links, ipv6, have_inplace);
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
/**
* If 1, send the whole file as literal data rather than trying to
-@@ -747,6 +748,7 @@ void usage(enum logcode F)
+@@ -748,6 +749,7 @@ void usage(enum logcode F)
rprintf(F," --existing skip creating new files on receiver\n");
rprintf(F," --ignore-existing skip updating files that already exist on receiver\n");
rprintf(F," --remove-source-files sender removes synchronized files (non-dirs)\n");
rprintf(F," --del an alias for --delete-during\n");
rprintf(F," --delete delete extraneous files from destination dirs\n");
rprintf(F," --delete-before receiver deletes before transfer, not during\n");
-@@ -1020,6 +1022,7 @@ static struct poptOption long_options[] = {
+@@ -1021,6 +1023,7 @@ static struct poptOption long_options[] = {
{"bwlimit", 0, POPT_ARG_STRING, &bwlimit_arg, OPT_BWLIMIT, 0, 0 },
{"no-bwlimit", 0, POPT_ARG_VAL, &bwlimit, 0, 0, 0 },
{"backup", 'b', POPT_ARG_VAL, &make_backups, 1, 0, 0 },
{"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 },
-@@ -2792,6 +2795,8 @@ void server_options(char **args, int *argc_p)
+@@ -2793,6 +2796,8 @@ void server_options(char **args, int *argc_p)
goto oom;
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
char *rsync_path = RSYNC_PATH;
char *backup_dir = NULL;
char backup_dir_buf[MAXPATHLEN];
-@@ -774,6 +777,7 @@ void usage(enum logcode F)
+@@ -775,6 +778,7 @@ void usage(enum logcode F)
rprintf(F," -I, --ignore-times don't skip files that match in size and mod-time\n");
rprintf(F," -M, --remote-option=OPTION send OPTION to the remote side only\n");
rprintf(F," --size-only skip files that match in size\n");
rprintf(F," -@, --modify-window=NUM set the accuracy for mod-time comparisons\n");
rprintf(F," -T, --temp-dir=DIR create temporary files in directory DIR\n");
rprintf(F," -y, --fuzzy find similar file for basis if no dest file\n");
-@@ -817,6 +821,8 @@ void usage(enum logcode F)
+@@ -818,6 +822,8 @@ void usage(enum logcode F)
rprintf(F," --write-batch=FILE write a batched update to FILE\n");
rprintf(F," --only-write-batch=FILE like --write-batch but w/o updating destination\n");
rprintf(F," --read-batch=FILE read a batched update from FILE\n");
rprintf(F," --protocol=NUM force an older protocol version to be used\n");
#ifdef ICONV_OPTION
rprintf(F," --iconv=CONVERT_SPEC request charset conversion of filenames\n");
-@@ -937,6 +943,7 @@ static struct poptOption long_options[] = {
+@@ -938,6 +944,7 @@ static struct poptOption long_options[] = {
{"chmod", 0, POPT_ARG_STRING, 0, OPT_CHMOD, 0, 0 },
{"ignore-times", 'I', POPT_ARG_NONE, &ignore_times, 0, 0, 0 },
{"size-only", 0, POPT_ARG_NONE, &size_only, 0, 0, 0 },
{"one-file-system", 'x', POPT_ARG_NONE, 0, 'x', 0, 0 },
{"no-one-file-system",0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 },
{"no-x", 0, POPT_ARG_VAL, &one_file_system, 0, 0, 0 },
-@@ -1062,6 +1069,8 @@ static struct poptOption long_options[] = {
+@@ -1063,6 +1070,8 @@ static struct poptOption long_options[] = {
{"password-file", 0, POPT_ARG_STRING, &password_file, 0, 0, 0 },
{"blocking-io", 0, POPT_ARG_VAL, &blocking_io, 1, 0, 0 },
{"no-blocking-io", 0, POPT_ARG_VAL, &blocking_io, 0, 0, 0 },
#ifdef HAVE_SETVBUF
{"outbuf", 0, POPT_ARG_STRING, &outbuf_mode, 0, 0, 0 },
#endif
-@@ -2428,6 +2437,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2429,6 +2438,16 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
if (files_from) {
char *h, *p;
int q;
-@@ -2801,6 +2820,25 @@ void server_options(char **args, int *argc_p)
+@@ -2802,6 +2821,25 @@ void server_options(char **args, int *argc_p)
else if (missing_args == 1 && !am_sender)
args[ac++] = "--ignore-missing-args";
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.c
int preallocate_files = 0;
int do_compression = 0;
int def_compress_level = NOT_SPECIFIED;
-@@ -731,6 +732,7 @@ void usage(enum logcode F)
+@@ -732,6 +733,7 @@ void usage(enum logcode F)
rprintf(F," --fake-super store/recover privileged attrs using xattrs\n");
#endif
rprintf(F," -S, --sparse turn sequences of nulls into sparse blocks\n");
#ifdef SUPPORT_PREALLOCATION
rprintf(F," --preallocate allocate dest files before writing them\n");
#else
-@@ -949,6 +951,7 @@ static struct poptOption long_options[] = {
+@@ -950,6 +952,7 @@ static struct poptOption long_options[] = {
{"sparse", 'S', POPT_ARG_VAL, &sparse_files, 1, 0, 0 },
{"no-sparse", 0, POPT_ARG_VAL, &sparse_files, 0, 0, 0 },
{"no-S", 0, POPT_ARG_VAL, &sparse_files, 0, 0, 0 },
{"preallocate", 0, POPT_ARG_NONE, &preallocate_files, 0, 0, 0},
{"inplace", 0, POPT_ARG_VAL, &inplace, 1, 0, 0 },
{"no-inplace", 0, POPT_ARG_VAL, &inplace, 0, 0, 0 },
-@@ -2718,6 +2721,12 @@ void server_options(char **args, int *argc_p)
+@@ -2719,6 +2722,12 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/io.c b/io.c
--- a/io.c
+++ b/io.c
int max_delete = INT_MIN;
OFF_T max_size = -1;
OFF_T min_size = -1;
-@@ -811,6 +812,8 @@ void usage(enum logcode F)
+@@ -812,6 +813,8 @@ void usage(enum logcode F)
rprintf(F," --password-file=FILE read daemon-access password from FILE\n");
rprintf(F," --list-only list the files instead of copying them\n");
rprintf(F," --bwlimit=RATE limit socket I/O bandwidth\n");
#ifdef HAVE_SETVBUF
rprintf(F," --outbuf=N|L|B set output buffering to None, Line, or Block\n");
#endif
-@@ -839,6 +842,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
+@@ -840,6 +843,7 @@ enum {OPT_VERSION = 1000, OPT_DAEMON, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM,
OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_ONLY_WRITE_BATCH, OPT_MAX_SIZE,
OPT_NO_D, OPT_APPEND, OPT_NO_ICONV, OPT_INFO, OPT_DEBUG,
OPT_USERMAP, OPT_GROUPMAP, OPT_CHOWN, OPT_BWLIMIT,
OPT_SERVER, OPT_REFUSED_BASE = 9000};
static struct poptOption long_options[] = {
-@@ -1042,6 +1046,8 @@ static struct poptOption long_options[] = {
+@@ -1043,6 +1047,8 @@ static struct poptOption long_options[] = {
{"no-timeout", 0, POPT_ARG_VAL, &io_timeout, 0, 0, 0 },
{"contimeout", 0, POPT_ARG_INT, &connect_timeout, 0, 0, 0 },
{"no-contimeout", 0, POPT_ARG_VAL, &connect_timeout, 0, 0, 0 },
{"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 },
-@@ -1904,6 +1910,36 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -1905,6 +1911,36 @@ int parse_arguments(int *argc_p, const char ***argv_p)
return 0;
#endif
default:
/* A large opt value means that set_refuse_options()
* turned this option off. */
-@@ -2730,6 +2766,15 @@ void server_options(char **args, int *argc_p)
+@@ -2731,6 +2767,15 @@ void server_options(char **args, int *argc_p)
args[ac++] = arg;
}
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
-@@ -198,6 +198,7 @@ int logfile_format_has_i = 0;
+@@ -199,6 +199,7 @@ int logfile_format_has_i = 0;
int logfile_format_has_o_or_i = 0;
int always_checksum = 0;
int list_only = 0;
#define MAX_BATCH_NAME_LEN 256 /* Must be less than MAXPATHLEN-13 */
char *batch_name = NULL;
-@@ -821,6 +822,7 @@ void usage(enum logcode F)
+@@ -822,6 +823,7 @@ void usage(enum logcode F)
#ifdef ICONV_OPTION
rprintf(F," --iconv=CONVERT_SPEC request charset conversion of filenames\n");
#endif
rprintf(F," --checksum-seed=NUM set block/file checksum seed (advanced)\n");
rprintf(F," -4, --ipv4 prefer IPv4\n");
rprintf(F," -6, --ipv6 prefer IPv6\n");
-@@ -1049,6 +1051,7 @@ static struct poptOption long_options[] = {
+@@ -1050,6 +1052,7 @@ static struct poptOption long_options[] = {
{"iconv", 0, POPT_ARG_STRING, &iconv_opt, 0, 0, 0 },
{"no-iconv", 0, POPT_ARG_NONE, 0, OPT_NO_ICONV, 0, 0 },
#endif
{"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 },
-@@ -2474,6 +2477,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
+@@ -2475,6 +2478,24 @@ int parse_arguments(int *argc_p, const char ***argv_p)
}
}
am_starting_up = 0;
return 1;
-@@ -2910,6 +2931,12 @@ void server_options(char **args, int *argc_p)
+@@ -2911,6 +2932,12 @@ void server_options(char **args, int *argc_p)
if (relative_paths && !implied_dirs && (!am_sender || protocol_version >= 30))
args[ac++] = "--no-implied-dirs";
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
diff --git a/compat.c b/compat.c
--- a/compat.c
+++ b/compat.c
-@@ -222,13 +222,6 @@ void setup_protocol(int f_out,int f_in)
+@@ -457,13 +457,6 @@ void setup_protocol(int f_out,int f_in)
if (protocol_version < 30) {
if (append_mode == 1)
append_mode = 2;
./configure (optional if already run)
make
-based-on: 4f92fd8ddd07a94424e496384dadc98da8c3f8f7
+based-on: 2f84a6bd73e1a6e2081b1bcb965049ef83b2ce45
diff --git a/checksum.c b/checksum.c
--- a/checksum.c
+++ b/checksum.c
#include "xxhash.h"
#endif
#ifdef USE_OPENSSL
-@@ -51,8 +52,10 @@ extern char *checksum_choice;
+@@ -51,10 +52,15 @@ extern char *checksum_choice;
#define CSUM_MD4 4
#define CSUM_MD5 5
#define CSUM_XXH64 6
+#define CSUM_XXH3_64 7
+#define CSUM_XXH3_128 8
--#define CSUM_COUNT 7
-+#define CSUM_COUNT 9
-
- struct csum_struct {
- int num;
-@@ -61,6 +64,9 @@ struct csum_struct {
+ struct name_num_obj valid_checksums = {
+ "checksum", NULL, NULL, 0, 0, {
#ifdef SUPPORT_XXHASH
- { CSUM_XXH64, "xxhash", NULL },
- { CSUM_XXH64, "xxh64", NULL },
-+ { CSUM_XXH3_64, "xxh3", NULL },
-+ { CSUM_XXH3_64, "xxh3-64", NULL },
-+ { CSUM_XXH3_128, "xxh3-128", NULL },
++ { CSUM_XXH3_128, "xxh3-128", NULL },
++ { CSUM_XXH3_64, "xxh3-64", NULL },
++ { CSUM_XXH3_64, "xxh3", NULL },
+ { CSUM_XXH64, "xxh64", NULL },
+ { CSUM_XXH64, "xxhash", NULL },
#endif
- { CSUM_MD5, "md5", NULL },
- { CSUM_MD4, "md4", NULL },
-@@ -301,7 +307,10 @@ int csum_len_for_type(int cst, BOOL flist_csum)
+@@ -157,7 +163,10 @@ int csum_len_for_type(int cst, BOOL flist_csum)
return MD5_DIGEST_LEN;
#ifdef SUPPORT_XXHASH
case CSUM_XXH64:
#endif
default: /* paranoia to prevent missing case values */
exit_cleanup(RERR_UNSUPPORTED);
-@@ -419,6 +428,15 @@ void get_checksum2(char *buf, int32 len, char *sum)
+@@ -275,6 +284,15 @@ void get_checksum2(char *buf, int32 len, char *sum)
case CSUM_XXH64:
SIVAL64(sum, 0, XXH64(buf, len, checksum_seed));
break;
#endif
default: /* paranoia to prevent missing case values */
exit_cleanup(RERR_UNSUPPORTED);
-@@ -523,6 +541,65 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -379,6 +397,65 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
XXH64_freeState(state);
break;
}
+ }
#endif
default:
- rprintf(FERROR, "invalid checksum-choice for the --checksum option (%d)\n", checksum_type);
-@@ -543,6 +620,7 @@ static union {
+ rprintf(FERROR, "Invalid checksum-choice for --checksum: %s (%d)\n",
+@@ -400,6 +477,7 @@ static union {
} ctx;
#ifdef SUPPORT_XXHASH
static XXH64_state_t* xxh64_state;
#endif
static int cursum_type;
-@@ -586,6 +664,28 @@ void sum_init(int csum_type, int seed)
+@@ -443,6 +521,28 @@ void sum_init(int csum_type, int seed)
exit_cleanup(RERR_STREAMIO);
}
break;
#endif
case CSUM_NONE:
break;
-@@ -647,6 +747,18 @@ void sum_update(const char *p, int32 len)
+@@ -504,6 +604,18 @@ void sum_update(const char *p, int32 len)
exit_cleanup(RERR_STREAMIO);
}
break;
#endif
case CSUM_NONE:
break;
-@@ -684,6 +796,15 @@ int sum_end(char *sum)
+@@ -541,6 +653,15 @@ int sum_end(char *sum)
case CSUM_XXH64:
SIVAL64(sum, 0, XXH64_digest(xxh64_state));
break;