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
*** empty log message ***
[rsync/rsync.git]
/
hlink.c
diff --git
a/hlink.c
b/hlink.c
index
3213b2e
..
43f14ea
100644
(file)
--- a/
hlink.c
+++ b/
hlink.c
@@
-21,6
+21,7
@@
extern int am_server;
extern int dry_run;
extern int am_server;
extern int dry_run;
+extern int verbose;
#if SUPPORT_HARD_LINKS
static int hlink_compare(struct file_struct *f1,struct file_struct *f2)
#if SUPPORT_HARD_LINKS
static int hlink_compare(struct file_struct *f1,struct file_struct *f2)
@@
-54,7
+55,9
@@
void init_hard_links(struct file_list *flist)
(struct file_struct *)malloc(sizeof(hlink_list[0])*flist->count)))
out_of_memory("init_hard_links");
(struct file_struct *)malloc(sizeof(hlink_list[0])*flist->count)))
out_of_memory("init_hard_links");
- bcopy((char *)flist->files,hlink_list,sizeof(hlink_list[0])*flist->count);
+ bcopy((char *)flist->files,
+ (char *)hlink_list,
+ sizeof(hlink_list[0])*flist->count);
qsort(hlink_list,flist->count,
sizeof(hlink_list[0]),
qsort(hlink_list,flist->count,
sizeof(hlink_list[0]),
@@
-69,27
+72,30
@@
void init_hard_links(struct file_list *flist)
int check_hard_link(struct file_struct *file)
{
#if SUPPORT_HARD_LINKS
int check_hard_link(struct file_struct *file)
{
#if SUPPORT_HARD_LINKS
- int low=0,high=hlink_count;
- int
mid=0,
ret=0;
+ int low=0,high=hlink_count
-1
;
+ int ret=0;
if (!hlink_list || !S_ISREG(file->mode)) return 0;
while (low != high) {
if (!hlink_list || !S_ISREG(file->mode)) return 0;
while (low != high) {
- mid = (low+high)/2;
+
int
mid = (low+high)/2;
ret = hlink_compare(&hlink_list[mid],file);
ret = hlink_compare(&hlink_list[mid],file);
- if (ret == 0) break;
+ if (ret == 0) {
+ low = mid;
+ break;
+ }
if (ret > 0)
high=mid;
else
low=mid+1;
}
if (ret > 0)
high=mid;
else
low=mid+1;
}
- if (hlink_compare(&hlink_list[
mid
],file) != 0) return 0;
+ if (hlink_compare(&hlink_list[
low
],file) != 0) return 0;
- if (
mid
> 0 &&
- S_ISREG(hlink_list[
mid
-1].mode) &&
- file->dev == hlink_list[
mid
-1].dev &&
- file->inode == hlink_list[
mid
-1].inode)
+ if (
low
> 0 &&
+ S_ISREG(hlink_list[
low
-1].mode) &&
+ file->dev == hlink_list[
low
-1].dev &&
+ file->inode == hlink_list[
low
-1].inode)
return 1;
#endif
return 1;
#endif
@@
-113,11
+119,13
@@
void do_hard_links(struct file_list *flist)
hlink_list[i].inode == hlink_list[i-1].inode) {
struct stat st1,st2;
hlink_list[i].inode == hlink_list[i-1].inode) {
struct stat st1,st2;
- if (stat(hlink_list[i-1].name,&st1) != 0) continue;
- if (stat(hlink_list[i].name,&st2) != 0) {
+ if (
link_
stat(hlink_list[i-1].name,&st1) != 0) continue;
+ if (
link_
stat(hlink_list[i].name,&st2) != 0) {
if (!dry_run && link(hlink_list[i-1].name,hlink_list[i].name) != 0) {
if (!dry_run && link(hlink_list[i-1].name,hlink_list[i].name) != 0) {
- fprintf(FINFO,"link %s => %s : %s\n",
- hlink_list[i].name,hlink_list[i-1].name,strerror(errno));
+ if (verbose > 0)
+ fprintf(FINFO,"link %s => %s : %s\n",
+ hlink_list[i].name,
+ hlink_list[i-1].name,strerror(errno));
continue;
}
} else {
continue;
}
} else {
@@
-125,13
+133,16
@@
void do_hard_links(struct file_list *flist)
if (!dry_run && (unlink(hlink_list[i].name) != 0 ||
link(hlink_list[i-1].name,hlink_list[i].name) != 0)) {
if (!dry_run && (unlink(hlink_list[i].name) != 0 ||
link(hlink_list[i-1].name,hlink_list[i].name) != 0)) {
- fprintf(FINFO,"link %s => %s : %s\n",
- hlink_list[i].name,hlink_list[i-1].name,strerror(errno));
+ if (verbose > 0)
+ fprintf(FINFO,"link %s => %s : %s\n",
+ hlink_list[i].name,
+ hlink_list[i-1].name,strerror(errno));
continue;
}
}
continue;
}
}
- fprintf(FINFO,"%s => %s\n",
- hlink_list[i].name,hlink_list[i-1].name);
+ if (verbose > 0)
+ fprintf(FINFO,"%s => %s\n",
+ hlink_list[i].name,hlink_list[i-1].name);
}
}
#endif
}
}
#endif