Commit 9d58b964 authored by Tom Lane's avatar Tom Lane

Make pg_dump and pg_restore handle binary archive formats correctly

when using stdout/stdin on Windows.
parent 889f0381
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.103 2005/01/25 22:44:31 tgl Exp $ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.104 2005/01/26 19:44:43 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -29,6 +29,10 @@ ...@@ -29,6 +29,10 @@
#include <ctype.h> #include <ctype.h>
#include <unistd.h> #include <unistd.h>
#ifdef WIN32
#include <io.h>
#endif
#include "pqexpbuffer.h" #include "pqexpbuffer.h"
#include "libpq/libpq-fs.h" #include "libpq/libpq-fs.h"
...@@ -1709,6 +1713,21 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt, ...@@ -1709,6 +1713,21 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
AH->gzOut = 0; AH->gzOut = 0;
AH->OF = stdout; AH->OF = stdout;
/*
* On Windows, we need to use binary mode to read/write non-text archive
* formats. Force stdin/stdout into binary mode in case that is what
* we are using.
*/
#ifdef WIN32
if (fmt != archNull)
{
if (mode == archModeWrite)
setmode(fileno(stdout), O_BINARY);
else
setmode(fileno(stdin), O_BINARY);
}
#endif
#if 0 #if 0
write_msg(modulename, "archive format is %d\n", fmt); write_msg(modulename, "archive format is %d\n", fmt);
#endif #endif
...@@ -1720,7 +1739,6 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt, ...@@ -1720,7 +1739,6 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
switch (AH->format) switch (AH->format)
{ {
case archCustom: case archCustom:
InitArchiveFmt_Custom(AH); InitArchiveFmt_Custom(AH);
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment