Fixed failing hunks.
[rsync/rsync-patches.git] / md5.diff
index 2e6bcb0..d48e910 100644 (file)
--- a/md5.diff
+++ b/md5.diff
@@ -1,6 +1,15 @@
+This patch adds the --md5 option, which makes rsync use md5 checksums
+instead of md4.
+
+To use this patch, run these commands for a successful build:
+
+    patch -p1 <patches/md5.diff
+    ./configure
+    make
+
 --- old/Makefile.in
 +++ new/Makefile.in
-@@ -26,7 +26,7 @@ VERSION=@VERSION@
+@@ -27,7 +27,7 @@ VERSION=@VERSION@
  .SUFFIXES: .c .o
  
  HEADERS=byteorder.h config.h errcode.h proto.h rsync.h lib/pool_alloc.h
        zlib/trees.o zlib/zutil.o zlib/adler32.o zlib/compress.o zlib/crc32.o
 --- old/checksum.c
 +++ new/checksum.c
-@@ -18,6 +18,7 @@
- */
+@@ -21,6 +21,7 @@
 */
  
  #include "rsync.h"
 +#include "lib/md5.h"
  
  int csum_length=2; /* initial value */
  
-@@ -25,6 +26,7 @@ int csum_length=2; /* initial value */
+@@ -28,6 +29,7 @@ int csum_length=2; /* initial value */
  
  extern int checksum_seed;
  extern int protocol_version;
@@ -27,7 +36,7 @@
  
  /*
    a simple 32 bit checksum that can be upadted from either end
-@@ -55,6 +57,7 @@ void get_checksum2(char *buf, int32 len,
+@@ -58,6 +60,7 @@ void get_checksum2(char *buf, int32 len,
        static char *buf1;
        static int32 len1;
        struct mdfour m;
@@ -35,7 +44,7 @@
  
        if (len > len1) {
                if (buf1)
-@@ -65,7 +68,10 @@ void get_checksum2(char *buf, int32 len,
+@@ -68,7 +71,10 @@ void get_checksum2(char *buf, int32 len,
                        out_of_memory("get_checksum2");
        }
  
@@ -47,7 +56,7 @@
  
        memcpy(buf1,buf,len);
        if (checksum_seed) {
-@@ -74,7 +80,10 @@ void get_checksum2(char *buf, int32 len,
+@@ -77,7 +83,10 @@ void get_checksum2(char *buf, int32 len,
        }
  
        for(i = 0; i + CSUM_CHUNK <= len; i += CSUM_CHUNK) {
@@ -59,7 +68,7 @@
        }
        /*
         * Prior to version 27 an incorrect MD4 checksum was computed
-@@ -83,10 +92,16 @@ void get_checksum2(char *buf, int32 len,
+@@ -86,10 +95,16 @@ void get_checksum2(char *buf, int32 len,
         * even when there are no more bytes.
         */
        if (len - i > 0 || protocol_version >= 27) {
  }
  
  
-@@ -97,6 +112,7 @@ void file_checksum(char *fname,char *sum
-       int fd;
-       OFF_T len = size;
+@@ -99,6 +114,7 @@ void file_checksum(char *fname,char *sum
+       OFF_T i, len = size;
        struct mdfour m;
+       int32 remainder;
 +      md5_context ctx;
+       int fd;
  
        memset(sum,0,MD4_SUM_LENGTH);
-@@ -106,21 +122,36 @@ void file_checksum(char *fname,char *sum
+@@ -109,11 +125,19 @@ void file_checksum(char *fname,char *sum
  
        buf = map_file(fd, size, MAX_MAP_SIZE, CSUM_CHUNK);
  
        }
  
        /* Prior to version 27 an incorrect MD4 checksum was computed
-        * by failing to call mdfour_tail() for block sizes that
+@@ -121,10 +145,17 @@ void file_checksum(char *fname,char *sum
         * are multiples of 64.  This is fixed by calling mdfour_update()
         * even when there are no more bytes. */
--      if (len - i > 0 || protocol_version >= 27)
--              mdfour_update(&m, (uchar *)map_ptr(buf, i, len-i), len-i);
-+      if (len - i > 0 || protocol_version >= 27) {
+       remainder = (int32)(len - i);
+-      if (remainder > 0 || protocol_version >= 27)
+-              mdfour_update(&m, (uchar *)map_ptr(buf, i, remainder), remainder);
++      if (remainder > 0 || protocol_version >= 27) {
 +              if (use_md5)
-+                      md5_update(&ctx, (uchar *)map_ptr(buf, i, len-i), len-i);
++                      md5_update(&ctx, (uchar *)map_ptr(buf, i, remainder), remainder);
 +              else
-+                      mdfour_update(&m, (uchar *)map_ptr(buf, i, len-i), len-i);
++                      mdfour_update(&m, (uchar *)map_ptr(buf, i, remainder), remainder);
 +      }
  
 -      mdfour_result(&m, (uchar *)sum);
  
        close(fd);
        unmap_file(buf);
-@@ -130,11 +161,15 @@ void file_checksum(char *fname,char *sum
+@@ -134,11 +165,15 @@ void file_checksum(char *fname,char *sum
  static int32 sumresidue;
  static char sumrbuf[CSUM_CHUNK];
  static struct mdfour md;
        sumresidue = 0;
        SIVAL(s, 0, seed);
        sum_update(s, 4);
-@@ -159,13 +194,19 @@ void sum_update(char *p, int32 len)
+@@ -163,13 +198,19 @@ void sum_update(const char *p, int32 len
        if (sumresidue) {
                int32 i = CSUM_CHUNK - sumresidue;
                memcpy(sumrbuf + sumresidue, p, i);
                len -= CSUM_CHUNK;
                p += CSUM_CHUNK;
        }
-@@ -177,8 +218,15 @@ void sum_update(char *p, int32 len)
+@@ -181,8 +222,15 @@ void sum_update(const char *p, int32 len
  
  void sum_end(char *sum)
  {
 +#endif /* md5.h */
 --- old/options.c
 +++ new/options.c
-@@ -117,6 +117,7 @@ int inplace = 0;
- int delay_updates = 0;
- long block_size = 0; /* "long" because popt can't set an int32. */
+@@ -101,6 +101,7 @@ int copy_unsafe_links = 0;
+ int size_only = 0;
+ int daemon_bwlimit = 0;
+ int bwlimit = 0;
 +int use_md5 = 0;
- /** Network address family. **/
- #ifdef INET6
-@@ -369,6 +370,7 @@ void usage(enum logcode F)
+ int fuzzy_basis = 0;
+ size_t bwlimit_writemax = 0;
+ int ignore_existing = 0;
+@@ -378,6 +379,7 @@ void usage(enum logcode F)
    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 INET6
    rprintf(F," -4, --ipv4                  prefer IPv4\n");
    rprintf(F," -6, --ipv6                  prefer IPv6\n");
-@@ -475,6 +477,7 @@ static struct poptOption long_options[] 
+@@ -492,6 +494,7 @@ static struct poptOption long_options[] 
    {"whole-file",      'W', POPT_ARG_VAL,    &whole_file, 1, 0, 0 },
    {"no-whole-file",    0,  POPT_ARG_VAL,    &whole_file, 0, 0, 0 },
    {"no-W",             0,  POPT_ARG_VAL,    &whole_file, 0, 0, 0 },
    {"checksum",        'c', POPT_ARG_NONE,   &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 },
-@@ -1610,6 +1613,9 @@ void server_options(char **args,int *arg
+@@ -1646,6 +1649,9 @@ void server_options(char **args,int *arg
                args[ac++] = arg;
        }