void init_hard_links(struct file_list *flist)
{
#if SUPPORT_HARD_LINKS
- if (flist->count < 2) return;
+ int i;
+ if (flist->count < 2) return;
- if (hlink_list) free(hlink_list);
+ if (hlink_list) free(hlink_list);
- if (!(hlink_list =
- (struct file_struct *)malloc(sizeof(hlink_list[0])*flist->count)))
- out_of_memory("init_hard_links");
+ if (!(hlink_list =
+ (struct file_struct *)malloc(sizeof(hlink_list[0])*flist->count)))
+ out_of_memory("init_hard_links");
- bcopy((char *)flist->files,
- (char *)hlink_list,
- sizeof(hlink_list[0])*flist->count);
+ for (i = 0; i < flist->count; i++)
+ bcopy(flist->files[i], &hlink_list[i], sizeof(hlink_list[0]));
- qsort(hlink_list,flist->count,
- sizeof(hlink_list[0]),
- (int (*)())hlink_compare);
+ qsort(hlink_list,flist->count,
+ sizeof(hlink_list[0]),
+ (int (*)())hlink_compare);
- hlink_count=flist->count;
+ hlink_count=flist->count;
#endif
}
if (link_stat(f_name(&hlink_list[i-1]),&st1) != 0) continue;
if (link_stat(f_name(&hlink_list[i]),&st2) != 0) {
- if (!dry_run && link(f_name(&hlink_list[i-1]),f_name(&hlink_list[i])) != 0) {
+ if (do_link(f_name(&hlink_list[i-1]),f_name(&hlink_list[i])) != 0) {
if (verbose > 0)
fprintf(FINFO,"link %s => %s : %s\n",
f_name(&hlink_list[i]),
} else {
if (st2.st_dev == st1.st_dev && st2.st_ino == st1.st_ino) continue;
- if (!dry_run && (unlink(f_name(&hlink_list[i])) != 0 ||
- link(f_name(&hlink_list[i-1]),f_name(&hlink_list[i])) != 0)) {
+ if (do_unlink(f_name(&hlink_list[i])) != 0 ||
+ do_link(f_name(&hlink_list[i-1]),f_name(&hlink_list[i])) != 0) {
if (verbose > 0)
fprintf(FINFO,"link %s => %s : %s\n",
f_name(&hlink_list[i]),