*
* Copyright (C) 1996 Andrew Tridgell
* Copyright (C) 1996 Paul Mackerras
- * Copyright (C) 2003, 2004, 2005, 2006 Wayne Davison
+ * Copyright (C) 2003-2007 Wayne Davison
*
* This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
static void matched(int f, struct sum_struct *s, struct map_struct *buf,
OFF_T offset, int32 i)
{
- int32 n = offset - last_match; /* max value: block_size (int32) */
+ int32 n = (int32)(offset - last_match); /* max value: block_size (int32) */
int32 j;
if (verbose > 2 && i >= 0) {
static void hash_search(int f,struct sum_struct *s,
struct map_struct *buf, OFF_T len)
{
- OFF_T offset, end, backup;
- int32 k, want_i;
+ OFF_T offset, end;
+ int32 k, want_i, backup;
char sum2[SUM_LENGTH];
uint32 s1, s2, sum;
int more;
} while ((i = s->sums[i].chain) >= 0);
null_hash:
- backup = offset - last_match;
+ backup = (int32)(offset - last_match);
/* We sometimes read 1 byte prior to last_match... */
if (backup < 0)
backup = 0;
**/
void match_sums(int f, struct sum_struct *s, struct map_struct *buf, OFF_T len)
{
- char file_sum[MD4_SUM_LENGTH];
+ char file_sum[MAX_DIGEST_LEN];
+ int sum_len;
last_match = 0;
false_alarms = 0;
sum_init(checksum_seed);
- if (append_mode) {
+ if (append_mode > 0) {
OFF_T j = 0;
for (j = CHUNK_SIZE; j < s->flength; j += CHUNK_SIZE) {
if (buf && do_progress)
last_match = j;
}
if (last_match < s->flength) {
- int32 len = s->flength - last_match;
+ int32 n = (int32)(s->flength - last_match);
if (buf && do_progress)
show_progress(last_match, buf->file_size);
- sum_update(map_ptr(buf, last_match, len), len);
+ sum_update(map_ptr(buf, last_match, n), n);
last_match = s->flength;
}
s->count = 0;
if (verbose > 2)
rprintf(FINFO,"built hash table\n");
- hash_search(f,s,buf,len);
+ hash_search(f, s, buf, len);
if (verbose > 2)
rprintf(FINFO,"done hash search\n");
matched(f, s, buf, len, -1);
}
- sum_end(file_sum);
+ sum_len = sum_end(file_sum);
/* If we had a read error, send a bad checksum. */
if (buf && buf->status != 0)
file_sum[0]++;
if (verbose > 2)
rprintf(FINFO,"sending file_sum\n");
- write_buf(f,file_sum,MD4_SUM_LENGTH);
+ write_buf(f, file_sum, sum_len);
if (verbose > 2)
rprintf(FINFO, "false_alarms=%d hash_hits=%d matches=%d\n",