{
int fd = -1;
struct sum_struct *s;
- struct map_struct *buf = NULL;
+ struct map_struct *mbuf = NULL;
STRUCT_STAT st;
char fname[MAXPATHLEN];
int i;
rprintf(FINFO, "send_files starting\n");
while (1) {
- int offset = 0;
+ unsigned int offset;
i = read_int(f_in);
if (i == -1) {
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);
full_fname(fname));
} else {
io_error |= IOERR_GENERAL;
- rprintf(FERROR, "send_files failed to open %s: %s\n",
- full_fname(fname), strerror(errno));
+ rsyserr(FERROR, errno,
+ "send_files failed to open %s",
+ full_fname(fname));
}
free_sums(s);
continue;
/* map the local file */
if (do_fstat(fd, &st) != 0) {
io_error |= IOERR_GENERAL;
- rprintf(FERROR, "fstat failed: %s\n", strerror(errno));
+ rsyserr(FERROR, errno, "fstat failed");
free_sums(s);
close(fd);
return;
}
- if (st.st_size > 0) {
- buf = map_file(fd, st.st_size);
- } else {
- buf = NULL;
- }
+ mbuf = st.st_size ? map_file(fd, st.st_size) : NULL;
- if (verbose > 2)
+ if (verbose > 2) {
rprintf(FINFO, "send_files mapped %s of size %.0f\n",
fname, (double)st.st_size);
+ }
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);
}
}
}
} /* end while */
- read_batch_delta_file( buff, MD4_SUM_LENGTH);
+ read_batch_delta_file(buff, MD4_SUM_LENGTH);
write_buf(f_out, buff, MD4_SUM_LENGTH);
} /* j=i */
continue;
}
} else {
- match_sums(f_out, s, buf, st.st_size);
+ match_sums(f_out, s, mbuf, st.st_size);
log_send(file, &initial_stats);
}
if (!read_batch) {
- if (buf) {
- j = unmap_file(buf);
+ if (mbuf) {
+ j = unmap_file(mbuf);
if (j) {
io_error |= IOERR_GENERAL;
- rprintf(FERROR,
- "read errors mapping %s: (%d) %s\n",
- full_fname(fname), j, strerror(j));
+ rsyserr(FERROR, j,
+ "read errors mapping %s",
+ full_fname(fname));
}
}
close(fd);