Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Silence a compiler warning on Sun OS systems.
[rsync/rsync.git]
/
hlink.c
diff --git
a/hlink.c
b/hlink.c
index
4536636
..
d9facb4
100644
(file)
--- a/
hlink.c
+++ b/
hlink.c
@@
-57,9
+57,7
@@
void init_hard_links(struct file_list *flist)
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)))
+ if (!(hlink_list = new_array(struct file_struct, flist->count)))
out_of_memory("init_hard_links");
for (i = 0; i < flist->count; i++)
out_of_memory("init_hard_links");
for (i = 0; i < flist->count; i++)
@@
-97,14
+95,21
@@
int check_hard_link(struct file_struct *file)
low = mid + 1;
}
low = mid + 1;
}
+ /* XXX: To me this looks kind of dodgy -- why do we use [low]
+ * here and [low-1] below? -- mbp */
if (hlink_compare(&hlink_list[low], file) != 0)
return 0;
if (low > 0 &&
S_ISREG(hlink_list[low - 1].mode) &&
file->dev == hlink_list[low - 1].dev &&
if (hlink_compare(&hlink_list[low], file) != 0)
return 0;
if (low > 0 &&
S_ISREG(hlink_list[low - 1].mode) &&
file->dev == hlink_list[low - 1].dev &&
- file->inode == hlink_list[low - 1].inode)
+ file->inode == hlink_list[low - 1].inode) {
+ if (verbose >= 2) {
+ rprintf(FINFO, "check_hard_link: \"%s\" is a hard link to file %d, \"%s\"\n",
+ f_name(file), low-1, f_name(&hlink_list[low-1]));
+ }
return 1;
return 1;
+ }
#endif
return 0;
#endif
return 0;
@@
-115,45
+120,44
@@
int check_hard_link(struct file_struct *file)
static void hard_link_one(int i)
{
STRUCT_STAT st1, st2;
static void hard_link_one(int i)
{
STRUCT_STAT st1, st2;
+ char *hlink2, *hlink1 = f_name(&hlink_list[i - 1]);
- if (link_stat(
f_name(&hlink_list[i - 1])
, &st1) != 0)
+ if (link_stat(
hlink1
, &st1) != 0)
return;
return;
- if (link_stat(f_name(&hlink_list[i]), &st2) != 0) {
- if (do_link
- (f_name(&hlink_list[i - 1]),
- f_name(&hlink_list[i])) != 0) {
- if (verbose > 0)
+ hlink2 = f_name(&hlink_list[i]);
+ if (link_stat(hlink2, &st2) != 0) {
+ if (do_link(hlink1, hlink2)) {
+ if (verbose > 0) {
rprintf(FINFO, "link %s => %s : %s\n",
rprintf(FINFO, "link %s => %s : %s\n",
- f_name(&hlink_list[i]),
- f_name(&hlink_list[i - 1]),
- strerror(errno));
+ hlink2, hlink1, strerror(errno));
+ }
return;
}
} else {
if (st2.st_dev == st1.st_dev && st2.st_ino == st1.st_ino)
return;
return;
}
} else {
if (st2.st_dev == st1.st_dev && st2.st_ino == st1.st_ino)
return;
- if (robust_unlink(f_name(&hlink_list[i])) != 0 ||
- do_link(f_name(&hlink_list[i - 1]),
- f_name(&hlink_list[i])) != 0) {
- if (verbose > 0)
+ if (robust_unlink(hlink2) || do_link(hlink1, hlink2)) {
+ if (verbose > 0) {
rprintf(FINFO, "link %s => %s : %s\n",
rprintf(FINFO, "link %s => %s : %s\n",
- f_name(&hlink_list[i]),
- f_name(&hlink_list[i - 1]),
- strerror(errno));
+ hlink2, hlink1, strerror(errno));
+ }
return;
}
}
if (verbose > 0)
return;
}
}
if (verbose > 0)
- rprintf(FINFO, "%s => %s\n",
- f_name(&hlink_list[i]),
- f_name(&hlink_list[i - 1]));
+ rprintf(FINFO, "%s => %s\n", hlink2, hlink1);
}
#endif
}
#endif
-/* create any hard links in the flist */
-void do_hard_links(struct file_list *flist)
+
+
+/**
+ * Create any hard links in the global hlink_list. They were put
+ * there by running init_hard_links on the filelist.
+ **/
+void do_hard_links(void)
{
#if SUPPORT_HARD_LINKS
int i;
{
#if SUPPORT_HARD_LINKS
int i;