Hallo Jarkko,
currently I'm applying one additional patch to the perl sources when
building for Cygwin. There seems to be a problem with binmode() since
I removed Cygwin from the DOSISH platforms, see e.g. this bug report:
http://www.cygwin.com/ml/cygwin/2003-08/msg01409.html
The patch is 'donated' by Don Slutz which he found during his research
he did because of a bug which he also reported:
http://rt.perl.org/rt2/Ticket/Display.html?id=10007
He also donated a little testsuite to test different perlio
settings on Cygwin textmode and binmode mounts and it works pretty
well with his patch applied.
Though, would be interesting to hear from NIS about this change, if it
makes sense and what it does at all since I cannot claim to understand
this and most of the rest of perlio.
If this patch gets applied, RT #10007 can be closed.
--- perl-5.8.1/perlio.c~ 2003-07-13 02:51:57.000000000 +0200
+++ perl-5.8.1/perlio.c 2003-07-13 02:55:48.000000000 +0200
@@ -2484,7 +2484,7 @@ PerlIOStdio_mode(const char *mode, char
while (*mode) {
*tmode++ = *mode++;
}
-#ifdef PERLIO_USING_CRLF
+#if defined(PERLIO_USING_CRLF) || defined(__CYGWIN__)
*tmode++ = 'b';
#endif
*tmode = '\0';
@@ -2585,15 +2585,23 @@ PerlIOStdio_open(pTHX_ PerlIO_funcs *sel
fd = PerlLIO_open3(path, imode, perm);
}
else {
+#ifdef __CYGWIN__
+ FILE *stdio = PerlSIO_fopen(path, (mode = PerlIOStdio_mode(mode, tmode)));
+#else
FILE *stdio = PerlSIO_fopen(path, mode);
+#endif
if (stdio) {
PerlIOStdio *s;
if (!f) {
f = PerlIO_allocate(aTHX);
}
+#ifdef __CYGWIN__
+ if ((f = PerlIO_push(aTHX_ f, self, mode, PerlIOArg))) {
+#else
if ((f = PerlIO_push(aTHX_ f, self,
(mode = PerlIOStdio_mode(mode, tmode)),
PerlIOArg))) {
+#endif
s = PerlIOSelf(f, PerlIOStdio);
s->stdio = stdio;
PerlIOUnix_refcnt_inc(fileno(s->stdio));
# END
Gerrit
--
=^..^=
Thread Next