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
int low=0,high=hlink_count-1;
- int mid=0,ret=0;
+ int ret=0;
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);
- if (ret == 0) break;
+ if (ret == 0) {
+ low = mid;
+ break;
+ }
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
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 (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) {
- 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 {
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;
}
}
- 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