Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT sourceware DOT cygnus DOT com Delivered-To: mailing list cygwin AT sourceware DOT cygnus DOT com Message-ID: <17B78BDF120BD411B70100500422FC6309E026@IIS000> From: Bernard Dautrevaux To: "'David Bolen'" , "'cygwin AT sourceware DOT cygnus DOT com'" Subject: RE: How is textmode/binmode determined in Cygwin 1.1.0 net releas e for pipes? Date: Fri, 28 Apr 2000 19:09:43 +0200 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2650.21) Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id MAA20348 > -----Original Message----- > From: David Bolen [mailto:db3l AT fitlinxx DOT com] > Sent: Friday, April 28, 2000 7:25 AM > To: 'cygwin AT sourceware DOT cygnus DOT com' > Subject: RE: How is textmode/binmode determined in Cygwin 1.1.0 net > releas e for pipes? > [snipped] > > As I think I mentioned in my original note, I'm using rsync, > so the server > side is just being spawned out of a named pipe server that > happens to be run > from a console window for testing purposes. It's thinking > it's running in > rsh mode so the server just uses stdin/stdout for the > traffic. That's the > rub. > > So, without asking for too much specific help (treading > cautiously here :-)) > - is it possible that line 157 in hinfo.cc should be changed from: > > int bin = __fmode; > > to > > int bin = (__fmode ? __fmode : O_BINARY) > > in order to make the default for stdin/stdout binary even if > CYGWIN isn't > set? That seems to mirror the way that pipe.cc checks things > when it's > making the pipes. > > I haven't yet run a full build of the DLL locally, so I'll > have to schedule > some time tomorrow to do that to test the change locally? > But adding a > setmode(O_BINARY) on both stdin and stdout in the rsync code > did resolve the > problem without having to add the CYGWIN environment variable. > I ran in the same kind of problem some time ago (but was only reading my mail now so was not able to provide any advice before :-|) and I solve it by setting by default stdin as O_TEXT, and stdout as O_BINARY; only when I *know* that I'm reading binary data from the standard input have I to set manually stdin as O_BINARY. The rationale is that I usually read and write text through a file, but would rather write even text in O_BINARY mode so that others don't get bothered by the CR/LF sequences but get simple LF line endings; however if such a brain-damaged program pours on me CR/LFs, they are just automagically converted for me :-) OTOH if I'm reading binary data, I'm used to specify explicitely O_BINARY to read files, so setting it also for pipes doesn't hurt a lot; OK I should agree that this argument may be returned to me for the opposite setting! but the experience shows that pipes are a lot more often conveying text, so having O_TEXT as a default for reading on stdin seems correct more often than being wrong. Of course if we can persuade Micro$oft to abandon CR/LF line endings that would be the perfect solution, but realism asks for trying to live with them :-) so I would propose, in the absence of an explicit setting, that stdin be read as TEXT and stdout written as BINARY. Maybe this could even be an option in CYGWIN: "text" meaning everyting is done in TEXT mode, "binary" everything in BINARY mode and "sane", or insane if you prefer ;-), used for reading as TEXT and writing as BINARY. Just my 2 cents, Bernard -------------------------------------------- Bernard Dautrevaux Microprocess Ingéniérie 97 bis, rue de Colombes 92400 COURBEVOIE FRANCE Tel: +33 (0) 1 47 68 80 80 Fax: +33 (0) 1 47 88 97 85 e-mail: dautrevaux AT microprocess DOT com b DOT dautrevaux AT usa DOT net -------------------------------------------- -- Want to unsubscribe from this list? Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com