./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/errcode.h b/errcode.h
--- a/errcode.h
+++ b/errcode.h
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
--compress, -z compress file data during the transfer
--compress-choice=STR choose the compression algorithm (aka --zc)
--compress-level=NUM explicitly set compression level (aka --zl)
-@@ -2619,6 +2620,18 @@ expand it.
+@@ -2624,6 +2625,18 @@ expand it.
this bug by avoiding the `-o` option (or using `--no-o`) when sending to an
old rsync.
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/daemon-parm.txt b/daemon-parm.txt
--- a/daemon-parm.txt
+++ b/daemon-parm.txt
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
./configure
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
extern const char *checksum_choice;
struct name_num_obj valid_checksums = {
-@@ -386,6 +387,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -391,6 +392,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_result(&m5, (uchar *)sum);
break;
}
case CSUM_MD4:
-@@ -425,6 +428,8 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -430,6 +433,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);
"*Optimizations",
#ifndef USE_ROLL_SIMD
-@@ -261,6 +271,14 @@ void daemon_usage(enum logcode F)
+@@ -263,6 +273,14 @@ void daemon_usage(enum logcode F)
rprintf(F,"daemon-specific rsync options. See also the rsyncd.conf(5) manpage.\n");
}
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-@@ -2551,6 +2553,20 @@ expand it.
+@@ -2556,6 +2558,20 @@ expand it.
otential alternate-basis files will be removed as the transfer progresses.
This option conflicts with [`--inplace`](#opt) and [`--append`](#opt).
a file that can't use it, while missing out on giving it to a file
that could use it.
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/backup.c b/backup.c
--- a/backup.c
+++ b/backup.c
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-@@ -2534,6 +2535,22 @@ expand it.
+@@ -2539,6 +2540,22 @@ expand it.
potential fuzzy-match files, so either use [`--delete-after`](#opt) or
specify some filename exclusions if you need to prevent this.
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
--prune-empty-dirs, -m prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--usermap=STRING custom username mapping
-@@ -3334,6 +3335,17 @@ expand it.
+@@ -3339,6 +3340,17 @@ expand it.
update algorithm that is even more atomic (it uses [`--link-dest`](#opt)
and a parallel hierarchy of files).
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/compat.c b/compat.c
--- 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 */
-@@ -574,6 +576,8 @@ void setup_protocol(int f_out,int f_in)
+@@ -576,6 +578,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)
-@@ -737,6 +741,10 @@ void setup_protocol(int f_out,int f_in)
+@@ -739,6 +743,10 @@ void setup_protocol(int f_out,int f_in)
fprintf(stderr, "Both rsync versions must be at least 3.2.0 for --crtimes.\n");
exit_cleanup(RERR_PROTOCOL);
}
[`--recursive`](#opt) option was also enabled.
0. `--max-delete=NUM`
-@@ -3000,7 +3036,7 @@ expand it.
+@@ -3005,7 +3041,7 @@ expand it.
also turns on the output of other verbose messages).
The "%i" escape has a cryptic output that is 11 letters long. The general
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
See the [`--perms`](#opt) and [`--executability`](#opt) options for how the
resulting permission value can be applied to the files in the transfer.
-@@ -2934,6 +2936,10 @@ expand it.
+@@ -2939,6 +2941,10 @@ expand it.
avoid a complaint about wildcard characters, but a modern rsync handles
this automatically.
0. `--timeout=SECONDS`
This option allows you to set a maximum I/O timeout in seconds. If no data
-@@ -4084,6 +4090,15 @@ The following modifiers are accepted after an include (+) or exclude (-) rule:
+@@ -4089,6 +4095,15 @@ The following modifiers are accepted after an include (+) or exclude (-) rule:
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.
- An `x` indicates that a rule affects xattr names in xattr copy/delete
operations (and is thus ignored when matching file/dir names). If no
xattr-matching rules are specified, a default xattr filtering rule is used
-@@ -4141,6 +4156,12 @@ The following modifiers are accepted after a merge or dir-merge rule:
+@@ -4146,6 +4161,12 @@ The following modifiers are accepted after a merge or dir-merge rule:
rules in the file must not specify sides (via a modifier or a rule prefix
such as `hide`).
./configure (optional if already run)
make
-based-on: 9cb7529ba60cd59519489ad0fc7fbb69ced6411f
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/authenticate.c b/authenticate.c
--- a/authenticate.c
+++ b/authenticate.c
+int file_sum_type = 0; /* used for the pre-transfer (--checksum) checksums */
+int file_sum_len = 0;
- int parse_csum_name(const char *name, int len)
- {
-@@ -99,26 +109,28 @@ static const char *checksum_name(int num)
+ static int initialized_choices = 0;
+
+@@ -104,26 +114,28 @@ static const char *checksum_name(int num)
void parse_checksum_choice(int final_call)
{
if (valid_checksums.negotiated_name)
if (final_call && DEBUG_GTE(NSTR, am_server ? 3 : 1)) {
rprintf(FINFO, "%s%s checksum: %s\n",
-@@ -204,7 +216,7 @@ uint32 get_checksum1(char *buf1, int32 len)
+@@ -209,7 +221,7 @@ uint32 get_checksum1(char *buf1, int32 len)
void get_checksum2(char *buf, int32 len, char *sum)
{
#ifdef SUPPORT_XXHASH
case CSUM_XXH64:
SIVAL64(sum, 0, XXH64(buf, len, checksum_seed));
-@@ -288,7 +300,7 @@ void get_checksum2(char *buf, int32 len, char *sum)
+@@ -293,7 +305,7 @@ void get_checksum2(char *buf, int32 len, char *sum)
* are multiples of 64. This is fixed by calling mdfour_update()
* even when there are no more bytes.
*/
mdfour_update(&m, (uchar *)(buf1+i), len-i);
mdfour_result(&m, (uchar *)sum);
-@@ -306,7 +318,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -311,7 +323,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
int32 remainder;
int fd;
fd = do_open(fname, O_RDONLY, 0);
if (fd == -1)
-@@ -314,7 +326,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -319,7 +331,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
buf = map_file(fd, len, MAX_MAP_SIZE, CHUNK_SIZE);
#ifdef SUPPORT_XXHASH
case CSUM_XXH64: {
static XXH64_state_t* state = NULL;
-@@ -421,7 +433,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -426,7 +438,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
* are multiples of 64. This is fixed by calling mdfour_update()
* even when there are no more bytes. */
remainder = (int32)(len - i);
mdfour_update(&m, (uchar *)map_ptr(buf, i, remainder), remainder);
mdfour_result(&m, (uchar *)sum);
-@@ -429,7 +441,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -434,7 +446,7 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
}
default:
rprintf(FERROR, "Invalid checksum-choice for --checksum: %s (%d)\n",
exit_cleanup(RERR_UNSUPPORTED);
}
-@@ -452,14 +464,16 @@ static XXH64_state_t* xxh64_state;
+@@ -457,14 +469,16 @@ static XXH64_state_t* xxh64_state;
static XXH3_state_t* xxh3_state;
#endif
static int cursum_type;
switch (csum_type) {
#ifdef SUPPORT_XXHASH
-@@ -505,6 +519,8 @@ void sum_init(int csum_type, int seed)
+@@ -510,6 +524,8 @@ void sum_init(int csum_type, int seed)
default: /* paranoia to prevent missing case values */
exit_cleanup(RERR_UNSUPPORTED);
}
}
/**
-@@ -573,11 +589,11 @@ void sum_update(const char *p, int32 len)
+@@ -578,11 +594,11 @@ void sum_update(const char *p, int32 len)
}
}
{
switch (cursum_type) {
#ifdef SUPPORT_XXHASH
-@@ -620,6 +636,4 @@ int sum_end(char *sum)
+@@ -625,8 +641,6 @@ int sum_end(char *sum)
default: /* paranoia to prevent missing case values */
exit_cleanup(RERR_UNSUPPORTED);
}
-
- return csum_len_for_type(cursum_type, 0);
}
+
+ void init_checksum_choices()
diff --git a/clientserver.c b/clientserver.c
--- a/clientserver.c
+++ b/clientserver.c
if (!am_server || !do_negotiated_strings) {
char *cp = tmpbuf;
-@@ -801,11 +804,73 @@ void setup_protocol(int f_out,int f_in)
+@@ -803,11 +806,73 @@ void setup_protocol(int f_out,int f_in)
checksum_seed = read_int(f_in);
}
- Make this code handle multibyte character encodings, and honor the
--iconv setting when converting case.
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/exclude.c b/exclude.c
--- a/exclude.c
+++ b/exclude.c
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
-@@ -2482,6 +2483,12 @@ expand it.
+@@ -2487,6 +2488,12 @@ expand it.
> sudo rsync -aive lsh -M--copy-as=joe src/ lh:dest/
./configure
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
./configure
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
extern const char *checksum_choice;
struct name_num_obj valid_checksums = {
-@@ -444,7 +446,7 @@ static union {
+@@ -449,7 +451,7 @@ static union {
MD4_CTX m4;
#endif
md5_context m5;
#ifdef SUPPORT_XXHASH
static XXH64_state_t* xxh64_state;
#endif
-@@ -483,6 +485,8 @@ void sum_init(int csum_type, int seed)
+@@ -488,6 +490,8 @@ void sum_init(int csum_type, int seed)
#endif
case CSUM_MD5:
md5_begin(&ctx.m5);
break;
case CSUM_MD4:
#ifdef USE_OPENSSL
-@@ -533,6 +537,8 @@ void sum_update(const char *p, int32 len)
+@@ -538,6 +542,8 @@ void sum_update(const char *p, int32 len)
#endif
case CSUM_MD5:
md5_update(&ctx.m5, (uchar *)p, len);
break;
case CSUM_MD4:
#ifdef USE_OPENSSL
-@@ -598,6 +604,8 @@ int sum_end(char *sum)
+@@ -603,6 +609,8 @@ int sum_end(char *sum)
#endif
case CSUM_MD5:
md5_result(&ctx.m5, (uchar *)sum);
--compress, -z compress file data during the transfer
--compress-choice=STR choose the compression algorithm (aka --zc)
--compress-level=NUM explicitly set compression level (aka --zl)
-@@ -2619,6 +2620,50 @@ expand it.
+@@ -2624,6 +2625,50 @@ expand it.
this bug by avoiding the `-o` option (or using `--no-o`) when sending to an
old rsync.
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
{ CSUM_MD5, "md5", NULL },
{ CSUM_MD4, "md4", NULL },
{ 0, NULL, NULL }
-@@ -155,6 +173,18 @@ int csum_len_for_type(int cst, BOOL flist_csum)
+@@ -160,6 +178,18 @@ int csum_len_for_type(int cst, BOOL flist_csum)
return MD4_DIGEST_LEN;
case CSUM_MD5:
return MD5_DIGEST_LEN;
case CSUM_XXH64:
case CSUM_XXH3_64:
return 64/8;
-@@ -180,6 +210,9 @@ int canonical_checksum(int csum_type)
+@@ -185,6 +215,9 @@ int canonical_checksum(int csum_type)
break;
case CSUM_MD4:
case CSUM_MD5:
return -1;
case CSUM_XXH64:
case CSUM_XXH3_64:
-@@ -232,6 +265,26 @@ void get_checksum2(char *buf, int32 len, char *sum)
+@@ -237,6 +270,26 @@ void get_checksum2(char *buf, int32 len, char *sum)
SIVAL64(sum, 8, digest.high64);
break;
}
#endif
case CSUM_MD5: {
md5_context m5;
-@@ -384,6 +437,31 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
+@@ -389,6 +442,31 @@ void file_checksum(const char *fname, const STRUCT_STAT *st_p, char *sum)
SIVAL64(sum, 8, digest.high64);
break;
}
#endif
case CSUM_MD5: {
md5_context m5;
-@@ -457,6 +535,9 @@ static union {
+@@ -462,6 +540,9 @@ static union {
#endif
md5_context m5;
} ctx;
#ifdef SUPPORT_XXHASH
static XXH64_state_t* xxh64_state;
#endif
-@@ -494,6 +575,17 @@ int sum_init(int csum_type, int seed)
+@@ -499,6 +580,17 @@ int sum_init(int csum_type, int seed)
out_of_memory("sum_init");
XXH3_128bits_reset(xxh3_state);
break;
#endif
case CSUM_MD5:
md5_begin(&ctx.m5);
-@@ -546,6 +638,13 @@ void sum_update(const char *p, int32 len)
+@@ -551,6 +643,13 @@ void sum_update(const char *p, int32 len)
case CSUM_XXH3_128:
XXH3_128bits_update(xxh3_state, p, len);
break;
#endif
case CSUM_MD5:
md5_update(&ctx.m5, (uchar *)p, len);
-@@ -611,6 +710,13 @@ void sum_end(char *sum)
+@@ -616,6 +715,13 @@ void sum_end(char *sum)
SIVAL64(sum, 8, digest.high64);
break;
}
#endif
#include "md-defines.h"
+diff --git a/rsync.h b/rsync.h
+--- a/rsync.h
++++ b/rsync.h
+@@ -1173,7 +1173,7 @@ struct name_num_obj {
+ uchar *saw;
+ int saw_len;
+ int negotiated_num;
+- struct name_num_item list[10]; /* we'll get a compile error/warning if this is ever too small */
++ struct name_num_item list[12]; /* we'll get a compile error/warning if this is ever too small */
+ };
+
+ #ifdef EXTERNAL_ZLIB
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
TODO: the configure changes should abort if the user requests --enable-slp
and we can't honor that request.
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/Makefile.in b/Makefile.in
--- a/Makefile.in
+++ b/Makefile.in
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/syscall.c b/syscall.c
--- a/syscall.c
+++ b/syscall.c
-- Matt McCutchen <hashproduct@gmail.com>
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/options.c b/options.c
--- a/options.c
+++ b/options.c
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/generator.c b/generator.c
--- a/generator.c
+++ b/generator.c
--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)
-@@ -3610,6 +3613,36 @@ expand it.
+@@ -3615,6 +3618,36 @@ expand it.
[`--write-batch`](#opt). If _FILE_ is `-`, the batch data will be read
from standard input. See the "BATCH MODE" section for details.
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/fileio.c b/fileio.c
--- a/fileio.c
+++ b/fileio.c
./configure (optional if already run)
make
-based-on: 4c0a4067df2516ce50e12a7d3ae572275fa9fc0b
+based-on: 5fcf20ee9d8abf7aae8578354f82c6f500822e06
diff --git a/flist.c b/flist.c
--- a/flist.c
+++ b/flist.c
--checksum-seed=NUM set block/file checksum seed (advanced)
--ipv4, -4 prefer IPv4
--ipv6, -6 prefer IPv6
-@@ -3652,6 +3653,25 @@ expand it.
+@@ -3657,6 +3658,25 @@ expand it.
free to specify just the local charset for a daemon transfer (e.g.
`--iconv=utf8`).