Re: Opening stdin/stdout in binary mode on Windows

Bruce Momjian <[email protected]>
Newsgroups gmane.comp.db.postgresql.devel.win32
Message-ID <[email protected]>
Well, that is a nifty trick.  Great to have that solved with no
documentation changes required.

Without this fix we were going to have tons of headaches.

---------------------------------------------------------------------------

Tom Lane wrote:
> 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
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [email protected]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster
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.