summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1999-06-26 01:06:38 +0000
committerAndrew Tridgell <tridge@samba.org>1999-06-26 01:06:38 +0000
commitf855a7d01ab8401a307bb02cdcdee546df3e2423 (patch)
treeb23b61aceff1ebeb2c80a8fe2e141f807d75cffa
parent4c3b4b25573f0eed181107097c040afc3e0ac4e1 (diff)
downloadrsync-f855a7d01ab8401a307bb02cdcdee546df3e2423.tar.gz
fixed a bug that made us use only 16 bits of the file checksum when
comparing checksums for the --checksum (-c) option.
-rw-r--r--checksum.c2
-rw-r--r--compat.c2
-rw-r--r--flist.c14
-rw-r--r--generator.c24
-rw-r--r--main.c2
-rw-r--r--rsync.h2
6 files changed, 27 insertions, 19 deletions
diff --git a/checksum.c b/checksum.c
index edc844f2..194d899a 100644
--- a/checksum.c
+++ b/checksum.c
@@ -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;
diff --git a/compat.c b/compat.c
index af72f8b1..ee9e0520 100644
--- a/compat.c
+++ b/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;
diff --git a/flist.c b/flist.c
index c6e0006c..b8b4c666 100644
--- a/flist.c
+++ b/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;
diff --git a/generator.c b/generator.c
index d77e7b56..bbc328df 100644
--- a/generator.c
+++ b/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);
+ }
}
diff --git a/main.c b/main.c
index db9201af..807409e3 100644
--- a/main.c
+++ b/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)
diff --git a/rsync.h b/rsync.h
index 32d564cb..03d38dd9 100644
--- a/rsync.h
+++ b/rsync.h
@@ -47,7 +47,7 @@
#define SAME_TIME (1<<7)
/* update this if you make incompatible changes */
-#define PROTOCOL_VERSION 20
+#define PROTOCOL_VERSION 21
#define MIN_PROTOCOL_VERSION 11
#define MAX_PROTOCOL_VERSION 30