extern int sanitize_paths;
extern struct stats stats;
extern char *filesfrom_host;
+#ifdef ICONV_OPTION
+extern char *iconv_opt;
+#endif
extern char curr_dir[MAXPATHLEN];
struct file_list *flist;
int64 start_write;
uint16 prev_flags;
- int future_cnt, save_io_error = io_error;
+ int old_cnt, save_io_error = io_error;
if (flist_eof)
return;
/* Keep sending data until we have the requested number of
* files in the upcoming file-lists. */
- if (cur_flist->next) {
- flist = first_flist->prev; /* the newest flist */
- future_cnt = flist->ndx_end - cur_flist->next->ndx_start + 1;
- } else
- future_cnt = 0;
- while (future_cnt < at_least) {
+ old_cnt = cur_flist->used;
+ for (flist = first_flist; flist != cur_flist; flist = flist->next)
+ old_cnt += flist->used;
+ while (file_total - old_cnt < at_least) {
struct file_struct *file = dir_flist->sorted[send_dir_ndx];
int dir_ndx, dstart = dir_count;
const char *pathname = F_PATHNAME(file);
clean_flist(flist, 0);
- flist->ndx_end = flist->ndx_start + flist->used - 1
- - (dir_count - dstart);
+ flist->ndx_end = flist->ndx_start + flist->used - 1;
+#ifdef ICONV_OPTION
+ if (!iconv_opt)
+#endif
+ flist->ndx_end -= (dir_count - dstart);
add_dirs_to_tree(send_dir_ndx, flist, dir_count - dstart);
flist_done_allocating(flist);
file_total += flist->used;
- future_cnt += flist->used;
stats.flist_size += stats.total_written - start_write;
stats.num_files += flist->used;
if (verbose > 3)
file_total += flist->used;
flist->ndx_end = flist->ndx_start + flist->used - 1;
- if (inc_recurse && flist->ndx_start > 1)
+ if (inc_recurse
+#ifdef ICONV_OPTION
+ && !iconv_opt
+#endif
+ && flist->ndx_start > 1)
flist->ndx_end -= dir_flist->used - dstart;
if (verbose > 2)
if (!flist->file_pool)
out_of_memory(msg);
- flist->ndx_start = 1;
+ flist->ndx_start = inc_recurse ? 1 : 0;
first_flist = cur_flist = flist->prev = flist;
} else {
rprintf(FINFO, "[%s] flist start=%d, end=%d, used=%d, low=%d, high=%d\n",
who, flist->ndx_start, flist->ndx_end, flist->used, flist->low, flist->high);
for (i = 0; i < flist->used; i++) {
- file = flist->sorted[i];
+ file = flist->files[i];
if ((am_root || am_sender) && uid_ndx) {
snprintf(uidbuf, sizeof uidbuf, " uid=%u",
F_OWNER(file));