This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: problems with gawk 3.1.5-3 hanging -- more info
- From: Corinna Vinschen <corinna-cygwin at cygwin dot com>
- To: cygwin at cygwin dot com
- Date: Thu, 30 Mar 2006 22:07:57 +0200
- Subject: Re: problems with gawk 3.1.5-3 hanging -- more info
- References: <442C25D0.7030605@pondol.com> <442C3197.7090309@pondol.com>
- Reply-to: cygwin at cygwin dot com
On Mar 30 13:29, David Carter wrote:
> I've taken a look at the differences between -2 and -3; here's the diff:
>
> $ diff -r gawk-3.1.5-2 gawk-3.1.5-3
> diff -r gawk-3.1.5-2/posix/gawkmisc.c gawk-3.1.5-3/posix/gawkmisc.c
> 223a224
> >#include <stdio.h>
> 237a239,244
> >
> >void
> >cygwin_premain2 (int argc, char **argv, struct per_process *myself)
> >{
> > setmode (fileno (stdin), O_TEXT);
> >}
>
> ...that's the only difference between the two source trees.
>
> Not having looked at cygwin-specific source before, I'm going to guess
> that cygwin_premain2 is a hook which is called at program execution
> time, since there is no call to cygwin_premain2 in the source code.
>
> I think the problem is the O_TEXT. If I change this to O_BINARY and
> recompile, everything works swimmingly. The question now is: should the
> file really be opened as O_TEXT, or as O_BINARY?
>
> Can anyone set me straight on this?
O_TEXT is correct because gawk is a text tool in the first place and
it should treat input lines identical, regardless if they have DOS
or UNIX lineendings.
I can't tell why it fails for you, because I can't reproduce this
locally. As for the O_BINARY mode, in theory there's a way to
accomplish that without rebuilding gawk by setting the BINMODE
variable:
gawk -v BINMODE=r [...]
Unfortunately it turns out that this doesn't work because gawk fails
to call the setmode function in this case on Cygwin. I'll upload a
patched gawk soon. If you want to apply it by yourself, try this:
--- posix/gawkmisc.c.ORIG 2006-03-30 22:06:37.429941500 +0200
+++ posix/gawkmisc.c 2006-03-30 21:58:33.918902700 +0200
@@ -207,6 +207,9 @@ int
os_setbinmode(fd, mode)
int fd, mode;
{
+#ifdef __CYGWIN__
+ setmode (fd, mode);
+#endif
return 0;
}
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Red Hat
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/