Make idev, hlink and file_struct + strings use allocation
[rsync/rsync.git] / backup.c
index 3f5c416..248ae90 100644 (file)
--- a/backup.c
+++ b/backup.c
@@ -25,6 +25,7 @@ extern int backup_suffix_len;
 extern int backup_dir_len;
 extern char *backup_suffix;
 extern char *backup_dir;
+extern struct file_struct **hlink_list;
 
 extern int am_root;
 extern int preserve_devices;
@@ -188,6 +189,7 @@ static int keep_backup(char *fname)
                        backup_dir[--backup_dir_len] = '\0';
                if (verbose > 0)
                        rprintf(FINFO, "backup_dir is %s\n", backup_dir);
+
                initialised = 1;
        }
 
@@ -263,7 +265,7 @@ static int keep_backup(char *fname)
        }
 #endif
        if (!kept && preserve_hard_links && file->link_u.links
-           && file->F_HEAD != file) {
+           && hlink_list[file->F_HLINDEX] != file) {
                if (verbose > 1)
                        rprintf(FINFO, "%s is a hard link\n", f_name(file));
        }
@@ -281,7 +283,6 @@ static int keep_backup(char *fname)
                }
        }
        set_perms(keep_name, file, NULL, 0);
-       free_file(file);
        free(file);
 
        if (verbose > 1)