pointed out by byrnes@curl.com
int recv_pipe[2];
int error_pipe[2];
extern int preserve_hard_links;
+ extern int delete_after;
+ extern int recurse;
+ extern int delete_mode;
if (preserve_hard_links)
init_hard_links(flist);
+ if (!delete_after) {
+ /* I moved this here from recv_files() to prevent a race condition */
+ if (recurse && delete_mode && !local_name && flist->count>0) {
+ delete_files(flist);
+ }
+ }
+
if (pipe(recv_pipe) < 0) {
rprintf(FERROR,"pipe failed in do_recv\n");
exit_cleanup(RERR_SOCKETIO);
/* this deletes any files on the receiving side that are not present
on the sending side. For version 1.6.4 I have changed the behaviour
to match more closely what most people seem to expect of this option */
-static void delete_files(struct file_list *flist)
+void delete_files(struct file_list *flist)
{
struct file_list *local_file_list;
int i, j;
rprintf(FINFO,"recv_files(%d) starting\n",flist->count);
}
- if (!delete_after) {
- if (recurse && delete_mode && !local_name && flist->count>0) {
- delete_files(flist);
- }
- }
-
while (1) {
cleanup_disable();