Mailing-List: contact cygwin-apps-help AT sourceware DOT cygnus DOT com; run by ezmlm Sender: cygwin-apps-owner AT sourceware DOT cygnus DOT com List-Subscribe: List-Archive: List-Post: List-Help: , Delivered-To: mailing list cygwin-apps AT sources DOT redhat DOT com Date: Mon, 23 Apr 2001 00:36:23 +0200 From: Corinna Vinschen To: cygapp Subject: Re: ash stdin mode is set to O_TEXT Message-ID: <20010423003623.W15499@cygbert.vinschen.de> Mail-Followup-To: cygapp References: <11216876326 DOT 20010421202556 AT logos-m DOT ru> <20010421131957 DOT B4033 AT redhat DOT com> <20010422135957 DOT O15499 AT cygbert DOT vinschen DOT de> <3AE2DBAC DOT 749E6F98 AT yahoo DOT com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <3AE2DBAC.749E6F98@yahoo.com>; from earnie_boyd@yahoo.com on Sun, Apr 22, 2001 at 09:25:00AM -0400 On Sun, Apr 22, 2001 at 09:25:00AM -0400, Earnie Boyd wrote: > Corinna Vinschen wrote: > > > > On Sat, Apr 21, 2001 at 01:19:57PM -0400, Christopher Faylor wrote: > > > On Sat, Apr 21, 2001 at 08:25:56PM +0400, egor duda wrote: > > > >ash stdin mode is set to O_TEXT, so it's impossible to checkin/chechout > > > >binary files from cvs when CVS_RSH is sh script. > > > > > > > >maybe O_TEXT should be set only in interactive mode? or shouldn't be > > > >set at all? > > > > > > Corinna and I have discussed this in the past. The problem is that the > > > 'read' command should always be text mode whether it is interactive or > > > not. Also, if sh is reading a shell script via: > > > > > > sh < foo > > > > > > the input should be in O_TEXT mode. > > > > > > But then, if ash is reading from a pipe, stdin should, IMO, be in binary > > > mode. > > > > That's really tricky: > > > > sh < foo O_TEXT? > > cat foo | sh O_BINARY? > > > > Correct, and from what I remember of the bash code it knows when it's > about to read/write from/to a pipe/redirect. Wouldn't you just use the > appropriate setmode on the duplicated file handle? I'm not sure if I understand you right. Do you mean sth. like that: struct stat s; fstat(STDIN_FILENO, &s); if (S_ISCHR(s.st_mode) || S_ISREG(s.st_mode)) setmode(STDIN_FILENO, O_TEXT); else setmode(STDIN_FILENO, O_BINARY); ? Corinna