diff options
| author | Wayne Davison <wayned@samba.org> | 2005-01-17 22:51:24 +0000 |
|---|---|---|
| committer | Wayne Davison <wayned@samba.org> | 2005-01-17 22:51:24 +0000 |
| commit | 188fed9570d7a5cb5c28f259c3be85437bc10cc6 (patch) | |
| tree | 294fc09bc04185461f8ff43e9bc6cad276c1eb4c /io.c | |
| parent | eae7165c797a9546b50aed0efbc70bae7880bf0b (diff) | |
| download | android_external_rsync-188fed9570d7a5cb5c28f259c3be85437bc10cc6.tar.gz android_external_rsync-188fed9570d7a5cb5c28f259c3be85437bc10cc6.tar.bz2 android_external_rsync-188fed9570d7a5cb5c28f259c3be85437bc10cc6.zip | |
Moved read_sum_head() here from sender.c (because the generator uses it
too) and improved it with better error checking.
Diffstat (limited to 'io.c')
| -rw-r--r-- | io.c | 25 |
1 files changed, 25 insertions, 0 deletions
@@ -48,6 +48,7 @@ extern int am_daemon; extern int am_sender; extern int am_generator; extern int eol_nulls; +extern int csum_length; extern int checksum_seed; extern int protocol_version; extern char *remote_filesfrom_file; @@ -779,6 +780,30 @@ unsigned char read_byte(int f) return c; } +/* Populate a sum_struct with values from the socket. This is + * called by both the sender and the receiver. */ +void read_sum_head(int f, struct sum_struct *sum) +{ + sum->count = read_int(f); + sum->blength = read_int(f); + if (sum->blength < 0 || sum->blength > MAX_BLOCK_SIZE) { + rprintf(FERROR, "Invalid block length %ld\n", + (long)sum->blength); + exit_cleanup(RERR_PROTOCOL); + } + sum->s2length = protocol_version < 27 ? csum_length : (int)read_int(f); + if (sum->s2length < 0 || sum->s2length > MD4_SUM_LENGTH) { + rprintf(FERROR, "Invalid checksum length %d\n", sum->s2length); + exit_cleanup(RERR_PROTOCOL); + } + sum->remainder = read_int(f); + if (sum->remainder < 0 || sum->remainder > sum->blength) { + rprintf(FERROR, "Invalid remainder length %ld\n", + (long)sum->remainder); + exit_cleanup(RERR_PROTOCOL); + } +} + /** * Sleep after writing to limit I/O bandwidth usage. |
