X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/a3221d2ac14255c31109a617c4d62b949cd910de..8b115ac8dc8ddf15a54096f01ae17848033801d1:/sender.c diff --git a/sender.c b/sender.c index 688dff61..a2d0a862 100644 --- a/sender.c +++ b/sender.c @@ -27,6 +27,7 @@ extern int dry_run; extern int am_server; extern int am_daemon; extern int protocol_version; +extern int make_backups; extern struct stats stats; @@ -115,11 +116,12 @@ void send_files(struct file_list *flist, int f_out, int f_in) struct sum_struct *s; struct map_struct *mbuf = NULL; STRUCT_STAT st; - char fname[MAXPATHLEN]; + char *fname2, fname[MAXPATHLEN]; int i; struct file_struct *file; int phase = 0; struct stats initial_stats; + int save_make_backups = make_backups; int j; if (verbose > 2) @@ -136,6 +138,8 @@ void send_files(struct file_list *flist, int f_out, int f_in) write_int(f_out, -1); if (verbose > 2) rprintf(FINFO, "send_files phase=%d\n", phase); + /* inplace resends run without a backup file */ + make_backups = 0; continue; } break; @@ -160,23 +164,21 @@ void send_files(struct file_list *flist, int f_out, int f_in) fname[offset++] = '/'; } else offset = 0; - f_name_to(file, fname + offset); + fname2 = f_name_to(file, fname + offset); if (verbose > 2) rprintf(FINFO, "send_files(%d, %s)\n", i, fname); if (dry_run) { - if (!am_server && verbose) { - rprintf(FINFO, "%s\n", fname+offset); - } + if (!am_server && verbose) /* log the transfer */ + rprintf(FINFO, "%s\n", safe_fname(fname2)); write_int(f_out, i); continue; } initial_stats = stats; - s = receive_sums(f_in); - if (!s) { + if (!(s = receive_sums(f_in))) { io_error |= IOERR_GENERAL; rprintf(FERROR, "receive_sums failed\n"); return; @@ -210,23 +212,28 @@ void send_files(struct file_list *flist, int f_out, int f_in) return; } - mbuf = st.st_size ? map_file(fd, st.st_size) : NULL; + if (st.st_size) { + OFF_T map_size = MAX(s->blength * 3, MAX_MAP_SIZE); + mbuf = map_file(fd, st.st_size, map_size, s->blength); + } else + mbuf = NULL; if (verbose > 2) { rprintf(FINFO, "send_files mapped %s of size %.0f\n", - fname, (double)st.st_size); + safe_fname(fname), (double)st.st_size); } write_int(f_out, i); write_sum_head(f_out, s); - if (verbose > 2) - rprintf(FINFO, "calling match_sums %s\n", fname); - - if (!am_server && verbose) { - rprintf(FINFO, "%s\n", fname+offset); + if (verbose > 2) { + rprintf(FINFO, "calling match_sums %s\n", + safe_fname(fname)); } + if (!am_server && verbose) /* log the transfer */ + rprintf(FINFO, "%s\n", safe_fname(fname2)); + set_compression(fname); match_sums(f_out, s, mbuf, st.st_size); @@ -245,9 +252,12 @@ void send_files(struct file_list *flist, int f_out, int f_in) free_sums(s); - if (verbose > 2) - rprintf(FINFO, "sender finished %s\n", fname); + if (verbose > 2) { + rprintf(FINFO, "sender finished %s\n", + safe_fname(fname)); + } } + make_backups = save_make_backups; if (verbose > 2) rprintf(FINFO, "send files finished\n");