- The sending side now sets the parent_ndx value in each file list.

- Leave a 1-entry gap between incremental file lists so that we can use
  that index value to refer to the parent directory of each file list.
- Set and use the new ndx_end value in the file list.  The incremental
  recursion mode omits dirs in this value (except in the first list)
  since the generator will be using the new "gap" ndx value to process
  each parent dir.
This commit is contained in:
Wayne Davison
2007-07-08 06:25:42 +00:00
parent 24108eb854
commit 5459e693a3

22
flist.c
View File

@@ -1520,8 +1520,7 @@ void send_extra_file_list(int f, int at_least)
* files in the upcoming file-lists. */
if (cur_flist->next) {
flist = first_flist->prev; /* the newest flist */
future_cnt = flist->used + flist->ndx_start
- cur_flist->next->ndx_start;
future_cnt = flist->ndx_end - cur_flist->next->ndx_start + 1;
} else
future_cnt = 0;
while (future_cnt < at_least) {
@@ -1539,6 +1538,7 @@ void send_extra_file_list(int f, int at_least)
#endif
dir_ndx = send_dir_ndx;
write_ndx(f, NDX_FLIST_OFFSET - dir_ndx);
flist->parent_ndx = dir_ndx;
send1extra(f, file, flist);
dp = F_DIRNODE_P(file);
@@ -1568,6 +1568,9 @@ void send_extra_file_list(int f, int at_least)
clean_flist(flist, 0);
flist->ndx_end = flist->ndx_start + flist->used - 1
- (dir_count - dstart);
add_dirs_to_tree(send_dir_ndx, flist, dir_count - dstart);
flist_done_allocating(flist);
@@ -1883,6 +1886,10 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
}
file_total += flist->used;
/* We don't subtract dir_count for the first send since we
* might have one or more dot dirs which need to get sent. */
flist->ndx_end = flist->ndx_start + flist->used - 1;
if (!numeric_ids && !inc_recurse)
send_id_list(f);
@@ -1978,6 +1985,10 @@ struct file_list *recv_file_list(int f)
}
file_total += flist->used;
flist->ndx_end = flist->ndx_start + flist->used - 1;
if (inc_recurse && flist->ndx_start)
flist->ndx_end -= dir_flist->used - dstart;
if (verbose > 2)
rprintf(FINFO, "received %d names\n", flist->used);
@@ -2168,8 +2179,7 @@ struct file_list *flist_new(int flags, char *msg)
} else {
flist->file_pool = first_flist->file_pool;
flist->ndx_start = first_flist->prev->ndx_start
+ first_flist->prev->used;
flist->ndx_start = first_flist->prev->ndx_end + 2;
flist->prev = first_flist->prev;
flist->prev->next = first_flist->prev = flist;
@@ -2398,8 +2408,8 @@ static void output_flist(struct file_list *flist)
const char *who = who_am_i();
int i;
rprintf(FINFO, "[%s] flist start=%d, count=%d, low=%d, high=%d\n",
who, flist->ndx_start, flist->used, flist->low, flist->high);
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];
if ((am_root || am_sender) && uid_ndx) {