Changed "count" to "used" in struct file_list since there can

be empty items that make the count inaccurate (and the name
somewhat deceiving).
This commit is contained in:
Wayne Davison
2007-07-07 20:22:05 +00:00
parent b3b326016a
commit 9decb4d2ef
9 changed files with 92 additions and 88 deletions

120
flist.c
View File

@@ -144,7 +144,7 @@ static void finish_filelist_progress(const struct file_list *flist)
if (do_progress) {
/* This overwrites the progress line */
rprintf(FINFO, "%d file%sto consider\n",
flist->count, flist->count == 1 ? " " : "s ");
flist->used, flist->used == 1 ? " " : "s ");
} else
rprintf(FINFO, "done\n");
}
@@ -271,12 +271,12 @@ static const char *pathname, *orig_dir;
static int pathname_len;
/* Make sure flist can hold at least flist->count + extra entries. */
/* Make sure flist can hold at least flist->used + extra entries. */
static void flist_expand(struct file_list *flist, int extra)
{
struct file_struct **new_ptr;
if (flist->count + extra <= flist->malloced)
if (flist->used + extra <= flist->malloced)
return;
if (flist->malloced < FLIST_START)
@@ -288,8 +288,8 @@ static void flist_expand(struct file_list *flist, int extra)
/* In case count jumped or we are starting the list
* with a known size just set it. */
if (flist->malloced < flist->count + extra)
flist->malloced = flist->count + extra;
if (flist->malloced < flist->used + extra)
flist->malloced = flist->used + extra;
new_ptr = realloc_array(flist->files, struct file_struct *,
flist->malloced);
@@ -690,10 +690,10 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
&& BITS_SETnUNSET(xflags, XMIT_HLINKED, XMIT_HLINK_FIRST)) {
struct file_struct *first;
first_hlink_ndx = read_varint30(f);
if (first_hlink_ndx < 0 || first_hlink_ndx >= flist->count) {
if (first_hlink_ndx < 0 || first_hlink_ndx >= flist->used) {
rprintf(FERROR,
"hard-link reference out of range: %d (%d)\n",
first_hlink_ndx, flist->count);
first_hlink_ndx, flist->used);
exit_cleanup(RERR_PROTOCOL);
}
first = flist->files[first_hlink_ndx];
@@ -864,7 +864,7 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
}
#ifdef ICONV_OPTION
if (ic_ndx)
F_NDX(file) = flist->count + flist->ndx_start;
F_NDX(file) = flist->used + flist->ndx_start;
#endif
if (basename != thisname) {
@@ -918,7 +918,7 @@ static struct file_struct *recv_file_entry(struct file_list *flist,
if (preserve_hard_links && xflags & XMIT_HLINKED) {
if (protocol_version >= 30) {
F_HL_GNUM(file) = xflags & XMIT_HLINK_FIRST
? flist->count : first_hlink_ndx;
? flist->used : first_hlink_ndx;
} else {
static int32 cnt = 0;
struct idev_node *np;
@@ -1269,12 +1269,12 @@ static struct file_struct *send_file_name(int f, struct file_list *flist,
}
#endif
maybe_emit_filelist_progress(flist->count + flist_count_offset);
maybe_emit_filelist_progress(flist->used + flist_count_offset);
flist_expand(flist, 1);
flist->files[flist->count++] = file;
flist->files[flist->used++] = file;
if (f >= 0) {
send_file_entry(f, file, flist->count - 1);
send_file_entry(f, file, flist->used - 1);
#ifdef SUPPORT_ACLS
if (preserve_acls && !S_ISLNK(file->mode)) {
send_acl(&sx, f);
@@ -1404,7 +1404,7 @@ static void add_dirs_to_tree(int parent_ndx, struct file_list *from_flist,
if (!S_ISDIR(file->mode))
continue;
dir_flist->files[dir_flist->count++] = file;
dir_flist->files[dir_flist->used++] = file;
dir_cnt--;
if (!(file->flags & FLAG_XFER_DIR)
@@ -1412,11 +1412,11 @@ static void add_dirs_to_tree(int parent_ndx, struct file_list *from_flist,
continue;
if (dp)
DIR_NEXT_SIBLING(dp) = dir_flist->count - 1;
DIR_NEXT_SIBLING(dp) = dir_flist->used - 1;
else if (parent_dp)
DIR_FIRST_CHILD(parent_dp) = dir_flist->count - 1;
DIR_FIRST_CHILD(parent_dp) = dir_flist->used - 1;
else
send_dir_ndx = dir_flist->count - 1;
send_dir_ndx = dir_flist->used - 1;
dp = F_DIRNODE_P(file);
DIR_PARENT(dp) = parent_ndx;
@@ -1439,7 +1439,7 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len,
char *p;
DIR *d;
int divert_dirs = (flags & FLAG_DIVERT_DIRS) != 0;
int start = flist->count;
int start = flist->used;
int filter_flags = f == -2 ? SERVER_FILTERS : ALL_FILTERS;
assert(flist != NULL);
@@ -1482,8 +1482,8 @@ static void send_directory(int f, struct file_list *flist, char *fbuf, int len,
closedir(d);
if (f >= 0 && recurse && !divert_dirs) {
int i, end = flist->count - 1;
/* send_if_directory() bumps flist->count, so use "end". */
int i, end = flist->used - 1;
/* send_if_directory() bumps flist->used, so use "end". */
for (i = start; i <= end; i++)
send_if_directory(f, flist, flist->files[i], fbuf, len, flags);
}
@@ -1520,7 +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->count + flist->ndx_start
future_cnt = flist->used + flist->ndx_start
- cur_flist->next->ndx_start;
} else
future_cnt = 0;
@@ -1558,10 +1558,10 @@ void send_extra_file_list(int f, int at_least)
#ifdef ICONV_OPTION
if (need_unsorted_flist) {
if (!(flist->sorted = new_array(struct file_struct *, flist->count)))
if (!(flist->sorted = new_array(struct file_struct *, flist->used)))
out_of_memory("send_extra_file_list");
memcpy(flist->sorted, flist->files,
flist->count * sizeof (struct file_struct*));
flist->used * sizeof (struct file_struct*));
} else
#endif
flist->sorted = flist->files;
@@ -1571,10 +1571,10 @@ void send_extra_file_list(int f, int at_least)
add_dirs_to_tree(send_dir_ndx, flist, dir_count - dstart);
flist_done_allocating(flist);
file_total += flist->count;
future_cnt += flist->count;
file_total += flist->used;
future_cnt += flist->used;
stats.flist_size += stats.total_written - start_write;
stats.num_files += flist->count;
stats.num_files += flist->used;
if (verbose > 3)
output_flist(flist);
@@ -1865,20 +1865,23 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
#ifdef ICONV_OPTION
if (need_unsorted_flist) {
if (inc_recurse) {
if (!(flist->sorted = new_array(struct file_struct *, flist->count)))
if (!(flist->sorted = new_array(struct file_struct *, flist->used)))
out_of_memory("send_file_list");
memcpy(flist->sorted, flist->files,
flist->count * sizeof (struct file_struct*));
flist->used * sizeof (struct file_struct*));
clean_flist(flist, 0);
} else
} else {
flist->sorted = flist->files;
flist->low = 0;
flist->high = flist->used - 1;
}
} else
#endif
{
flist->sorted = flist->files;
clean_flist(flist, 0);
}
file_total += flist->count;
file_total += flist->used;
if (!numeric_ids && !inc_recurse)
send_id_list(f);
@@ -1893,7 +1896,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
io_end_buffering_out();
stats.flist_size = stats.total_written - start_write;
stats.num_files = flist->count;
stats.num_files = flist->used;
if (verbose > 3)
output_flist(flist);
@@ -1944,7 +1947,7 @@ struct file_list *recv_file_list(int f)
if (inc_recurse) {
if (flist->ndx_start == 0)
dir_flist = flist_new(FLIST_TEMP, "recv_file_list");
dstart = dir_flist->count;
dstart = dir_flist->used;
} else {
dir_flist = flist;
dstart = 0;
@@ -1961,22 +1964,22 @@ struct file_list *recv_file_list(int f)
if (inc_recurse && S_ISDIR(file->mode)) {
flist_expand(dir_flist, 1);
dir_flist->files[dir_flist->count++] = file;
dir_flist->files[dir_flist->used++] = file;
}
flist->files[flist->count++] = file;
flist->files[flist->used++] = file;
maybe_emit_filelist_progress(flist->count);
maybe_emit_filelist_progress(flist->used);
if (verbose > 2) {
rprintf(FINFO, "recv_file_name(%s)\n",
f_name(file, NULL));
}
}
file_total += flist->count;
file_total += flist->used;
if (verbose > 2)
rprintf(FINFO, "received %d names\n", flist->count);
rprintf(FINFO, "received %d names\n", flist->used);
if (show_filelist_p())
finish_filelist_progress(flist);
@@ -1988,25 +1991,25 @@ struct file_list *recv_file_list(int f)
* order and for calling flist_find()). We keep the "files"
* list unsorted for our exchange of index numbers with the
* other side (since their names may not sort the same). */
if (!(flist->sorted = new_array(struct file_struct *, flist->count)))
if (!(flist->sorted = new_array(struct file_struct *, flist->used)))
out_of_memory("recv_file_list");
memcpy(flist->sorted, flist->files,
flist->count * sizeof (struct file_struct*));
if (inc_recurse && dir_flist->count > dstart) {
flist->used * sizeof (struct file_struct*));
if (inc_recurse && dir_flist->used > dstart) {
dir_flist->sorted = realloc_array(dir_flist->sorted,
struct file_struct *,
dir_flist->count);
dir_flist->used);
memcpy(dir_flist->sorted + dstart, dir_flist->files + dstart,
(dir_flist->count - dstart) * sizeof (struct file_struct*));
fsort(dir_flist->sorted + dstart, dir_flist->count - dstart);
(dir_flist->used - dstart) * sizeof (struct file_struct*));
fsort(dir_flist->sorted + dstart, dir_flist->used - dstart);
}
} else
#endif
{
flist->sorted = flist->files;
if (inc_recurse && dir_flist->count > dstart) {
if (inc_recurse && dir_flist->used > dstart) {
dir_flist->sorted = dir_flist->files;
fsort(dir_flist->sorted + dstart, dir_flist->count - dstart);
fsort(dir_flist->sorted + dstart, dir_flist->used - dstart);
}
}
@@ -2030,7 +2033,7 @@ struct file_list *recv_file_list(int f)
if (list_only) {
int i;
for (i = 0; i < flist->count; i++)
for (i = flist->low; i <= flist->high; i++)
list_file_entry(flist->files[i]);
}
@@ -2038,7 +2041,7 @@ struct file_list *recv_file_list(int f)
rprintf(FINFO, "recv_file_list done\n");
stats.flist_size += stats.total_read - start_read;
stats.num_files += flist->count;
stats.num_files += flist->used;
return flist;
}
@@ -2054,12 +2057,12 @@ void recv_additional_file_list(int f)
change_local_filter_dir(NULL, 0, 0);
} else {
ndx = NDX_FLIST_OFFSET - ndx;
if (ndx < 0 || ndx >= dir_flist->count) {
if (ndx < 0 || ndx >= dir_flist->used) {
ndx = NDX_FLIST_OFFSET - ndx;
rprintf(FERROR,
"[%s] Invalid dir index: %d (%d - %d)\n",
who_am_i(), ndx, NDX_FLIST_OFFSET,
NDX_FLIST_OFFSET - dir_flist->count + 1);
NDX_FLIST_OFFSET - dir_flist->used + 1);
exit_cleanup(RERR_PROTOCOL);
}
if (verbose > 3) {
@@ -2166,7 +2169,7 @@ struct file_list *flist_new(int flags, char *msg)
flist->file_pool = first_flist->file_pool;
flist->ndx_start = first_flist->prev->ndx_start
+ first_flist->prev->count;
+ first_flist->prev->used;
flist->prev = first_flist->prev;
flist->prev->next = first_flist->prev = flist;
@@ -2198,7 +2201,7 @@ void flist_free(struct file_list *flist)
flist->next = first_flist;
}
flist->next->prev = flist->prev;
file_total -= flist->count;
file_total -= flist->used;
flist_cnt--;
}
@@ -2222,15 +2225,16 @@ static void clean_flist(struct file_list *flist, int strip_root)
if (!flist)
return;
if (flist->count == 0) {
if (flist->used == 0) {
flist->high = -1;
flist->low = 0;
return;
}
fsort(flist->sorted, flist->count);
fsort(flist->sorted, flist->used);
if (!am_sender || inc_recurse) {
for (i = prev_i = 0; i < flist->count; i++) {
for (i = prev_i = 0; i < flist->used; i++) {
if (F_IS_ACTIVE(flist->sorted[i])) {
prev_i = i;
break;
@@ -2238,11 +2242,11 @@ static void clean_flist(struct file_list *flist, int strip_root)
}
flist->low = prev_i;
} else {
i = prev_i = flist->count - 1;
i = prev_i = flist->used - 1;
flist->low = 0;
}
while (++i < flist->count) {
while (++i < flist->used) {
int j;
struct file_struct *file = flist->sorted[i];
@@ -2395,8 +2399,8 @@ static void output_flist(struct file_list *flist)
int i;
rprintf(FINFO, "[%s] flist start=%d, count=%d, low=%d, high=%d\n",
who, flist->ndx_start, flist->count, flist->low, flist->high);
for (i = 0; i < flist->count; i++) {
who, flist->ndx_start, flist->used, flist->low, flist->high);
for (i = 0; i < flist->used; i++) {
file = flist->sorted[i];
if ((am_root || am_sender) && uid_ndx) {
snprintf(uidbuf, sizeof uidbuf, " uid=%u",
@@ -2627,7 +2631,7 @@ struct file_list *get_dirlist(char *dirname, int dlen, int ignore_filter_rules)
xfer_dirs = save_xfer_dirs;
recurse = save_recurse;
if (do_progress)
flist_count_offset += dirlist->count;
flist_count_offset += dirlist->used;
dirlist->sorted = dirlist->files;
clean_flist(dirlist, 0);

View File

@@ -230,7 +230,7 @@ static enum delret delete_dir_contents(char *fname, int flags)
dirlist = get_dirlist(fname, dlen, 0);
ret = non_perishable_cnt ? DR_NOT_EMPTY : DR_SUCCESS;
if (!dirlist->count)
if (!dirlist->used)
goto done;
if (!(flags & DEL_RECURSE)) {
@@ -246,7 +246,7 @@ static enum delret delete_dir_contents(char *fname, int flags)
/* We do our own recursion, so make delete_item() non-recursive. */
flags = (flags & ~DEL_RECURSE) | DEL_DIR_IS_EMPTY;
for (j = dirlist->count; j--; ) {
for (j = dirlist->used; j--; ) {
struct file_struct *fp = dirlist->files[j];
if (fp->flags & FLAG_MOUNT_DIR) {
@@ -458,7 +458,7 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
/* If an item in dirlist is not found in flist, delete it
* from the filesystem. */
for (i = dirlist->count; i--; ) {
for (i = dirlist->used; i--; ) {
struct file_struct *fp = dirlist->files[i];
if (!F_IS_ACTIVE(fp))
continue;
@@ -493,7 +493,7 @@ static void do_delete_pass(void)
if (dry_run > 1 || list_only)
return;
for (j = 0; j < cur_flist->count; j++) {
for (j = 0; j < cur_flist->used; j++) {
struct file_struct *file = cur_flist->sorted[j];
if (!(file->flags & FLAG_XFER_DIR))
@@ -783,7 +783,7 @@ static int find_fuzzy(struct file_struct *file, struct file_list *dirlist)
fname_len = strlen(fname);
fname_suf = find_filename_suffix(fname, fname_len, &fname_suf_len);
for (j = 0; j < dirlist->count; j++) {
for (j = 0; j < dirlist->used; j++) {
struct file_struct *fp = dirlist->files[j];
const char *suf, *name;
int len, suf_len;
@@ -1726,7 +1726,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx)
if (ndx < 0) {
start = 0;
end = flist->count - 1;
end = flist->used - 1;
} else
start = end = ndx;
@@ -1866,7 +1866,7 @@ void generate_files(int f_out, const char *local_name)
if (verbose > 2)
rprintf(FINFO, "generator starting pid=%ld\n", (long)getpid());
if (delete_before && !solo_file && cur_flist->count > 0)
if (delete_before && !solo_file && cur_flist->used > 0)
do_delete_pass();
if (delete_during == 2) {
deldelay_size = BIGPATHBUFLEN * 4;

View File

@@ -259,10 +259,10 @@ void match_hard_links(void)
int i, ndx_count = 0;
int32 *ndx_list;
if (!(ndx_list = new_array(int32, cur_flist->count)))
if (!(ndx_list = new_array(int32, cur_flist->used)))
out_of_memory("match_hard_links");
for (i = 0; i < cur_flist->count; i++) {
for (i = 0; i < cur_flist->used; i++) {
if (F_IS_HLINKED(cur_flist->sorted[i]))
ndx_list[ndx_count++] = i;
}

6
io.c
View File

@@ -444,13 +444,13 @@ static void decrement_flist_in_progress(int ndx, int redo)
rprintf(FERROR,
"Invalid file index: %d (%d - %d) [%s]\n",
ndx, first_flist->ndx_start,
first_flist->prev->ndx_start + first_flist->prev->count - 1,
first_flist->prev->ndx_start + first_flist->prev->used - 1,
who_am_i());
exit_cleanup(RERR_PROTOCOL);
}
flist = flist->prev;
}
while (ndx >= flist->ndx_start + flist->count) {
while (ndx >= flist->ndx_start + flist->used) {
if (!(flist = flist->next))
goto invalid_ndx;
}
@@ -876,7 +876,7 @@ void maybe_send_keepalive(void)
if (protocol_version >= 30)
send_msg(MSG_NOOP, "", 0, 0);
else {
write_int(sock_f_out, cur_flist->count);
write_int(sock_f_out, cur_flist->used);
write_shortint(sock_f_out, ITEM_IS_NEW);
}
}

4
main.c
View File

@@ -668,7 +668,7 @@ static void do_server_sender(int f_in, int f_out, int argc, char *argv[])
}
flist = send_file_list(f_out,argc,argv);
if (!flist || flist->count == 0)
if (!flist || flist->used == 0)
exit_cleanup(0);
io_start_buffering_in(f_in);
@@ -1012,7 +1012,7 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[])
if (inc_recurse && file_total == 1)
recv_additional_file_list(f_in);
if (flist && flist->count > 0) {
if (flist && flist->used > 0) {
local_name = get_local_name(flist, argv[0]);
fix_basis_dirs();

View File

@@ -320,9 +320,9 @@ static int get_next_gen_ndx(int fd, int next_gen_ndx, int desired_ndx)
next_gen_ndx = read_int(fd);
if (next_gen_ndx == -1) {
if (inc_recurse)
next_gen_ndx = first_flist->prev->count + first_flist->prev->ndx_start;
next_gen_ndx = first_flist->prev->used + first_flist->prev->ndx_start;
else
next_gen_ndx = cur_flist->count;
next_gen_ndx = cur_flist->used;
}
}
return next_gen_ndx;
@@ -356,10 +356,10 @@ int recv_files(int f_in, char *local_name)
int ndx, recv_ok;
if (verbose > 2)
rprintf(FINFO, "recv_files(%d) starting\n", cur_flist->count);
rprintf(FINFO, "recv_files(%d) starting\n", cur_flist->used);
if (delay_updates)
delayed_bits = bitbag_create(cur_flist->count + 1);
delayed_bits = bitbag_create(cur_flist->used + 1);
updating_basis = inplace;
@@ -377,8 +377,8 @@ int recv_files(int f_in, char *local_name)
}
if (read_batch && cur_flist) {
int high = inc_recurse
? first_flist->prev->count + first_flist->prev->ndx_start
: cur_flist->count;
? first_flist->prev->used + first_flist->prev->ndx_start
: cur_flist->used;
get_next_gen_ndx(batch_gen_fd, next_gen_ndx, high);
next_gen_ndx = -1;
}

10
rsync.c
View File

@@ -162,12 +162,12 @@ int read_ndx_and_attrs(int f_in, int *iflag_ptr, uchar *type_ptr,
continue;
}
ndx = NDX_FLIST_OFFSET - ndx;
if (ndx < 0 || ndx >= dir_flist->count) {
if (ndx < 0 || ndx >= dir_flist->used) {
ndx = NDX_FLIST_OFFSET - ndx;
rprintf(FERROR,
"[%s] Invalid dir index: %d (%d - %d)\n",
who_am_i(), ndx, NDX_FLIST_OFFSET,
NDX_FLIST_OFFSET - dir_flist->count + 1);
NDX_FLIST_OFFSET - dir_flist->used + 1);
exit_cleanup(RERR_PROTOCOL);
}
@@ -188,7 +188,7 @@ int read_ndx_and_attrs(int f_in, int *iflag_ptr, uchar *type_ptr,
/* Honor the old-style keep-alive indicator. */
if (protocol_version < 30
&& ndx == cur_flist->count && iflags == ITEM_IS_NEW) {
&& ndx == cur_flist->used && iflags == ITEM_IS_NEW) {
if (am_sender)
maybe_send_keepalive();
goto read_loop;
@@ -200,7 +200,7 @@ int read_ndx_and_attrs(int f_in, int *iflag_ptr, uchar *type_ptr,
"Invalid file index: %d (%d - %d) with iflags %x [%s]\n",
ndx, first_flist->ndx_start + first_flist->ndx_start,
first_flist->prev->ndx_start + first_flist->ndx_start
+ first_flist->prev->count - 1, iflags, who_am_i());
+ first_flist->prev->used - 1, iflags, who_am_i());
exit_cleanup(RERR_PROTOCOL);
}
cur_flist = flist;
@@ -500,7 +500,7 @@ struct file_list *flist_for_ndx(int ndx)
return NULL;
flist = flist->prev;
}
while (ndx >= flist->ndx_start + flist->count) {
while (ndx >= flist->ndx_start + flist->used) {
if (!(flist = flist->next))
return NULL;
}

View File

@@ -674,9 +674,9 @@ struct file_list {
struct file_struct **files, **sorted;
alloc_pool_t file_pool;
void *pool_boundary;
int count, malloced;
int low, high; /* 0-relative index values excluding empties */
int ndx_start; /* the start offset for inc_recurse mode */
int used, malloced;
int low, high; /* 0-relative index values excluding empties */
int ndx_start; /* the start offset for inc_recurse mode */
int parent_ndx; /* dir_flist index of parent directory */
int in_progress, to_redo;
};

View File

@@ -358,11 +358,11 @@ void recv_id_list(int f, struct file_list *flist)
match_acl_ids();
#endif
if (am_root && preserve_uid && !numeric_ids) {
for (i = 0; i < flist->count; i++)
for (i = 0; i < flist->used; i++)
F_OWNER(flist->files[i]) = match_uid(F_OWNER(flist->files[i]));
}
if (preserve_gid && (!am_root || !numeric_ids)) {
for (i = 0; i < flist->count; i++) {
for (i = 0; i < flist->used; i++) {
F_GROUP(flist->files[i]) = match_gid(F_GROUP(flist->files[i]),
&flist->files[i]->flags);
}