Win32 passes all but t/lib/peek.t with perlio and home-grown crlf.
Nick Ing-Simmons [Thu, 23 Nov 2000 23:04:05 +0000 (23:04 +0000)]
peek fail is showing a real problem (multiple crlf layers
       are getting pushed.)

p4raw-id: //depot/perlio@7843

doio.c
perlio.c
win32/makefile.mk

diff --git a/doio.c b/doio.c
index 914f91c..bf4d878 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -528,7 +528,7 @@ Perl_do_open9(pTHX_ GV *gv, register char *name, I32 len, int as_raw,
                }
            }
        }
-       else if (O_BINARY != O_TEXT) {
+       else if (O_BINARY != O_TEXT && IoTYPE(io) != IoTYPE_STD) {
            type = ":crlf";
        }
     }
index 697fc86..69aba4b 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -2156,12 +2156,36 @@ PerlIOCrlf_set_ptrcnt(PerlIO *f, STDCHAR *ptr, SSize_t cnt)
   PerlIO_get_base(f);
  if (!ptr)
   {
-   ptr = ((c->nl) ? (c->nl+1) : b->end) - cnt;
+   if (c->nl)
+    ptr = c->nl+1;
+   else
+    {
+     ptr = b->end;
+     if (ptr > b->buf && ptr[-1] == 0xd)
+      ptr--;
+    }
+   ptr -= cnt;
   }
  else
   {
-   if (ptr != (((c->nl) ? (c->nl+1) : b->end) - cnt))
-    abort();
+   /* Test code - delete when it works ... */
+   STDCHAR *chk;
+   if (c->nl)
+    chk = c->nl+1;
+   else
+    {
+     chk = b->end;
+     if (chk > b->buf && chk[-1] == 0xd)
+      chk--;
+    }
+   chk -= cnt;
+   
+   if (ptr != chk)
+    {
+     dTHX;
+     Perl_croak(aTHX_ "ptr wrong %p != %p nl=%p e=%p for %d",
+                ptr, chk, c->nl, b->end, cnt);    
+    }
   }
  if (c->nl)
   {
index 5ccba23..ad5429d 100644 (file)
@@ -371,7 +371,7 @@ a = .a
 # Options
 #
 
-INCLUDES       = -I$(COREDIR) -I.\include -I. -I..
+INCLUDES       = -I.\include -I. -I.. -I$(COREDIR) 
 DEFINES                = -DWIN32 $(CRYPT_FLAG)
 LOCDEFS                = -DPERLDLL -DPERL_CORE
 SUBSYS         = console