From cedd25ae8877cb7a465c3b42db7dab20873e162c Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Fri, 14 Jul 2017 16:02:53 +0300 Subject: Fix pg_basebackup output to stdout on Windows. 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.24366.13134@wrigleys.postgresql.org --- src/bin/pg_basebackup/pg_basebackup.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/bin/pg_basebackup/pg_basebackup.c') diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 613f2e159c3..4e3a45f9892 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -806,6 +806,10 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) */ if (strcmp(basedir, "-") == 0) { +#ifdef WIN32 + _setmode(fileno(stdout), _O_BINARY); +#endif + #ifdef HAVE_LIBZ if (compresslevel != 0) { -- cgit v1.2.3