It's hard to imagine why this would make a difference on a real system,
because the file descriptor obtained from open() is passed to fdopen(),
which is documented to determine whether the stream is text or binary
based on the mode string. However, bug #40223 implies that it makes a
difference. I hope that this commit fixes the problem (if any!).
Thanks to the anonymous submitter of bug #40223.
rf->tmp_name = convert_to_filename_encoding (rf->tmp_name_verbatim, strlen (rf->tmp_name_verbatim), fh_get_file_name_encoding (fh));
/* Create file by that name. */
- fd = Topen (rf->tmp_name, O_WRONLY | O_CREAT | O_EXCL | O_BINARY, permissions);
+ bool binary = strchr (mode, 'b') != NULL;
+ fd = Topen (rf->tmp_name,
+ O_WRONLY | O_CREAT | O_EXCL | (binary ? O_BINARY : O_TEXT),
+ permissions);
if (fd >= 0)
break;
if (errno != EEXIST)