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
238fc02
..
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)
@@
-71,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
@@
-115,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 (lstat(hlink_list[i-1].name,&st1) != 0) continue;
- if (lstat(hlink_list[i].name,&st2) != 0) {
+ if (l
ink_
stat(hlink_list[i-1].name,&st1) != 0) continue;
+ if (l
ink_
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 {
@@
-127,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