From: Gerrit P. Haase <gp@familiehaase.de>
Date: Thu, 28 Aug 2003 08:18:51 +0000 (+0200)
Subject: maint / blead tweaks in perlio.c for Cygwin
X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=1403d6bf1ee303dd613942fa2f6df0519a053ba6;p=p5sagit%2Fp5-mst-13.2.git

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

(changed so that the 'b' is always appended)

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

diff --git a/perlio.c b/perlio.c
index a508b64..7ee1eda 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,25 +2710,28 @@ PerlIOStdio_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
 		fd = PerlLIO_open3(path, imode, perm);
 	    }
 	    else {
-		FILE *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))) {
-			s = PerlIOSelf(f, PerlIOStdio);
-			s->stdio = stdio;
-			PerlIOUnix_refcnt_inc(fileno(s->stdio));
-		    }
-		    return f;
-		}
-		else {
-		    return NULL;
-		}
+		 /* Append the 'b' - more correct for CRLF platforms
+		  * and Cygwin and should be harmless (since it's a
+		  * no-op) elsewhere. */
+		 mode = PerlIOStdio_mode(mode, tmode);
+		 {
+		      FILE *stdio = PerlSIO_fopen(path, mode);
+		      if (stdio) {
+			   PerlIOStdio *s;
+			   if (!f) {
+				f = PerlIO_allocate(aTHX);
+			   }
+			   if ((f = PerlIO_push(aTHX_ f, self,
+						mode, PerlIOArg))) {
+				s = PerlIOSelf(f, PerlIOStdio);
+				s->stdio = stdio;
+				PerlIOUnix_refcnt_inc(fileno(s->stdio));
+			  }
+			  return f;
+		      }
+		 }
 	    }
+	    return NULL;
 	}
 	if (fd >= 0) {
 	    FILE *stdio = NULL;