extern int force_delete;
STRUCT_STAT st;
int ret;
+ extern int recurse;
if (do_unlink(fname) == 0 || errno == ENOENT) return 0;
}
if (do_rmdir(fname) == 0 || errno == ENOENT) return 0;
- if (!force_delete || (errno != ENOTEMPTY && errno != EEXIST)) {
+ if (!force_delete || !recurse ||
+ (errno != ENOTEMPTY && errno != EEXIST)) {
rprintf(FERROR,"rmdir(%s) : %s\n", fname, strerror(errno));
return -1;
}
write_int(f_out,s->sums[i].sum1);
write_buf(f_out,s->sums[i].sum2,csum_length);
}
- write_flush(f_out);
}
write_int(f_out,i);
send_sums(s,f_out);
- write_flush(f_out);
close(fd);
if (buf) unmap_file(buf);
{
if (dlist_len == dlist_alloc_len) {
dlist_alloc_len += 1024;
- if (!delete_list) {
- delete_list = (struct delete_list *)malloc(sizeof(delete_list[0])*dlist_alloc_len);
- } else {
- delete_list = (struct delete_list *)realloc(delete_list, sizeof(delete_list[0])*dlist_alloc_len);
- }
+ delete_list = (struct delete_list *)Realloc(delete_list, sizeof(delete_list[0])*dlist_alloc_len);
if (!delete_list) out_of_memory("add_delete_entry");
}
if (verbose > 2)
rprintf(FINFO,"recv_files phase=%d\n",phase);
write_int(f_gen,-1);
- write_flush(f_gen);
continue;
}
break;
if (verbose > 2)
rprintf(FINFO,"send_files starting\n");
- setup_nonblocking(f_in,f_out);
+ setup_readbuffer(f_in);
while (1) {
i = read_int(f_in);
phase++;
csum_length = SUM_LENGTH;
write_int(f_out,-1);
- write_flush(f_out);
if (verbose > 2)
rprintf(FINFO,"send_files phase=%d\n",phase);
continue;
printf("%s\n",fname+offset);
match_sums(f_out,s,buf,st.st_size);
- write_flush(f_out);
if (buf) unmap_file(buf);
close(fd);
match_report();
write_int(f_out,-1);
- write_flush(f_out);
}
rprintf(FINFO,"generate_files phase=%d\n",phase);
write_int(f,-1);
- write_flush(f);
/* we expect to just sit around now, so don't exit on a timeout. If we
really get a timeout then the other process should exit */
rprintf(FINFO,"generate_files phase=%d\n",phase);
write_int(f,-1);
- write_flush(f);
}