X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/97feb557ede01b645989d16b2e345aaec0790027..ac1d2d338450eb005abf03002f5784097caf7e19:/sender.c diff --git a/sender.c b/sender.c index 1d9a132b..51ceff46 100644 --- a/sender.c +++ b/sender.c @@ -25,6 +25,8 @@ extern struct stats stats; extern int io_error; extern int dry_run; extern int am_server; +extern int am_daemon; +extern int protocol_version; /** @@ -36,8 +38,6 @@ extern int am_server; **/ void read_sum_head(int f, struct sum_struct *sum) { - extern int protocol_version; - sum->count = read_int(f); sum->blength = read_int(f); if (protocol_version < 27) { @@ -130,7 +130,7 @@ void send_files(struct file_list *flist, int f_out, int f_in) rprintf(FINFO, "send_files starting\n"); while (1) { - int offset = 0; + unsigned int offset; i = read_int(f_in); if (i == -1) { @@ -157,19 +157,14 @@ void send_files(struct file_list *flist, int f_out, int f_in) stats.num_transferred_files++; stats.total_transferred_size += file->length; - fname[0] = 0; if (file->basedir) { - strlcpy(fname, file->basedir, MAXPATHLEN); - if (strlen(fname) == MAXPATHLEN-1) { - io_error |= IOERR_GENERAL; - rprintf(FERROR, "send_files failed on long-named directory %s\n", - full_fname(fname)); - return; - } - strlcat(fname, "/", MAXPATHLEN); - offset = strlen(file->basedir)+1; - } - f_name_to(file, fname + offset, MAXPATHLEN - offset); + /* N.B. We're sure that this fits, so offset is OK. */ + offset = strlcpy(fname, file->basedir, sizeof fname); + if (!offset || fname[offset-1] != '/') + fname[offset++] = '/'; + } else + offset = 0; + f_name_to(file, fname + offset); if (verbose > 2) rprintf(FINFO, "send_files(%d, %s)\n", i, fname); @@ -198,8 +193,11 @@ void send_files(struct file_list *flist, int f_out, int f_in) fd = do_open(fname, O_RDONLY, 0); if (fd == -1) { if (errno == ENOENT) { + enum logcode c = am_daemon + && protocol_version < 28 ? FERROR + : FINFO; io_error |= IOERR_VANISHED; - rprintf(FINFO, "file has vanished: %s\n", + rprintf(c, "file has vanished: %s\n", full_fname(fname)); } else { io_error |= IOERR_GENERAL; @@ -232,7 +230,7 @@ void send_files(struct file_list *flist, int f_out, int f_in) write_int(f_out, i); if (write_batch) - write_batch_delta_file((char *)&i, sizeof(i)); + write_batch_delta_file((char *)&i, sizeof i); write_sum_head(f_out, s); }