- if (statret == -1) {
- if (errno == ENOENT) {
- write_int(f_out,i);
- if (!dry_run) write_sum_head(f_out, NULL);
- } else {
- if (verbose > 1)
- rprintf(FERROR, RSYNC_NAME
- ": recv_generator failed to open \"%s\": %s\n",
- fname, strerror(errno));
+ if (statret == 0 && !S_ISREG(st.st_mode)) {
+ int dflag = S_ISDIR(st.st_mode) ? DEL_DIR : 0;
+ if (delete_file(fname, dflag | DEL_TERSE) != 0)
+ return;
+ statret = -1;
+ stat_errno = ENOENT;
+ }
+
+ if (partial_dir && (partialptr = partial_dir_fname(fname)) != NULL
+ && link_stat(partialptr, &partial_st, 0) == 0
+ && S_ISREG(partial_st.st_mode)) {
+ if (statret == -1)
+ goto prepare_to_open;
+ } else
+ partialptr = NULL;
+
+ if (statret == -1 && fuzzy_basis && dry_run <= 1) {
+ int j = find_fuzzy(file, fuzzy_dirlist);
+ if (j >= 0) {
+ fuzzy_file = fuzzy_dirlist->files[j];
+ f_name_to(fuzzy_file, fnamecmpbuf);
+ if (verbose > 2) {
+ rprintf(FINFO, "fuzzy basis selected for %s: %s\n",
+ safe_fname(fname), safe_fname(fnamecmpbuf));
+ }
+ st.st_mode = fuzzy_file->mode;
+ st.st_size = fuzzy_file->length;
+ st.st_mtime = fuzzy_file->modtime;
+ statret = 0;
+ fnamecmp = fnamecmpbuf;
+ fnamecmp_type = FNAMECMP_FUZZY;