]> granicus.if.org Git - postgresql/commitdiff
Fix pg_basebackup output to stdout on Windows.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 14 Jul 2017 13:02:53 +0000 (16:02 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 14 Jul 2017 13:03:05 +0000 (16:03 +0300)
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
src/bin/pg_dump/pg_backup_archiver.c

index 613f2e159c3b2091d73d31200c1e0ae050d51f96..4e3a45f98928f4444c4f17116d6923a7c80983e6 100644 (file)
@@ -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)
                        {
index a23b070c0e818359cc11d86b454416cca6a1e9f4..6483563f3d7a3eb87a0e6e301d9441e6ee7c9d77 100644 (file)
@@ -2337,9 +2337,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