When writing a backup to stdout with pg_basebackup on Windows, put stdout
to binary mode. Any CR bytes in the output will otherwise be output
incorrectly as CR+LF.
In the passing, standardize on using "_setmode" instead of "setmode", for
the sake of consistency. They both do the same thing, but according to
MSDN documentation, setmode is deprecated.
Fixes bug #14634, reported by Henry Boehlert. Patch by Haribabu Kommi.
Backpatch to all supported versions.
Discussion: https://www.postgresql.org/message-id/
20170428082818[email protected]
*/
if (strcmp(basedir, "-") == 0)
{
+#ifdef WIN32
+ _setmode(fileno(stdout), _O_BINARY);
+#endif
+
#ifdef HAVE_LIBZ
if (compresslevel != 0)
{
(AH->fSpec == NULL || strcmp(AH->fSpec, "") == 0))
{
if (mode == archModeWrite)
- setmode(fileno(stdout), O_BINARY);
+ _setmode(fileno(stdout), O_BINARY);
else
- setmode(fileno(stdin), O_BINARY);
+ _setmode(fileno(stdin), O_BINARY);
}
#endif