extern int am_server;
extern int do_progress;
extern int log_before_transfer;
-extern int log_format_has_i;
+extern int stdout_format_has_i;
extern int logfile_format_has_i;
extern int csum_length;
extern int read_batch;
extern int basis_dir_cnt;
extern int make_backups;
extern int cleanup_got_literal;
-extern int remove_sent_files;
+extern int remove_source_files;
extern int append_mode;
extern int sparse_files;
extern int keep_partial;
extern int inplace;
extern int delay_updates;
extern struct stats stats;
-extern char *log_format;
+extern char *stdout_format;
extern char *tmpdir;
extern char *partial_dir;
extern char *basis_dir[];
static struct bitbag *delayed_bits = NULL;
static int phase = 0;
+/* We're either updating the basis file or an identical copy: */
+static int updating_basis;
/*
sum_update(map_ptr(mapbuf, offset, len), len);
offset = sum.flength;
}
- if (fd != -1 && do_lseek(fd, offset, SEEK_SET) != offset) {
- rsyserr(FERROR, errno, "lseek failed on %s",
- full_fname(fname));
+ if (fd != -1 && (j = do_lseek(fd, offset, SEEK_SET)) != offset) {
+ rsyserr(FERROR, errno, "lseek of %s returned %.0f, not %.0f",
+ full_fname(fname), (double)j, (double)offset);
exit_cleanup(RERR_FILEIO);
}
}
sum_update(map, len);
}
- if (inplace) {
+ if (updating_basis) {
if (offset == offset2 && fd != -1) {
+ OFF_T pos;
if (flush_write_file(fd) < 0)
goto report_write_error;
offset += len;
- if (do_lseek(fd, len, SEEK_CUR) != offset) {
+ if ((pos = do_lseek(fd, len, SEEK_CUR)) != offset) {
rsyserr(FERROR, errno,
- "lseek failed on %s",
- full_fname(fname));
+ "lseek of %s returned %.0f, not %.0f",
+ full_fname(fname),
+ (double)pos, (double)offset);
exit_cleanup(RERR_FILEIO);
}
continue;
"rename failed for %s (from %s)",
full_fname(fname), partialptr);
} else {
- if (remove_sent_files
+ if (remove_source_files
|| (preserve_hard_links
&& file->link_u.links)) {
SIVAL(numbuf, 0, i);
struct file_struct *file;
struct stats initial_stats;
int save_make_backups = make_backups;
- int itemizing = am_server ? logfile_format_has_i : log_format_has_i;
+ int itemizing = am_server ? logfile_format_has_i : stdout_format_has_i;
+ enum logcode log_code = log_before_transfer ? FLOG : FINFO;
int max_phase = protocol_version >= 29 ? 2 : 1;
int i, recv_ok;
if (delay_updates)
delayed_bits = bitbag_create(flist->count);
+ updating_basis = inplace;
+
while (1) {
cleanup_disable();
}
if (!do_xfers) { /* log the transfer */
- if (!am_server && log_format)
- log_item(file, &stats, iflags, NULL);
+ log_item(FCLIENT, file, &stats, iflags, NULL);
if (read_batch)
discard_receive_data(f_in, file->length);
continue;
}
if (write_batch < 0) {
- log_item(file, &stats, iflags, NULL);
+ log_item(FINFO, file, &stats, iflags, NULL);
if (!am_server)
discard_receive_data(f_in, file->length);
continue;
fnamecmp = get_backup_name(fname);
break;
case FNAMECMP_FUZZY:
+ updating_basis = 0;
if (file->dirname) {
pathjoin(fnamecmpbuf, MAXPATHLEN,
file->dirname, xname);
fnamecmp = xname;
break;
default:
+ updating_basis = 0;
if (fnamecmp_type >= basis_dir_cnt) {
rprintf(FERROR,
"invalid basis_dir index: %d.\n",
file->mode = dest_mode(file->mode, st.st_mode, exists);
}
- /* We now check to see if we are writing file "inplace" */
+ /* We now check to see if we are writing the file "inplace" */
if (inplace) {
fd2 = do_open(fname, O_WRONLY|O_CREAT, 0600);
if (fd2 == -1) {
continue;
}
- if (keep_partial)
- cleanup_set(fnametmp, partialptr, file, fd1, fd2);
+ cleanup_set(fnametmp, partialptr, file, fd1, fd2);
}
/* log the transfer */
if (log_before_transfer)
- log_item(file, &initial_stats, iflags, NULL);
+ log_item(FCLIENT, file, &initial_stats, iflags, NULL);
else if (!am_server && verbose && do_progress)
rprintf(FINFO, "%s\n", fname);
recv_ok = receive_data(f_in, fnamecmp, fd1, st.st_size,
fname, fd2, file->length);
- if (!log_before_transfer)
- log_item(file, &initial_stats, iflags, NULL);
+ log_item(log_code, file, &initial_stats, iflags, NULL);
if (fd1 != -1)
close(fd1);
cleanup_disable();
if (recv_ok > 0) {
- if (remove_sent_files
+ if (remove_source_files
|| (preserve_hard_links && file->link_u.links)) {
SIVAL(numbuf, 0, i);
send_msg(MSG_SUCCESS, numbuf, 4);