extern int remove_source_files;
extern int preserve_hard_links;
extern struct stats stats;
-extern struct file_list *cur_flist, *first_flist;
+extern struct file_list *cur_flist;
#ifdef ICONV_OPTION
extern int filesfrom_convert;
extern iconv_t ic_send, ic_recv;
struct file_list *flist = flist_for_ndx(ndx);
assert(flist != NULL);
- assert(ndx >= flist->ndx_start);
if (remove_source_files) {
active_filecnt--;
send_msg(MSG_SUCCESS, buf, 4, 0);
if (preserve_hard_links) {
struct file_struct *file = flist->files[ndx - flist->ndx_start];
- if (F_IS_HLINKED(file))
+ if (F_IS_HLINKED(file)) {
flist_ndx_push(&hlink_list, ndx);
+ flist->in_progress++;
+ }
}
break;
case FES_REDO:
goto invalid_msg;
flist_eof = 1;
break;
+ case MSG_IO_ERROR:
+ if (len != 4)
+ goto invalid_msg;
+ readfd(fd, buf, len);
+ io_error |= IVAL(buf, 0);
+ break;
case MSG_DELETED:
if (len >= (int)sizeof buf || !am_generator)
goto invalid_msg;
if (msg_bytes != 4)
goto invalid_msg;
read_loop(fd, line, msg_bytes);
+ send_msg_int(MSG_IO_ERROR, IVAL(line, 0));
io_error |= IVAL(line, 0);
break;
case MSG_DELETED:
* actual communication so far depends on whether a daemon
* is involved. */
write_int(batch_fd, protocol_version);
+ if (protocol_version >= 30)
+ write_byte(batch_fd, inc_recurse);
write_int(batch_fd, checksum_seed);
if (am_sender)