X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/0b73ca12fa018b3f6e45cc54912423930b3d6758..166aa723324aac5102506159489e29ed31411d4b:/receiver.c diff --git a/receiver.c b/receiver.c index 7cc9a81d..b9199f2b 100644 --- a/receiver.c +++ b/receiver.c @@ -36,7 +36,6 @@ extern char *compare_dest; extern int make_backups; extern char *backup_suffix; - static struct delete_list { dev_t dev; INO_T inode; @@ -103,7 +102,7 @@ static void delete_one(struct file_struct *f) /* this deletes any files on the receiving side that are not present on the sending side. For version 1.6.4 I have changed the behaviour to match more closely what most people seem to expect of this option */ -static void delete_files(struct file_list *flist) +void delete_files(struct file_list *flist) { struct file_list *local_file_list; int i, j; @@ -146,6 +145,7 @@ static void delete_files(struct file_list *flist) if (-1 == flist_find(flist,local_file_list->files[i])) { char *f = f_name(local_file_list->files[i]); int k = strlen(f) - strlen(backup_suffix); +/* Hi Andrew, do we really need to play with backup_suffix here? */ if (make_backups && ((k <= 0) || (strcmp(f+k,backup_suffix) != 0))) { (void) make_backup(f); @@ -225,8 +225,8 @@ static int receive_data(int f_in,struct map_struct *buf,int fd,char *fname, extern int cleanup_got_literal; if (verbose > 3) { - rprintf(FINFO,"data recv %d at %d\n", - i,(int)offset); + rprintf(FINFO,"data recv %d at %.0f\n", + i,(double)offset); } stats.literal_data += i; @@ -243,7 +243,7 @@ static int receive_data(int f_in,struct map_struct *buf,int fd,char *fname, } i = -(i+1); - offset2 = i*n; + offset2 = i*(OFF_T)n; len = n; if (i == count-1 && remainder != 0) len = remainder; @@ -251,13 +251,15 @@ static int receive_data(int f_in,struct map_struct *buf,int fd,char *fname, stats.matched_data += len; if (verbose > 3) - rprintf(FINFO,"chunk[%d] of size %d at %d offset=%d\n", - i,len,(int)offset2,(int)offset); + rprintf(FINFO,"chunk[%d] of size %d at %.0f offset=%.0f\n", + i,len,(double)offset2,(double)offset); - map = map_ptr(buf,offset2,len); + if (buf) { + map = map_ptr(buf,offset2,len); - see_token(map, len); - sum_update(map,len); + see_token(map, len); + sum_update(map,len); + } if (fd != -1 && write_file(fd,map,len) != len) { rprintf(FERROR,"write failed on %s : %s\n", @@ -267,7 +269,7 @@ static int receive_data(int f_in,struct map_struct *buf,int fd,char *fname, offset += len; } - end_progress(); + end_progress(total_size); if (fd != -1 && offset > 0 && sparse_end(fd) != 0) { rprintf(FERROR,"write failed on %s : %s\n", @@ -291,6 +293,8 @@ static int receive_data(int f_in,struct map_struct *buf,int fd,char *fname, } +/* main routine for receiver process. Receiver process runs on the + same host as the generator process. */ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen) { @@ -314,12 +318,6 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen) rprintf(FINFO,"recv_files(%d) starting\n",flist->count); } - if (!delete_after) { - if (recurse && delete_mode && !local_name && flist->count>0) { - delete_files(flist); - } - } - while (1) { cleanup_disable(); @@ -400,7 +398,7 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen) if (fd1 != -1 && st.st_size > 0) { buf = map_file(fd1,st.st_size); if (verbose > 2) - rprintf(FINFO,"recv mapped %s of size %d\n",fnamecmp,(int)st.st_size); + rprintf(FINFO,"recv mapped %s of size %.0f\n",fnamecmp,(double)st.st_size); } else { buf = NULL; }