fixed a bug in the hlink code - it wasn't taking account of the new
[rsync/rsync.git] / hlink.c
diff --git a/hlink.c b/hlink.c
index b3f1d27..eef7c54 100644 (file)
--- a/hlink.c
+++ b/hlink.c
@@ -47,23 +47,23 @@ static int hlink_count;
 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
 }