X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/4034cb3f71473271e4c5768c4bb3cdb3c8cf6d61..2b284ee33d97c4414c49c45720a3566a58a93a18:/sender.c diff --git a/sender.c b/sender.c index 8b649a8f..51ceff46 100644 --- a/sender.c +++ b/sender.c @@ -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,18 +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) { - offset = stringjoin(fname, sizeof fname, - file->basedir, "/", NULL); - if (offset >= MAXPATHLEN-1) { - io_error |= IOERR_GENERAL; - rprintf(FERROR, "send_files failed on long-named directory %s\n", - full_fname(fname)); - return; - } - } - 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); @@ -234,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); }