mirror of
https://github.com/RsyncProject/rsync.git
synced 2026-01-19 20:38:16 -05:00
fixed a bug that made us use only 16 bits of the file checksum when
comparing checksums for the --checksum (-c) option.
This commit is contained in:
@@ -91,7 +91,7 @@ void file_checksum(char *fname,char *sum,OFF_T size)
|
||||
char tmpchunk[CSUM_CHUNK];
|
||||
struct mdfour m;
|
||||
|
||||
memset(sum,0,csum_length);
|
||||
memset(sum,0,MD4_SUM_LENGTH);
|
||||
|
||||
fd = open(fname,O_RDONLY);
|
||||
if (fd == -1) return;
|
||||
|
||||
2
compat.c
2
compat.c
@@ -23,8 +23,6 @@
|
||||
|
||||
extern int am_server;
|
||||
|
||||
extern int csum_length;
|
||||
|
||||
extern int preserve_links;
|
||||
extern int preserve_perms;
|
||||
extern int preserve_devices;
|
||||
|
||||
14
flist.c
14
flist.c
@@ -23,8 +23,6 @@
|
||||
|
||||
extern struct stats stats;
|
||||
|
||||
extern int csum_length;
|
||||
|
||||
extern int verbose;
|
||||
extern int am_server;
|
||||
extern int always_checksum;
|
||||
@@ -254,7 +252,11 @@ static void send_file_entry(struct file_struct *file,int f,unsigned base_flags)
|
||||
#endif
|
||||
|
||||
if (always_checksum) {
|
||||
write_buf(f,file->sum,csum_length);
|
||||
if (remote_version < 21) {
|
||||
write_buf(f,file->sum,2);
|
||||
} else {
|
||||
write_buf(f,file->sum,MD4_SUM_LENGTH);
|
||||
}
|
||||
}
|
||||
|
||||
last_mode = file->mode;
|
||||
@@ -353,7 +355,11 @@ static void receive_file_entry(struct file_struct **fptr,
|
||||
if (always_checksum) {
|
||||
file->sum = (char *)malloc(MD4_SUM_LENGTH);
|
||||
if (!file->sum) out_of_memory("md4 sum");
|
||||
read_buf(f,file->sum,csum_length);
|
||||
if (remote_version < 21) {
|
||||
read_buf(f,file->sum,2);
|
||||
} else {
|
||||
read_buf(f,file->sum,MD4_SUM_LENGTH);
|
||||
}
|
||||
}
|
||||
|
||||
last_mode = file->mode;
|
||||
|
||||
24
generator.c
24
generator.c
@@ -50,7 +50,11 @@ static int skip_file(char *fname,
|
||||
if (always_checksum && S_ISREG(st->st_mode)) {
|
||||
char sum[MD4_SUM_LENGTH];
|
||||
file_checksum(fname,sum,st->st_size);
|
||||
return (memcmp(sum,file->sum,csum_length) == 0);
|
||||
if (remote_version < 21) {
|
||||
return (memcmp(sum,file->sum,2) == 0);
|
||||
} else {
|
||||
return (memcmp(sum,file->sum,MD4_SUM_LENGTH) == 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (size_only) {
|
||||
@@ -86,17 +90,19 @@ static int adapt_block_size(struct file_struct *file, int bsize)
|
||||
static void send_sums(struct sum_struct *s,int f_out)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* tell the other guy how many we are going to be doing and how many
|
||||
bytes there are in the last chunk */
|
||||
|
||||
/* tell the other guy how many we are going to be doing and how many
|
||||
bytes there are in the last chunk */
|
||||
write_int(f_out,s?s->count:0);
|
||||
write_int(f_out,s?s->n:block_size);
|
||||
write_int(f_out,s?s->remainder:0);
|
||||
if (s)
|
||||
for (i=0;i<s->count;i++) {
|
||||
write_int(f_out,s->sums[i].sum1);
|
||||
write_buf(f_out,s->sums[i].sum2,csum_length);
|
||||
}
|
||||
|
||||
if (!s) return;
|
||||
|
||||
for (i=0;i<s->count;i++) {
|
||||
write_int(f_out,s->sums[i].sum1);
|
||||
write_buf(f_out,s->sums[i].sum2,csum_length);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
2
main.c
2
main.c
@@ -23,8 +23,6 @@ time_t starttime = 0;
|
||||
|
||||
struct stats stats;
|
||||
|
||||
extern int csum_length;
|
||||
|
||||
extern int verbose;
|
||||
|
||||
static void report(int f)
|
||||
|
||||
Reference in New Issue
Block a user