From a06b419d425294588bbc6ef943246e78ca16cd73 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sat, 1 Jan 2005 21:08:14 +0000 Subject: [PATCH] Use an int32 for the each block-size variable. --- match.c | 65 +++++++++++++++++++++++++++---------------------------- options.c | 6 ++--- rsync.h | 6 ++--- 3 files changed, 38 insertions(+), 39 deletions(-) diff --git a/match.c b/match.c index b9336b86..031cc30c 100644 --- a/match.c +++ b/match.c @@ -101,17 +101,20 @@ static OFF_T last_match; * @param i If >0, the number of a matched token. If 0, indicates we * have only literal data. **/ -static void matched(int f,struct sum_struct *s,struct map_struct *buf, - OFF_T offset,int i) +static void matched(int f, struct sum_struct *s, struct map_struct *buf, + OFF_T offset, int i) { - OFF_T n = offset - last_match; - OFF_T j; - - if (verbose > 2 && i >= 0) - rprintf(FINFO,"match at %.0f last_match=%.0f j=%d len=%u n=%.0f\n", - (double)offset,(double)last_match,i,s->sums[i].len,(double)n); + int32 n = offset - last_match; /* max value: block_size (int32) */ + int32 j; + + if (verbose > 2 && i >= 0) { + rprintf(FINFO, + "match at %.0f last_match=%.0f j=%d len=%ld n=%ld\n", + (double)offset, (double)last_match, i, + (long)s->sums[i].len, (long)n); + } - send_token(f,i,buf,last_match,n,i<0?0:s->sums[i].len); + send_token(f, i, buf, last_match, n, i < 0 ? 0 : s->sums[i].len); data_transfer += n; if (i >= 0) { @@ -120,8 +123,8 @@ static void matched(int f,struct sum_struct *s,struct map_struct *buf, } for (j = 0; j < n; j += CHUNK_SIZE) { - int n1 = MIN(CHUNK_SIZE,n-j); - sum_update(map_ptr(buf,last_match+j,n1),n1); + int32 n1 = MIN(CHUNK_SIZE, n - j); + sum_update(map_ptr(buf, last_match + j, n1), n1); } @@ -143,7 +146,7 @@ static void hash_search(int f,struct sum_struct *s, struct map_struct *buf, OFF_T len) { OFF_T offset, end, backup; - unsigned int k; + int32 k; size_t want_i; char sum2[SUM_LENGTH]; uint32 s1, s2, sum; @@ -155,11 +158,11 @@ static void hash_search(int f,struct sum_struct *s, want_i = 0; if (verbose > 2) { - rprintf(FINFO,"hash search b=%u len=%.0f\n", - s->blength, (double)len); + rprintf(FINFO, "hash search b=%ld len=%.0f\n", + (long)s->blength, (double)len); } - k = MIN(len, s->blength); + k = (int32)MIN(len, (OFF_T)s->blength); map = (schar *)map_ptr(buf, 0, k); @@ -167,15 +170,15 @@ static void hash_search(int f,struct sum_struct *s, s1 = sum & 0xFFFF; s2 = sum >> 16; if (verbose > 3) - rprintf(FINFO, "sum=%.8x k=%u\n", sum, k); + rprintf(FINFO, "sum=%.8x k=%ld\n", sum, (long)k); offset = 0; end = len + 1 - s->sums[s->count-1].len; if (verbose > 3) { - rprintf(FINFO, "hash search s->blength=%u len=%.0f count=%.0f\n", - s->blength, (double)len, (double)s->count); + rprintf(FINFO, "hash search s->blength=%ld len=%.0f count=%.0f\n", + (long)s->blength, (double)len, (double)s->count); } do { @@ -192,14 +195,14 @@ static void hash_search(int f,struct sum_struct *s, sum = (s1 & 0xffff) | (s2 << 16); tag_hits++; do { - unsigned int l; + int32 l; size_t i = targets[j].i; if (sum != s->sums[i].sum1) continue; /* also make sure the two blocks are the same length */ - l = MIN((OFF_T)s->blength, len-offset); + l = (int32)MIN((OFF_T)s->blength, len-offset); if (l != s->sums[i].len) continue; @@ -263,7 +266,7 @@ static void hash_search(int f,struct sum_struct *s, matched(f,s,buf,offset,i); offset += s->sums[i].len - 1; - k = MIN(s->blength, len-offset); + k = (int32)MIN((OFF_T)s->blength, len-offset); map = (schar *)map_ptr(buf, offset, k); sum = get_checksum1((char *)map, k); s1 = sum & 0xFFFF; @@ -298,14 +301,12 @@ static void hash_search(int f,struct sum_struct *s, match. The 3 reads are caused by the running match, the checksum update and the literal send. */ - if (backup >= CHUNK_SIZE + s->blength - && end - offset > CHUNK_SIZE) { - matched(f,s,buf,offset - s->blength, -2); - } + if (backup >= s->blength+CHUNK_SIZE && end-offset > CHUNK_SIZE) + matched(f, s, buf, offset - s->blength, -2); } while (++offset < end); - matched(f,s,buf,len,-1); - map_ptr(buf,len-1,1); + matched(f, s, buf, len, -1); + map_ptr(buf, len-1, 1); } @@ -335,7 +336,7 @@ void match_sums(int f, struct sum_struct *s, struct map_struct *buf, OFF_T len) sum_init(checksum_seed); - if (len > 0 && s->count>0) { + if (len > 0 && s->count > 0) { build_hash_table(s); if (verbose > 2) @@ -348,11 +349,9 @@ void match_sums(int f, struct sum_struct *s, struct map_struct *buf, OFF_T len) } else { OFF_T j; /* by doing this in pieces we avoid too many seeks */ - for (j = 0; j < len-CHUNK_SIZE; j += CHUNK_SIZE) { - int n1 = MIN(CHUNK_SIZE,(len-CHUNK_SIZE)-j); - matched(f,s,buf,j+n1,-2); - } - matched(f,s,buf,len,-1); + for (j = CHUNK_SIZE; j < len; j += CHUNK_SIZE) + matched(f, s, buf, j, -2); + matched(f, s, buf, len, -1); } sum_end(file_sum); diff --git a/options.c b/options.c index 70e210dc..9a021c35 100644 --- a/options.c +++ b/options.c @@ -97,7 +97,7 @@ int modify_window = 0; int blocking_io = -1; int checksum_seed = 0; int inplace = 0; -unsigned int block_size = 0; +long block_size = 0; /* "long" because popt can't set an int32. */ /** Network address family. **/ @@ -376,7 +376,7 @@ static struct poptOption long_options[] = { {"relative", 'R', POPT_ARG_VAL, &relative_paths, 1, 0, 0 }, {"no-relative", 0, POPT_ARG_VAL, &relative_paths, 0, 0, 0 }, {"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 }, - {"block-size", 'B', POPT_ARG_INT, &block_size, 0, 0, 0 }, + {"block-size", 'B', POPT_ARG_LONG, &block_size, 0, 0, 0 }, {"max-delete", 0, POPT_ARG_INT, &max_delete, 0, 0, 0 }, {"max-size", 0, POPT_ARG_STRING, &max_size_arg, OPT_MAX_SIZE, 0, 0 }, {"timeout", 0, POPT_ARG_INT, &io_timeout, OPT_TIMEOUT, 0, 0 }, @@ -1113,7 +1113,7 @@ void server_options(char **args,int *argc) args[ac++] = argstr; if (block_size) { - if (asprintf(&arg, "-B%u", block_size) < 0) + if (asprintf(&arg, "-B%lu", block_size) < 0) goto oom; args[ac++] = arg; } diff --git a/rsync.h b/rsync.h index 785eb193..914eb2ee 100644 --- a/rsync.h +++ b/rsync.h @@ -476,7 +476,7 @@ struct file_list { struct sum_buf { OFF_T offset; /**< offset in file of this chunk */ - unsigned int len; /**< length of chunk of file */ + int32 len; /**< length of chunk of file */ uint32 sum1; /**< simple checksum */ short flags; /**< flag bits */ char sum2[SUM_LENGTH]; /**< checksum */ @@ -485,8 +485,8 @@ struct sum_buf { struct sum_struct { OFF_T flength; /**< total file length */ size_t count; /**< how many chunks */ - unsigned int blength; /**< block_length */ - unsigned int remainder; /**< flength % block_length */ + int32 blength; /**< block_length */ + int32 remainder; /**< flength % block_length */ int s2length; /**< sum2_length */ struct sum_buf *sums; /**< points to info for each chunk */ }; -- 2.34.1