From: Gerrit P. Haase <gp@familiehaase.de>
Date: Thu, 28 Aug 2003 08:18:51 +0000 (+0200)
Subject: A new try at
X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=95005ad8d24eb76af265f09ad25a68a8b76bf3ae;p=p5sagit%2Fp5-mst-13.2.git

A new try at

Subject: [PATCH] maint / blead tweaks in perlio.c for Cygwin
From: "Gerrit P. Haase" <gp@familiehaase.de>
Message-ID: <4157199551.20030828081851@familiehaase.de>

(this time Cygwin only)

p4raw-id: //depot/perl@20954
---

diff --git a/perlio.c b/perlio.c
index a508b64..4de214d 100644
--- a/perlio.c
+++ b/perlio.c
@@ -2609,7 +2609,7 @@ PerlIOStdio_mode(const char *mode, char *tmode)
     while (*mode) {
 	*tmode++ = *mode++;
     }
-#ifdef PERLIO_USING_CRLF
+#if defined(PERLIO_USING_CRLF) || defined(__CYGWIN__)
     *tmode++ = 'b';
 #endif
     *tmode = '\0';
@@ -2710,15 +2710,23 @@ PerlIOStdio_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
 		fd = PerlLIO_open3(path, imode, perm);
 	    }
 	    else {
-		FILE *stdio = PerlSIO_fopen(path, mode);
+	        FILE *stdio;
+	        bool appended = FALSE;
+#ifdef __CYGWIN__
+		/* Cygwin wants its 'b' early. */
+		appended = TRUE;
+		mode = PerlIOStdio_mode(mode, tmode);
+#endif
+		stdio = PerlSIO_fopen(path, mode);
 		if (stdio) {
 		    PerlIOStdio *s;
 		    if (!f) {
 			f = PerlIO_allocate(aTHX);
 		    }
-		    if ((f = PerlIO_push(aTHX_ f, self,
-				    (mode = PerlIOStdio_mode(mode, tmode)),
-				    PerlIOArg))) {
+		    if (!appended)
+		        mode = PerlIOStdio_mode(mode, tmode);
+		    f = PerlIO_push(aTHX_ f, self, mode, PerlIOArg);
+		    if (f) {
 			s = PerlIOSelf(f, PerlIOStdio);
 			s->stdio = stdio;
 			PerlIOUnix_refcnt_inc(fileno(s->stdio));