- if (!get_tmpname(fnametmp,fname)) {
- discard_receive_data(f_in, F_LENGTH(file));
- if (fd1 != -1)
- close(fd1);
- if (inc_recurse)
- send_msg_int(MSG_NO_SEND, ndx);
- continue;
- }
-
- /* we initially set the perms without the
- * setuid/setgid bits to ensure that there is no race
- * condition. They are then correctly updated after
- * the lchown. Thanks to snabb@epipe.fi for pointing
- * this out. We also set it initially without group
- * access because of a similar race condition. */
- fd2 = do_mkstemp(fnametmp, file->mode & INITACCESSPERMS);
-
- /* in most cases parent directories will already exist
- * because their information should have been previously
- * transferred, but that may not be the case with -R */
- if (fd2 == -1 && relative_paths && errno == ENOENT
- && create_directory_path(fnametmp) == 0) {
- /* Get back to name with XXXXXX in it. */
- get_tmpname(fnametmp, fname);
- fd2 = do_mkstemp(fnametmp, file->mode & INITACCESSPERMS);
- }
- if (fd2 == -1) {
- rsyserr(FERROR, errno, "mkstemp %s failed",
- full_fname(fnametmp));
- discard_receive_data(f_in, F_LENGTH(file));
- if (fd1 != -1)
- close(fd1);
- if (inc_recurse)
- send_msg_int(MSG_NO_SEND, ndx);
- continue;
- }
+ fd2 = open_tmpfile(fnametmp, fname, file);
+ if (fd2 != -1)
+ cleanup_set(fnametmp, partialptr, file, fd1, fd2);
+ }