Re: Opening stdin/stdout in binary mode on Windows

Tom Lane <[email protected]>
Newsgroups gmane.comp.db.postgresql.devel.win32
Message-ID <[email protected]>
I wrote:
> Can anyone suggest a way that does work to do binary I/O
> on stdout?  What about reading from stdin?

After a bit of googling I came up with the attached patch.  I am not in
a position to test it, however.  Can anyone try it out?

			regards, tom lane

*** src/bin/pg_dump/pg_backup_archiver.c~	Tue Jan 25 17:44:31 2005
--- src/bin/pg_dump/pg_backup_archiver.c	Wed Jan 26 13:34:33 2005
***************
*** 29,34 ****
--- 29,38 ----
  #include <ctype.h>
  #include <unistd.h>
  
+ #ifdef WIN32
+ #include <io.h>
+ #endif
+ 
  #include "pqexpbuffer.h"
  #include "libpq/libpq-fs.h"
  
***************
*** 1709,1714 ****
--- 1713,1731 ----
  	AH->gzOut = 0;
  	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)
+ 	{
+ 		setmode(fileno(stdout), O_BINARY);
+ 		setmode(fileno(stdin), O_BINARY);
+ 	}
+ #endif
+ 
  #if 0
  	write_msg(modulename, "archive format is %d\n", fmt);
  #endif

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
      subscribe-nomail command to [email protected] so that your
      message can get through to the mailing list cleanly
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.