Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

RE: PATCH: fix for autoloading and compiling under Cygwin



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@xxxxxxxxxxxxxx]
Sent: Tuesday, December 18, 2001 2:11 AM
To: JohnW@xxxxxxxx; zsh-workers@xxxxxxxxxx
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



Messages sorted by: Reverse Date, Date, Thread, Author