From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20056 invoked from network); 18 Dec 2001 19:35:27 -0000 Received: from sunsite.dk (130.225.247.90) by ns1.primenet.com.au with SMTP; 18 Dec 2001 19:35:27 -0000 Received: (qmail 13628 invoked by alias); 18 Dec 2001 19:35:18 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 16365 Received: (qmail 13615 invoked from network); 18 Dec 2001 19:35:17 -0000 Message-ID: From: JohnW@bops.com To: zsh-workers@sunsite.dk Subject: RE: PATCH: fix for autoloading and compiling under Cygwin Date: Tue, 18 Dec 2001 13:34:48 -0600 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2653.19) Content-Type: text/plain; charset="iso-8859-1" When bash reads whole files, it uses fstat to find out how much memory to allocate to store the file and then takes the result of read to be the actual length of the file. All the error checks on read just make sure the result isn't negative, except one case that tries to read a single character. That case makes sure read returns 1. Regarding O_BINARY, bash does something similar to what you suggest. Here's the actual code: /* If we're compiling for __EMX__ (OS/2) or __CYGWIN__ (cygwin32 environment on win 95/98/nt), we want to open files with O_BINARY mode so that there is no \n -> \r\n conversion performed. On other systems, we don't want to mess around with O_BINARY at all, so we ensure that it's defined to 0. */ #if defined (__EMX__) || defined (__CYGWIN__) # ifndef O_BINARY # define O_BINARY 0 # endif #else /* !__EMX__ && !__CYGWIN__ */ # undef O_BINARY # define O_BINARY 0 #endif /* !__EMX__ && !__CYGWIN__ */ -----Original Message----- From: Borsenkow Andrej [mailto:Andrej.Borsenkow@mow.siemens.ru] Sent: Tuesday, December 18, 2001 2:11 AM To: JohnW@bops.com; zsh-workers@sunsite.dk Subject: RE: PATCH: fix for autoloading and compiling under Cygwin > > I was actually overlooking writing of zwc files in my first fix. Here's a > new patch that really fixes the problem, with a test case, too. I've done > two things here: > > * I added the O_BINARY flag to all calls to 'open' on zwc files. That is needed in any case and is not harmful at all. Any system that does not support this flag? Should probably add #ifndef O_BINARY #define O_BINARY 0 #endif somewhere in ... zsh.h? > * For text files, I changed the code to treat the result of 'seek' as an > upper bound on the length of the file. For the actual length, the return > value of 'read' is used. Checks that 'seek' and 'read' return the same thing > have been changed to check that 'seek' and 'read' both return nonnegative > values. > I have mixed feelings about it. It needed to be under #ifdef __CYGWIN__ in the first place. It also defeats error checking completely. Have you looked how bash on Cygwin does it? -andrej