- int saveerrno = errno;
- snprintf(fnamecmpbuf,MAXPATHLEN,"%s/%s",compare_dest,fname);
- statret = link_stat(fnamecmpbuf,&st);
- if (!S_ISREG(st.st_mode))
- statret = -1;
- if (statret == -1)
- errno = saveerrno;
- else
- fnamecmp = fnamecmpbuf;
+ pathjoin(fnamecmpbuf, sizeof fnamecmpbuf, compare_dest, fname);
+ if (link_stat(fnamecmpbuf, &st, 0) == 0
+ && S_ISREG(st.st_mode)) {
+#if HAVE_LINK
+ if (link_dest && !dry_run) {
+ if (do_link(fnamecmpbuf, fname) < 0) {
+ if (verbose) {
+ rsyserr(FINFO, errno,
+ "link %s => %s",
+ fnamecmpbuf,
+ safe_fname(fname));
+ }
+ fnamecmp = fnamecmpbuf;
+ }
+ } else
+#endif
+ fnamecmp = fnamecmpbuf;
+ statret = 0;
+ }