if (!hard_link_one(file, fname, cmpbuf, 1))
goto try_a_copy;
if (preserve_hard_links && F_IS_HLINKED(file))
- finish_hard_link(file, fname, &sxp->st, itemizing, code, j);
+ finish_hard_link(file, fname, ndx, &sxp->st, itemizing, code, j);
if (itemizing && (verbose > 1 || stdout_format_has_i > 1)) {
itemize(cmpbuf, file, ndx, 1, sxp,
ITEM_LOCAL_CHANGE | ITEM_XNAME_FOLLOWS,
}
#ifdef SUPPORT_HARD_LINKS
if (preserve_hard_links && F_IS_HLINKED(file))
- finish_hard_link(file, fname, &sxp->st, itemizing, code, -1);
+ finish_hard_link(file, fname, ndx, &sxp->st, itemizing, code, -1);
#endif
return -2;
}
return j;
}
if (preserve_hard_links && F_IS_HLINKED(file))
- finish_hard_link(file, fname, NULL, itemizing, code, -1);
+ finish_hard_link(file, fname, ndx, NULL, itemizing, code, -1);
} else
#endif
match_level = 2;
itemize(fname, file, ndx, 0, &sx, 0, 0, NULL);
#ifdef SUPPORT_HARD_LINKS
if (preserve_hard_links && F_IS_HLINKED(file))
- finish_hard_link(file, fname, &sx.st, itemizing, code, -1);
+ finish_hard_link(file, fname, ndx, &sx.st, itemizing, code, -1);
#endif
if (remove_source_files == 1)
goto return_with_success;
statret = 1;
}
#ifdef SUPPORT_HARD_LINKS
- if (preserve_hard_links && F_HLINK_NOT_LAST(file))
+ if (preserve_hard_links && F_HLINK_NOT_LAST(file)) {
+ cur_flist->in_progress++;
goto cleanup;
+ }
#endif
if (do_symlink(sl, fname) != 0) {
rsyserr(FERROR, errno, "symlink %s -> \"%s\" failed",
rprintf(code, "%s -> %s\n", fname, sl);
#ifdef SUPPORT_HARD_LINKS
if (preserve_hard_links && F_IS_HLINKED(file))
- finish_hard_link(file, fname, NULL, itemizing, code, -1);
+ finish_hard_link(file, fname, ndx, NULL, itemizing, code, -1);
#endif
/* This does not check remove_source_files == 1
* because this is one of the items that the old
itemize(fname, file, ndx, 0, &sx, 0, 0, NULL);
#ifdef SUPPORT_HARD_LINKS
if (preserve_hard_links && F_IS_HLINKED(file))
- finish_hard_link(file, fname, &sx.st, itemizing, code, -1);
+ finish_hard_link(file, fname, ndx, &sx.st, itemizing, code, -1);
#endif
if (remove_source_files == 1)
goto return_with_success;
statret = 1;
}
#ifdef SUPPORT_HARD_LINKS
- if (preserve_hard_links && F_HLINK_NOT_LAST(file))
+ if (preserve_hard_links && F_HLINK_NOT_LAST(file)) {
+ cur_flist->in_progress++;
goto cleanup;
+ }
#endif
if (verbose > 2) {
rprintf(FINFO, "mknod(%s, 0%o, [%ld,%ld])\n",
rprintf(code, "%s\n", fname);
#ifdef SUPPORT_HARD_LINKS
if (preserve_hard_links && F_IS_HLINKED(file))
- finish_hard_link(file, fname, NULL, itemizing, code, -1);
+ finish_hard_link(file, fname, ndx, NULL, itemizing, code, -1);
#endif
if (remove_source_files == 1)
goto return_with_success;
if (statret != 0) {
#ifdef SUPPORT_HARD_LINKS
- if (preserve_hard_links && F_HLINK_NOT_LAST(file))
+ if (preserve_hard_links && F_HLINK_NOT_LAST(file)) {
+ cur_flist->in_progress++;
goto cleanup;
+ }
#endif
if (stat_errno == ENOENT)
goto notify_others;
itemize(fnamecmp, file, ndx, statret, &sx, 0, 0, NULL);
#ifdef SUPPORT_HARD_LINKS
if (preserve_hard_links && F_IS_HLINKED(file))
- finish_hard_link(file, fname, &sx.st, itemizing, code, -1);
+ finish_hard_link(file, fname, ndx, &sx.st, itemizing, code, -1);
#endif
if (remove_source_files != 1)
goto cleanup;
pretend_missing:
/* pretend the file didn't exist */
#ifdef SUPPORT_HARD_LINKS
- if (preserve_hard_links && F_HLINK_NOT_LAST(file))
+ if (preserve_hard_links && F_HLINK_NOT_LAST(file)) {
+ cur_flist->in_progress++;
goto cleanup;
+ }
#endif
statret = real_ret = -1;
goto notify_others;
if (!do_xfers) {
#ifdef SUPPORT_HARD_LINKS
if (preserve_hard_links && F_IS_HLINKED(file))
- finish_hard_link(file, fname, &sx.st, itemizing, code, -1);
+ finish_hard_link(file, fname, ndx, &sx.st, itemizing, code, -1);
#endif
goto cleanup;
}
while (preserve_hard_links && (ndx = get_hlink_num()) != -1) {
flist = flist_for_ndx(ndx);
assert(flist != NULL);
- file = flist->files[ndx];
+ file = flist->files[ndx - flist->ndx_start];
assert(file->flags & FLAG_HLINKED);
- finish_hard_link(file, f_name(file, fbuf), NULL, itemizing, code, -1);
+ finish_hard_link(file, f_name(file, fbuf), ndx, NULL, itemizing, code, -1);
}
#endif
dflt_perms = (ACCESSPERMS & ~orig_umask);
do {
+#ifdef SUPPORT_HARD_LINKS
+ if (preserve_hard_links && inc_recurse) {
+ while (!flist_eof && file_total < FILECNT_LOOKAHEAD/2)
+ wait_for_receiver();
+ }
+#endif
+
if (inc_recurse && cur_flist->ndx_start) {
struct file_struct *fp = dir_flist->files[cur_flist->parent_ndx];
f_name(fp, fbuf);