- if (link_dest && match_level == 3 && !dry_run) {
- if (do_link(fnamecmpbuf, fname) < 0) {
+ if (link_dest && match_level == 3) {
+ if (hard_link_one(file, ndx, fname, -1, &st,
+ fnamecmpbuf, 1,
+ itemizing && verbose > 1,
+ code) == 0) {
+ if (preserve_hard_links
+ && file->link_u.links) {
+ hard_link_cluster(file, ndx,
+ itemizing,
+ code);
+ }
+ return;
+ }
+ match_level = 2;
+ }
+#endif
+ if (match_level == 2) {
+ /* Copy the file locally. */
+ if (copy_file(fnamecmpbuf, fname, file->mode) < 0) {