The io_error issue will be fixed in a better way in 3.1.0.
- When using --iconv, if a server-side receiver can't convert a filename,
it now outputs the name back to the client without mangling the charset.
- - Fixed a bug where --delete-during could delete in a directory before it
- noticed that the sending side sent an I/O error for that directory.
-
- Fixed a potential alignment issue in the IRIX ACL code when allocating
the initial "struct acl" object. Also, cast mallocs to avoid warnings.
extern int max_delete;
extern int force_delete;
extern int one_file_system;
-extern int check_for_io_err;
extern struct stats stats;
extern dev_t filesystem_dev;
extern mode_t orig_umask;
dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp));
} else
dirdev = MAKEDEV(0, 0);
- /* We must be sure we've had a chance to receive an I/O
- * error for this directory before we delete in it. */
- while (check_for_io_err && !cur_flist->next && !flist_eof)
- wait_for_receiver();
delete_in_dir(fbuf, fp, &dirdev);
} else
change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp));
int ignore_timeout = 0;
int batch_fd = -1;
int msgdone_cnt = 0;
-int check_for_io_err = 0;
/* Ignore an EOF error if non-zero. See whine_about_eof(). */
int kluge_around_eof = 0;
len = tag & 0xFFFFFF;
tag = (tag >> 24) - MPLEX_BASE;
- check_for_io_err = 0;
-
switch (tag) {
case MSG_DONE:
if (len < 0 || len > 1 || !am_generator) {
}
flist = recv_file_list(fd);
flist->parent_ndx = IVAL(buf,0);
- /* If the sender is going to send us an MSG_IO_ERROR value, it
- * will always be the very next message following MSG_FLIST. */
- check_for_io_err = 1;
#ifdef SUPPORT_HARD_LINKS
if (preserve_hard_links)
match_hard_links(flist);
void wait_for_receiver(void)
{
- if (io_flush(FULL_FLUSH))
+ if (io_flush(NORMAL_FLUSH))
return;
read_msg_fd();
}
msg_bytes = tag & 0xFFFFFF;
tag = (tag >> 24) - MPLEX_BASE;
- check_for_io_err = 0;
-
switch (tag) {
case MSG_DATA:
if (msg_bytes > iobuf_in_siz) {
extern int read_batch;
extern int write_batch;
extern int batch_fd;
-extern int flist_eof;
extern int filesfrom_fd;
-extern int delete_during;
extern int connect_timeout;
-extern int check_for_io_err;
extern pid_t cleanup_child_pid;
extern unsigned int module_dirlen;
extern struct stats stats;
exit_cleanup(RERR_IPC);
}
- check_for_io_err = inc_recurse && delete_during && !flist_eof;
-
if (pid == 0) {
close(error_pipe[0]);
if (f_in != f_out)
extern int flist_eof;
extern int keep_dirlinks;
extern int make_backups;
-extern int delete_during;
-extern int check_for_io_err;
extern struct file_list *cur_flist, *first_flist, *dir_flist;
extern struct chmod_mode_struct *daemon_chmod_modes;
#ifdef ICONV_OPTION
while (1) {
ndx = read_ndx(f_in);
- if (ndx >= 0) {
- if (check_for_io_err) {
- /* Let generator know there was no I/O error. */
- send_msg_int(MSG_IO_ERROR, 0);
- check_for_io_err = 0;
- }
+ if (ndx >= 0)
break;
- }
- check_for_io_err = 0;
if (ndx == NDX_DONE)
return ndx;
if (!inc_recurse || am_sender) {
flist->parent_ndx = ndx;
stop_flist_forward();
verbose = save_verbose;
- /* If the sender is going to send us an MSG_IO_ERROR value, it
- * will always be the very next message following a file list. */
- if (delete_during)
- check_for_io_err = 1;
}
iflags = protocol_version >= 29 ? read_shortint(f_in)