- fd2 = do_open(fnametmp,O_WRONLY|O_CREAT|O_EXCL,
- file->mode & INITACCESSPERMS);
-
- if (fd2 == -1 && errno == ENOENT &&
- (relative_paths || (compare_dest != NULL)) &&
- create_directory_path(fnametmp) == 0) {
- fd2 = do_open(fnametmp,O_WRONLY|O_CREAT|O_EXCL,
- file->mode & INITACCESSPERMS);
+ fd2 = do_mkstemp(fnametmp, file->mode & INITACCESSPERMS);
+ if (fd2 == -1) {
+ rprintf(FERROR,"mkstemp %s failed: %s\n",fnametmp,strerror(errno));
+ receive_data(f_in,buf,-1,NULL,file->length);
+ if (buf) unmap_file(buf);
+ if (fd1 != -1) close(fd1);
+ continue;
+ }
+
+ /* 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, orig_umask) == 0) {
+ strlcpy(fnametmp, template, sizeof(fnametmp));
+ fd2 = do_mkstemp(fnametmp, file->mode & INITACCESSPERMS);