{
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;
stats.num_transferred_files++;
stats.total_transferred_size += file->length;
- fname[0] = 0;
if (file->basedir) {
- offset = stringjoin(fname, sizeof fname,
- file->basedir, "/", NULL);
+ /* 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);
rprintf(FINFO, "send_files(%d, %s)\n", i, fname);
if (dry_run) {
- if (!am_server && verbose) { /* log transfer */
+ if (!am_server && verbose) {
rprintf(FINFO, "%s\n", fname+offset);
}
write_int(f_out, i);
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);
}
if (verbose > 2 && !read_batch)
rprintf(FINFO, "calling match_sums %s\n", fname);
- if (!am_server && verbose) { /* log transfer */
+ if (!am_server && verbose) {
rprintf(FINFO, "%s\n", fname+offset);
}
write_buf(f_out, buff, buff_len);
}
}
- } /* 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 */
+ }
} else { /* not checksum match */
rprintf (FINFO, "readbatch & checksums don't match\n");
rprintf (FINFO, "filename=%s is being skipped\n", fname);
continue;
}
- } else {
- match_sums(f_out, s, buf, st.st_size);
+ } else { /* not read_batch */
+ 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);