aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2017-07-14 16:02:53 +0300
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2017-07-14 16:03:16 +0300
commit240299806e90e633eb57c12098cce2d8d5246354 (patch)
tree87bf86fdaf908e4513b128bc201463ccbe5c2984 /src
parent26d867875b85665b143300428380059dc52b1c84 (diff)
downloadpostgresql-240299806e90e633eb57c12098cce2d8d5246354.tar.gz
postgresql-240299806e90e633eb57c12098cce2d8d5246354.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_basebackup/pg_basebackup.c4
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index 2805da5fa7b..f24314fff15 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -792,6 +792,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)
{
diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 377ab5f7aae..64aae43e2ff 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -2224,9 +2224,9 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
(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