extern int stdout_format_has_i;
extern int maybe_ATTRS_REPORT;
extern char *basis_dir[];
-extern struct file_list *the_file_list;
+extern struct file_list *cur_flist;
#ifdef SUPPORT_HARD_LINKS
#define HASH_LOAD_LIMIT(size) ((size)*3/4)
-#define FPTR(i) (the_file_list->files[i])
+#define FPTR(i) (cur_flist->files[i])
struct ihash_table {
int32 size;
struct ihash_table *tbl;
/* Pick a power of 2 that can hold the requested size. */
- if (size & (size-1)) {
+ if (size & (size-1) || size < 16) {
int req = size;
- size = 32;
+ size = 16;
while (size < req)
size *= 2;
}
static void expand_ihash(struct ihash_table *tbl)
{
- struct idev_node *old_buckets;
+ struct idev_node *old_buckets = tbl->buckets;
int size = tbl->size * 2;
int i;
- old_buckets = tbl->buckets;
if (!(tbl->buckets = new_array(struct idev_node, size)))
out_of_memory("ihash_create");
- memset(tbl->buckets, 0, size * sizeof tbl->buckets[0]);
+ memset(tbl->buckets, 0, size * sizeof (struct idev_node));
tbl->size = size;
tbl->entries = 0;
{
struct file_struct *f1 = FPTR(*int1);
struct file_struct *f2 = FPTR(*int2);
- int gnum1 = F_HL_GNUM(f1);
- int gnum2 = F_HL_GNUM(f2);
+ int32 gnum1 = F_HL_GNUM(f1);
+ int32 gnum2 = F_HL_GNUM(f2);
if (gnum1 != gnum2)
return gnum1 > gnum2 ? 1 : -1;
{
int32 from, prev;
struct file_struct *file, *file_next;
- int gnum, gnum_next;
+ int32 gnum, gnum_next;
qsort(ndx_list, ndx_count, sizeof ndx_list[0],
(int (*)()) hlink_compare_gnum);
int i, ndx_count = 0;
int32 *ndx_list;
- if (!(ndx_list = new_array(int32, the_file_list->count)))
+ if (!(ndx_list = new_array(int32, cur_flist->count)))
out_of_memory("match_hard_links");
- for (i = 0; i < the_file_list->count; i++) {
+ for (i = 0; i < cur_flist->count; i++) {
if (F_IS_HLINKED(FPTR(i)))
ndx_list[ndx_count++] = i;
}
file->flags |= FLAG_HLINK_DONE;
return 0;
}
- if (make_backups) {
+ if (make_backups > 0) {
if (!make_backup(fname))
return -1;
} else if (robust_unlink(fname)) {
/* Is the previous link is not complete yet? */
if (!(prev_file->flags & FLAG_HLINK_DONE)) {
/* Is the previous link being transferred? */
- if (prev_file->flags & FLAG_SENT) {
+ if (prev_file->flags & FLAG_FILE_SENT) {
/* Add ourselves to the list of files that will be
* updated when the transfer completes, and mark
* ourself as waiting for the transfer. */
F_HL_PREV(file) = F_HL_PREV(prev_file);
F_HL_PREV(prev_file) = ndx;
- file->flags |= FLAG_SENT;
+ file->flags |= FLAG_FILE_SENT;
return 1;
}
return 0;