User-defined character properties were unintentionally
[p5sagit/p5-mst-13.2.git] / perlio.c
index 1253696..60346b5 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -2537,8 +2537,7 @@ PerlIOStdio_close(pTHX_ PerlIO *f)
     FILE *stdio = PerlIOSelf(f, PerlIOStdio)->stdio;
     if (PerlIOUnix_refcnt_dec(fileno(stdio)) > 0) {
        /* Do not close it but do flush any buffers */
-       PerlIO_flush(f);
-       return 0;
+        return PerlIO_flush(f);
     }
     return (
 #ifdef SOCKS5_VERSION_NAME
@@ -2891,18 +2890,23 @@ PerlIOBuf_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
                return NULL;
            } else {
                fd = PerlIO_fileno(f);
-#ifdef PERLIO_USING_CRLF
-               /*
-                * do something about failing setmode()? --jhi
-                */
-               PerlLIO_setmode(fd, O_BINARY);
-#endif
                if (init && fd == 2) {
                    /*
                     * Initial stderr is unbuffered
                     */
                    PerlIOBase(f)->flags |= PERLIO_F_UNBUF;
                }
+#ifdef PERLIO_USING_CRLF
+#  ifdef PERLIO_IS_BINMODE_FD
+               if (PERLIO_IS_BINMODE_FD(fd))
+                   PerlIO_binmode(f,  '<'/*not used*/, O_BINARY, Nullch);
+               else
+#  endif
+               /*
+                * do something about failing setmode()? --jhi
+                */
+               PerlLIO_setmode(fd, O_BINARY);
+#endif
            }
        }
     }
@@ -3558,7 +3562,6 @@ PerlIOCrlf_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     PerlIOCrlf *c = PerlIOSelf(f, PerlIOCrlf);
-    IV flags = PerlIOBase(f)->flags;
     if (!b->buf)
        PerlIO_get_base(f);
     if (!ptr) {
@@ -3575,10 +3578,11 @@ PerlIOCrlf_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt)
        ptr -= cnt;
     }
     else {
-#if 1
+#if 0
        /*
         * Test code - delete when it works ...
         */
+       IV flags = PerlIOBase(f)->flags;
        STDCHAR *chk = (c->nl) ? (c->nl+1) : b->end;
         if (ptr+cnt == c->nl && c->nl+1 == b->end && *c->nl == 0xd) {
          /* Defered CR at end of buffer case - we lied about count */