- if (list_only)
- return;
-@@ -413,109 +466,39 @@ void recv_generator(char *fname, struct
- }
- #endif
-
-- if (preserve_hard_links && hard_link_check(file, HL_CHECK_MASTER))
-- return;
--
-- if (!S_ISREG(file->mode)) {
-- rprintf(FINFO, "skipping non-regular file \"%s\"\n",fname);
-- return;
-- }
--
-- fnamecmp = fname;
--
-- if (statret == -1 && compare_dest != NULL) {
-- /* try the file at compare_dest instead */
-- int saveerrno = errno;
-- pathjoin(fnamecmpbuf, sizeof fnamecmpbuf, compare_dest, fname);
-- statret = link_stat(fnamecmpbuf, &st, 0);
-- if (!S_ISREG(st.st_mode))
-- statret = -1;
-- if (statret == -1)
-- errno = saveerrno;
--#if HAVE_LINK
-- else if (link_dest && !dry_run) {
-- if (do_link(fnamecmpbuf, fname) != 0) {
-- if (verbose > 0) {
-- rsyserr(FINFO, errno, "link %s => %s",
-- fnamecmpbuf, fname);
-- }
-- }
-- fnamecmp = fnamecmpbuf;
-- }
--#endif
-- else
-- fnamecmp = fnamecmpbuf;
-- }
--
-- if (statret == -1) {
-- if (preserve_hard_links && hard_link_check(file, HL_SKIP))
-- return;
-- if (errno == ENOENT) {
-- write_int(f_out,i);
-- if (!dry_run)
-- write_sum_head(f_out, NULL);
-- } else if (verbose > 1) {
-+ /* Failed to stat for some reason besides "not found". */
-+ if (statret == -1 && errno != ENOENT) {
-+ if (verbose > 1) {
- rsyserr(FERROR, errno,
-- "recv_generator: failed to open %s",
-+ "recv_generator failed to stat %s",
- full_fname(fname));
- }
- return;
- }
-
-- if (!S_ISREG(st.st_mode)) {
-- if (delete_file(fname) != 0) {
-- return;
-- }
-+ if ((fd = open_base_file(file, fname, statret, &st)) == -2)
-+ return;
-
-- /* now pretend the file didn't exist */
-+ if ((disable_deltas_p() || dry_run) && fd != -1) {
-+ close(fd);
-+ fd = -1;