Add at least the "important" PerlIO_xxxx functions to embed.pl
[p5sagit/p5-mst-13.2.git] / perlio.c
index c45c71a..173907e 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -450,7 +450,7 @@ PerlIO_fdupopen(pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags)
     if (f && *f) {
        PerlIO_funcs *tab = PerlIOBase(f)->tab;
        PerlIO *new;
-       PerlIO_debug("fdupopen f=%p param=%p\n",f,param);
+       PerlIO_debug("fdupopen f=%p param=%p\n",(void*)f,(void*)param);
         new = (*tab->Dup)(aTHX_ PerlIO_allocate(aTHX),f,param, flags);
        return new;
     }
@@ -603,14 +603,14 @@ PerlIO_pop(pTHX_ PerlIO *f)
 {
     PerlIOl *l = *f;
     if (l) {
-       PerlIO_debug("PerlIO_pop f=%p %s\n", f, l->tab->name);
+       PerlIO_debug("PerlIO_pop f=%p %s\n", (void*)f, l->tab->name);
        if (l->tab->Popped) {
            /*
             * If popped returns non-zero do not free its layer structure
             * it has either done so itself, or it is shared and still in
             * use
             */
-           if ((*l->tab->Popped) (f) != 0)
+           if ((*l->tab->Popped) (aTHX_ f) != 0)
                return;
        }
        *f = l->next;;
@@ -632,7 +632,7 @@ PerlIO_find_layer(pTHX_ const char *name, STRLEN len, int load)
     for (i = 0; i < PL_known_layers->cur; i++) {
        PerlIO_funcs *f = PL_known_layers->array[i].funcs;
        if (memEQ(f->name, name, len)) {
-           PerlIO_debug("%.*s => %p\n", (int) len, name, f);
+           PerlIO_debug("%.*s => %p\n", (int) len, name, (void*)f);
            return f;
        }
     }
@@ -763,7 +763,7 @@ PerlIO_define_layer(pTHX_ PerlIO_funcs *tab)
     if (!PL_known_layers)
        PL_known_layers = PerlIO_list_alloc(aTHX);
     PerlIO_list_push(aTHX_ PL_known_layers, tab, Nullsv);
-    PerlIO_debug("define %s %p\n", tab->name, tab);
+    PerlIO_debug("define %s %p\n", tab->name, (void*)tab);
 }
 
 int
@@ -859,7 +859,7 @@ void
 PerlIO_default_buffer(pTHX_ PerlIO_list_t *av)
 {
     PerlIO_funcs *tab = &PerlIO_perlio;
-#ifdef PERLIO_CRLF
+#ifdef PERLIO_USING_CRLF
     tab = &PerlIO_crlf;
 #else
     if (PerlIO_stdio.Set_ptrcnt)
@@ -971,9 +971,9 @@ PerlIO_push(pTHX_ PerlIO *f, PerlIO_funcs *tab, const char *mode, SV *arg)
        l->next = *f;
        l->tab = tab;
        *f = l;
-       PerlIO_debug("PerlIO_push f=%p %s %s %p\n", f, tab->name,
-                    (mode) ? mode : "(Null)", arg);
-       if ((*l->tab->Pushed) (f, mode, arg) != 0) {
+       PerlIO_debug("PerlIO_push f=%p %s %s %p\n", (void*)f, tab->name,
+                    (mode) ? mode : "(Null)", (void*)arg);
+       if ((*l->tab->Pushed) (aTHX_ f, mode, arg) != 0) {
            PerlIO_pop(aTHX_ f);
            return NULL;
        }
@@ -982,9 +982,8 @@ PerlIO_push(pTHX_ PerlIO *f, PerlIO_funcs *tab, const char *mode, SV *arg)
 }
 
 IV
-PerlIOPop_pushed(PerlIO *f, const char *mode, SV *arg)
+PerlIOPop_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg)
 {
-    dTHX;
     PerlIO_pop(aTHX_ f);
     if (*f) {
        PerlIO_flush(f);
@@ -995,12 +994,11 @@ PerlIOPop_pushed(PerlIO *f, const char *mode, SV *arg)
 }
 
 IV
-PerlIORaw_pushed(PerlIO *f, const char *mode, SV *arg)
+PerlIORaw_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg)
 {
     /*
      * Remove the dummy layer
      */
-    dTHX;
     PerlIO_pop(aTHX_ f);
     /*
      * Pop back to bottom layer
@@ -1021,7 +1019,7 @@ PerlIORaw_pushed(PerlIO *f, const char *mode, SV *arg)
                break;
            }
        }
-       PerlIO_debug(":raw f=%p :%s\n", f, PerlIOBase(f)->tab->name);
+       PerlIO_debug(":raw f=%p :%s\n", (void*)f, PerlIOBase(f)->tab->name);
        return 0;
     }
     return -1;
@@ -1071,12 +1069,12 @@ int
 PerlIO_binmode(pTHX_ PerlIO *f, int iotype, int mode, const char *names)
 {
     PerlIO_debug("PerlIO_binmode f=%p %s %c %x %s\n",
-                f, PerlIOBase(f)->tab->name, iotype, mode,
+                (void*)f, PerlIOBase(f)->tab->name, iotype, mode,
                 (names) ? names : "(Null)");
     /* Can't flush if switching encodings. */
     if (!(names && memEQ(names, ":encoding(", 10))) {
         PerlIO_flush(f);
-#ifdef PERLIO_CRLF
+#ifdef PERLIO_USING_CRLF
        if (!names && (mode & O_BINARY)) {
            PerlIO *top = f;
            while (*top) {
@@ -1093,26 +1091,23 @@ PerlIO_binmode(pTHX_ PerlIO *f, int iotype, int mode, const char *names)
     return PerlIO_apply_layers(aTHX_ f, NULL, names) == 0 ? TRUE : FALSE;
 }
 
-#undef PerlIO__close
 int
-PerlIO__close(PerlIO *f)
+PerlIO__close(pTHX_ PerlIO *f)
 {
     if (f && *f)
-       return (*PerlIOBase(f)->tab->Close) (f);
+       return (*PerlIOBase(f)->tab->Close) (aTHX_ f);
     else {
        SETERRNO(EBADF, SS$_IVCHAN);
        return -1;
     }
 }
 
-#undef PerlIO_close
 int
-PerlIO_close(PerlIO *f)
+Perl_PerlIO_close(pTHX_ PerlIO *f)
 {
-    dTHX;
     int code = -1;
     if (f && *f) {
-       code = (*PerlIOBase(f)->tab->Close) (f);
+       code = (*PerlIOBase(f)->tab->Close) (aTHX_ f);
        while (*f) {
            PerlIO_pop(aTHX_ f);
        }
@@ -1120,12 +1115,11 @@ PerlIO_close(PerlIO *f)
     return code;
 }
 
-#undef PerlIO_fileno
 int
-PerlIO_fileno(PerlIO *f)
+Perl_PerlIO_fileno(pTHX_ PerlIO *f)
 {
     if (f && *f)
-       return (*PerlIOBase(f)->tab->Fileno) (f);
+       return (*PerlIOBase(f)->tab->Fileno) (aTHX_ f);
     else {
        SETERRNO(EBADF, SS$_IVCHAN);
        return -1;
@@ -1290,8 +1284,8 @@ PerlIO_openn(pTHX_ const char *layers, const char *mode, int fd,
                Perl_croak(aTHX_ "More than one argument to open(,':%s')",tab->name);
            }
            PerlIO_debug("openn(%s,'%s','%s',%d,%x,%o,%p,%d,%p)\n",
-                        tab->name, layers, mode, fd, imode, perm, f, narg,
-                        args);
+                        tab->name, layers, mode, fd, imode, perm,
+                        (void*)f, narg, (void*)args);
            f = (*tab->Open) (aTHX_ tab, layera, n, mode, fd, imode, perm,
                              f, narg, args);
            if (f) {
@@ -1313,110 +1307,78 @@ PerlIO_openn(pTHX_ const char *layers, const char *mode, int fd,
 }
 
 
-#undef PerlIO_fdopen
-PerlIO *
-PerlIO_fdopen(int fd, const char *mode)
-{
-    dTHX;
-    return PerlIO_openn(aTHX_ Nullch, mode, fd, 0, 0, NULL, 0, NULL);
-}
-
-#undef PerlIO_open
-PerlIO *
-PerlIO_open(const char *path, const char *mode)
-{
-    dTHX;
-    SV *name = sv_2mortal(newSVpvn(path, strlen(path)));
-    return PerlIO_openn(aTHX_ Nullch, mode, -1, 0, 0, NULL, 1, &name);
-}
-
-#undef PerlIO_reopen
-PerlIO *
-PerlIO_reopen(const char *path, const char *mode, PerlIO *f)
-{
-    dTHX;
-    SV *name = sv_2mortal(newSVpvn(path, strlen(path)));
-    return PerlIO_openn(aTHX_ Nullch, mode, -1, 0, 0, f, 1, &name);
-}
-
-#undef PerlIO_read
 SSize_t
-PerlIO_read(PerlIO *f, void *vbuf, Size_t count)
+Perl_PerlIO_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
 {
     if (f && *f)
-       return (*PerlIOBase(f)->tab->Read) (f, vbuf, count);
+       return (*PerlIOBase(f)->tab->Read) (aTHX_ f, vbuf, count);
     else {
        SETERRNO(EBADF, SS$_IVCHAN);
        return -1;
     }
 }
 
-#undef PerlIO_unread
 SSize_t
-PerlIO_unread(PerlIO *f, const void *vbuf, Size_t count)
+Perl_PerlIO_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
 {
     if (f && *f)
-       return (*PerlIOBase(f)->tab->Unread) (f, vbuf, count);
+       return (*PerlIOBase(f)->tab->Unread) (aTHX_ f, vbuf, count);
     else {
        SETERRNO(EBADF, SS$_IVCHAN);
        return -1;
     }
 }
 
-#undef PerlIO_write
 SSize_t
-PerlIO_write(PerlIO *f, const void *vbuf, Size_t count)
+Perl_PerlIO_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
 {
     if (f && *f)
-       return (*PerlIOBase(f)->tab->Write) (f, vbuf, count);
+       return (*PerlIOBase(f)->tab->Write) (aTHX_ f, vbuf, count);
     else {
        SETERRNO(EBADF, SS$_IVCHAN);
        return -1;
     }
 }
 
-#undef PerlIO_seek
 int
-PerlIO_seek(PerlIO *f, Off_t offset, int whence)
+Perl_PerlIO_seek(pTHX_ PerlIO *f, Off_t offset, int whence)
 {
     if (f && *f)
-       return (*PerlIOBase(f)->tab->Seek) (f, offset, whence);
+       return (*PerlIOBase(f)->tab->Seek) (aTHX_ f, offset, whence);
     else {
        SETERRNO(EBADF, SS$_IVCHAN);
        return -1;
     }
 }
 
-#undef PerlIO_tell
 Off_t
-PerlIO_tell(PerlIO *f)
+Perl_PerlIO_tell(pTHX_ PerlIO *f)
 {
     if (f && *f)
-       return (*PerlIOBase(f)->tab->Tell) (f);
+       return (*PerlIOBase(f)->tab->Tell) (aTHX_ f);
     else {
        SETERRNO(EBADF, SS$_IVCHAN);
        return -1;
     }
 }
 
-#undef PerlIO_flush
 int
-PerlIO_flush(PerlIO *f)
+Perl_PerlIO_flush(pTHX_ PerlIO *f)
 {
     if (f) {
        if (*f) {
            PerlIO_funcs *tab = PerlIOBase(f)->tab;
            if (tab && tab->Flush) {
-               return (*tab->Flush) (f);
+               return (*tab->Flush) (aTHX_ f);
            }
            else {
-               PerlIO_debug("Cannot flush f=%p :%s\n", f, tab->name);
+               PerlIO_debug("Cannot flush f=%p :%s\n", (void*)f, tab->name);
                SETERRNO(EBADF, SS$_IVCHAN);
                return -1;
            }
        }
        else {
-           PerlIO_debug("Cannot flush f=%p\n", f);
+           PerlIO_debug("Cannot flush f=%p\n", (void*)f);
            SETERRNO(EBADF, SS$_IVCHAN);
            return -1;
        }
@@ -1429,7 +1391,6 @@ PerlIO_flush(PerlIO *f)
         * things on fflush(NULL), but should we be bound by their design
         * decisions? --jhi
         */
-       dTHX;
        PerlIO **table = &PL_perlio;
        int code = 0;
        while ((f = *table)) {
@@ -1446,9 +1407,8 @@ PerlIO_flush(PerlIO *f)
 }
 
 void
-PerlIOBase_flush_linebuf()
+PerlIOBase_flush_linebuf(pTHX)
 {
-    dTHX;
     PerlIO **table = &PL_perlio;
     PerlIO *f;
     while ((f = *table)) {
@@ -1465,19 +1425,17 @@ PerlIOBase_flush_linebuf()
     }
 }
 
-#undef PerlIO_fill
 int
-PerlIO_fill(PerlIO *f)
+Perl_PerlIO_fill(pTHX_ PerlIO *f)
 {
     if (f && *f)
-       return (*PerlIOBase(f)->tab->Fill) (f);
+       return (*PerlIOBase(f)->tab->Fill) (aTHX_ f);
     else {
        SETERRNO(EBADF, SS$_IVCHAN);
        return -1;
     }
 }
 
-#undef PerlIO_isutf8
 int
 PerlIO_isutf8(PerlIO *f)
 {
@@ -1489,51 +1447,46 @@ PerlIO_isutf8(PerlIO *f)
     }
 }
 
-#undef PerlIO_eof
 int
-PerlIO_eof(PerlIO *f)
+Perl_PerlIO_eof(pTHX_ PerlIO *f)
 {
     if (f && *f)
-       return (*PerlIOBase(f)->tab->Eof) (f);
+       return (*PerlIOBase(f)->tab->Eof) (aTHX_ f);
     else {
        SETERRNO(EBADF, SS$_IVCHAN);
        return -1;
     }
 }
 
-#undef PerlIO_error
 int
-PerlIO_error(PerlIO *f)
+Perl_PerlIO_error(pTHX_ PerlIO *f)
 {
     if (f && *f)
-       return (*PerlIOBase(f)->tab->Error) (f);
+       return (*PerlIOBase(f)->tab->Error) (aTHX_ f);
     else {
        SETERRNO(EBADF, SS$_IVCHAN);
        return -1;
     }
 }
 
-#undef PerlIO_clearerr
 void
-PerlIO_clearerr(PerlIO *f)
+Perl_PerlIO_clearerr(pTHX_ PerlIO *f)
 {
     if (f && *f)
-       (*PerlIOBase(f)->tab->Clearerr) (f);
+       (*PerlIOBase(f)->tab->Clearerr) (aTHX_ f);
     else
        SETERRNO(EBADF, SS$_IVCHAN);
 }
 
-#undef PerlIO_setlinebuf
 void
-PerlIO_setlinebuf(PerlIO *f)
+Perl_PerlIO_setlinebuf(pTHX_ PerlIO *f)
 {
     if (f && *f)
-       (*PerlIOBase(f)->tab->Setlinebuf) (f);
+       (*PerlIOBase(f)->tab->Setlinebuf) (aTHX_ f);
     else
        SETERRNO(EBADF, SS$_IVCHAN);
 }
 
-#undef PerlIO_has_base
 int
 PerlIO_has_base(PerlIO *f)
 {
@@ -1543,7 +1496,6 @@ PerlIO_has_base(PerlIO *f)
     return 0;
 }
 
-#undef PerlIO_fast_gets
 int
 PerlIO_fast_gets(PerlIO *f)
 {
@@ -1554,7 +1506,6 @@ PerlIO_fast_gets(PerlIO *f)
     return 0;
 }
 
-#undef PerlIO_has_cntptr
 int
 PerlIO_has_cntptr(PerlIO *f)
 {
@@ -1565,7 +1516,6 @@ PerlIO_has_cntptr(PerlIO *f)
     return 0;
 }
 
-#undef PerlIO_canset_cnt
 int
 PerlIO_canset_cnt(PerlIO *f)
 {
@@ -1576,61 +1526,54 @@ PerlIO_canset_cnt(PerlIO *f)
     return 0;
 }
 
-#undef PerlIO_get_base
 STDCHAR *
-PerlIO_get_base(PerlIO *f)
+Perl_PerlIO_get_base(pTHX_ PerlIO *f)
 {
     if (f && *f)
-       return (*PerlIOBase(f)->tab->Get_base) (f);
+       return (*PerlIOBase(f)->tab->Get_base) (aTHX_ f);
     return NULL;
 }
 
-#undef PerlIO_get_bufsiz
 int
-PerlIO_get_bufsiz(PerlIO *f)
+Perl_PerlIO_get_bufsiz(pTHX_ PerlIO *f)
 {
     if (f && *f)
-       return (*PerlIOBase(f)->tab->Get_bufsiz) (f);
+       return (*PerlIOBase(f)->tab->Get_bufsiz) (aTHX_ f);
     return 0;
 }
 
-#undef PerlIO_get_ptr
 STDCHAR *
-PerlIO_get_ptr(PerlIO *f)
+Perl_PerlIO_get_ptr(pTHX_ PerlIO *f)
 {
     PerlIO_funcs *tab = PerlIOBase(f)->tab;
     if (tab->Get_ptr == NULL)
        return NULL;
-    return (*tab->Get_ptr) (f);
+    return (*tab->Get_ptr) (aTHX_ f);
 }
 
-#undef PerlIO_get_cnt
 int
-PerlIO_get_cnt(PerlIO *f)
+Perl_PerlIO_get_cnt(pTHX_ PerlIO *f)
 {
     PerlIO_funcs *tab = PerlIOBase(f)->tab;
     if (tab->Get_cnt == NULL)
        return 0;
-    return (*tab->Get_cnt) (f);
+    return (*tab->Get_cnt) (aTHX_ f);
 }
 
-#undef PerlIO_set_cnt
 void
-PerlIO_set_cnt(PerlIO *f, int cnt)
+Perl_PerlIO_set_cnt(pTHX_ PerlIO *f, int cnt)
 {
-    (*PerlIOBase(f)->tab->Set_ptrcnt) (f, NULL, cnt);
+    (*PerlIOBase(f)->tab->Set_ptrcnt) (aTHX_ f, NULL, cnt);
 }
 
-#undef PerlIO_set_ptrcnt
 void
-PerlIO_set_ptrcnt(PerlIO *f, STDCHAR * ptr, int cnt)
+Perl_PerlIO_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, int cnt)
 {
     PerlIO_funcs *tab = PerlIOBase(f)->tab;
     if (tab->Set_ptrcnt == NULL) {
-       dTHX;
        Perl_croak(aTHX_ "PerlIO buffer snooping abuse");
     }
-    (*PerlIOBase(f)->tab->Set_ptrcnt) (f, ptr, cnt);
+    (*PerlIOBase(f)->tab->Set_ptrcnt) (aTHX_ f, ptr, cnt);
 }
 
 /*--------------------------------------------------------------------------------------*/
@@ -1639,10 +1582,9 @@ PerlIO_set_ptrcnt(PerlIO *f, STDCHAR * ptr, int cnt)
  */
 
 IV
-PerlIOUtf8_pushed(PerlIO *f, const char *mode, SV *arg)
+PerlIOUtf8_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg)
 {
     if (PerlIONext(f)) {
-       dTHX;
        PerlIO_funcs *tab = PerlIOBase(f)->tab;
        PerlIO_pop(aTHX_ f);
        if (tab->kind & PERLIO_K_UTF8)
@@ -1754,7 +1696,7 @@ PerlIO_funcs PerlIO_raw = {
  */
 
 IV
-PerlIOBase_fileno(PerlIO *f)
+PerlIOBase_fileno(pTHX_ PerlIO *f)
 {
     return PerlIO_fileno(PerlIONext(f));
 }
@@ -1781,7 +1723,7 @@ PerlIO_modestr(PerlIO *f, char *buf)
            *s++ = '+';
        }
     }
-#ifdef PERLIO_CRLF
+#ifdef PERLIO_USING_CRLF
     if (!(flags & PERLIO_F_CRLF))
        *s++ = 'b';
 #endif
@@ -1790,7 +1732,7 @@ PerlIO_modestr(PerlIO *f, char *buf)
 }
 
 IV
-PerlIOBase_pushed(PerlIO *f, const char *mode, SV *arg)
+PerlIOBase_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg)
 {
     PerlIOl *l = PerlIOBase(f);
 #if 0
@@ -1852,15 +1794,14 @@ PerlIOBase_pushed(PerlIO *f, const char *mode, SV *arg)
 }
 
 IV
-PerlIOBase_popped(PerlIO *f)
+PerlIOBase_popped(pTHX_ PerlIO *f)
 {
     return 0;
 }
 
 SSize_t
-PerlIOBase_unread(PerlIO *f, const void *vbuf, Size_t count)
+PerlIOBase_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
 {
-    dTHX;
     /*
      * Save the position as current head considers it
      */
@@ -1868,12 +1809,12 @@ PerlIOBase_unread(PerlIO *f, const void *vbuf, Size_t count)
     SSize_t done;
     PerlIO_push(aTHX_ f, &PerlIO_pending, "r", Nullsv);
     PerlIOSelf(f, PerlIOBuf)->posn = old;
-    done = PerlIOBuf_unread(f, vbuf, count);
+    done = PerlIOBuf_unread(aTHX_ f, vbuf, count);
     return done;
 }
 
 SSize_t
-PerlIOBase_read(PerlIO *f, void *vbuf, Size_t count)
+PerlIOBase_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
 {
     STDCHAR *buf = (STDCHAR *) vbuf;
     if (f) {
@@ -1902,25 +1843,25 @@ PerlIOBase_read(PerlIO *f, void *vbuf, Size_t count)
 }
 
 IV
-PerlIOBase_noop_ok(PerlIO *f)
+PerlIOBase_noop_ok(pTHX_ PerlIO *f)
 {
     return 0;
 }
 
 IV
-PerlIOBase_noop_fail(PerlIO *f)
+PerlIOBase_noop_fail(pTHX_ PerlIO *f)
 {
     return -1;
 }
 
 IV
-PerlIOBase_close(PerlIO *f)
+PerlIOBase_close(pTHX_ PerlIO *f)
 {
     IV code = 0;
     PerlIO *n = PerlIONext(f);
     if (PerlIO_flush(f) != 0)
        code = -1;
-    if (n && *n && (*PerlIOBase(n)->tab->Close) (n) != 0)
+    if (n && *n && (*PerlIOBase(n)->tab->Close)(aTHX_ n) != 0)
        code = -1;
     PerlIOBase(f)->flags &=
        ~(PERLIO_F_CANREAD | PERLIO_F_CANWRITE | PERLIO_F_OPEN);
@@ -1928,7 +1869,7 @@ PerlIOBase_close(PerlIO *f)
 }
 
 IV
-PerlIOBase_eof(PerlIO *f)
+PerlIOBase_eof(pTHX_ PerlIO *f)
 {
     if (f && *f) {
        return (PerlIOBase(f)->flags & PERLIO_F_EOF) != 0;
@@ -1937,7 +1878,7 @@ PerlIOBase_eof(PerlIO *f)
 }
 
 IV
-PerlIOBase_error(PerlIO *f)
+PerlIOBase_error(pTHX_ PerlIO *f)
 {
     if (f && *f) {
        return (PerlIOBase(f)->flags & PERLIO_F_ERROR) != 0;
@@ -1946,7 +1887,7 @@ PerlIOBase_error(PerlIO *f)
 }
 
 void
-PerlIOBase_clearerr(PerlIO *f)
+PerlIOBase_clearerr(pTHX_ PerlIO *f)
 {
     if (f && *f) {
        PerlIO *n = PerlIONext(f);
@@ -1957,7 +1898,7 @@ PerlIOBase_clearerr(PerlIO *f)
 }
 
 void
-PerlIOBase_setlinebuf(PerlIO *f)
+PerlIOBase_setlinebuf(pTHX_ PerlIO *f)
 {
     if (f) {
        PerlIOBase(f)->flags |= PERLIO_F_LINEBUF;
@@ -1993,7 +1934,8 @@ PerlIOBase_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags)
        PerlIO_funcs *self = PerlIOBase(o)->tab;
        SV *arg = Nullsv;
        char buf[8];
-       PerlIO_debug("PerlIOBase_dup %s f=%p o=%p param=%p\n",self->name,f,o,param);
+       PerlIO_debug("PerlIOBase_dup %s f=%p o=%p param=%p\n",
+                    self->name, (void*)f, (void*)o, (void*)param);
        if (self->Getarg) {
            arg = (*self->Getarg)(aTHX_ o,param,flags);
        }
@@ -2138,15 +2080,15 @@ PerlIOUnix_oflags(const char *mode)
 }
 
 IV
-PerlIOUnix_fileno(PerlIO *f)
+PerlIOUnix_fileno(pTHX_ PerlIO *f)
 {
     return PerlIOSelf(f, PerlIOUnix)->fd;
 }
 
 IV
-PerlIOUnix_pushed(PerlIO *f, const char *mode, SV *arg)
+PerlIOUnix_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg)
 {
-    IV code = PerlIOBase_pushed(f, mode, arg);
+    IV code = PerlIOBase_pushed(aTHX_ f, mode, arg);
     PerlIOUnix *s = PerlIOSelf(f, PerlIOUnix);
     if (*PerlIONext(f)) {
        s->fd = PerlIO_fileno(PerlIONext(f));
@@ -2168,7 +2110,7 @@ PerlIOUnix_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
 {
     if (f) {
        if (PerlIOBase(f)->flags & PERLIO_F_OPEN)
-           (*PerlIOBase(f)->tab->Close) (f);
+           (*PerlIOBase(f)->tab->Close)(aTHX_ f);
     }
     if (narg > 0) {
        char *path = SvPV_nolen(*args);
@@ -2232,9 +2174,8 @@ PerlIOUnix_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags)
 
 
 SSize_t
-PerlIOUnix_read(PerlIO *f, void *vbuf, Size_t count)
+PerlIOUnix_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
 {
-    dTHX;
     int fd = PerlIOSelf(f, PerlIOUnix)->fd;
     if (!(PerlIOBase(f)->flags & PERLIO_F_CANREAD))
        return 0;
@@ -2252,9 +2193,8 @@ PerlIOUnix_read(PerlIO *f, void *vbuf, Size_t count)
 }
 
 SSize_t
-PerlIOUnix_write(PerlIO *f, const void *vbuf, Size_t count)
+PerlIOUnix_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
 {
-    dTHX;
     int fd = PerlIOSelf(f, PerlIOUnix)->fd;
     while (1) {
        SSize_t len = PerlLIO_write(fd, vbuf, count);
@@ -2268,9 +2208,8 @@ PerlIOUnix_write(PerlIO *f, const void *vbuf, Size_t count)
 }
 
 IV
-PerlIOUnix_seek(PerlIO *f, Off_t offset, int whence)
+PerlIOUnix_seek(pTHX_ PerlIO *f, Off_t offset, int whence)
 {
-    dSYS;
     Off_t new =
        PerlLIO_lseek(PerlIOSelf(f, PerlIOUnix)->fd, offset, whence);
     PerlIOBase(f)->flags &= ~PERLIO_F_EOF;
@@ -2278,17 +2217,15 @@ PerlIOUnix_seek(PerlIO *f, Off_t offset, int whence)
 }
 
 Off_t
-PerlIOUnix_tell(PerlIO *f)
+PerlIOUnix_tell(pTHX_ PerlIO *f)
 {
-    dSYS;
     return PerlLIO_lseek(PerlIOSelf(f, PerlIOUnix)->fd, 0, SEEK_CUR);
 }
 
 
 IV
-PerlIOUnix_close(PerlIO *f)
+PerlIOUnix_close(pTHX_ PerlIO *f)
 {
-    dTHX;
     int fd = PerlIOSelf(f, PerlIOUnix)->fd;
     int code = 0;
     if (PerlIOBase(f)->flags & PERLIO_F_OPEN) {
@@ -2354,9 +2291,8 @@ typedef struct {
 } PerlIOStdio;
 
 IV
-PerlIOStdio_fileno(PerlIO *f)
+PerlIOStdio_fileno(pTHX_ PerlIO *f)
 {
-    dSYS;
     return PerlSIO_fileno(PerlIOSelf(f, PerlIOStdio)->stdio);
 }
 
@@ -2367,7 +2303,7 @@ PerlIOStdio_mode(const char *mode, char *tmode)
     while (*mode) {
        *tmode++ = *mode++;
     }
-#ifdef PERLIO_CRLF
+#ifdef PERLIO_USING_CRLF
     *tmode++ = 'b';
 #endif
     *tmode = '\0';
@@ -2378,10 +2314,9 @@ PerlIOStdio_mode(const char *mode, char *tmode)
  * This isn't used yet ...
  */
 IV
-PerlIOStdio_pushed(PerlIO *f, const char *mode, SV *arg)
+PerlIOStdio_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg)
 {
     if (*PerlIONext(f)) {
-       dSYS;
        PerlIOStdio *s = PerlIOSelf(f, PerlIOStdio);
        char tmode[8];
        FILE *stdio =
@@ -2392,10 +2327,9 @@ PerlIOStdio_pushed(PerlIO *f, const char *mode, SV *arg)
        else
            return -1;
     }
-    return PerlIOBase_pushed(f, mode, arg);
+    return PerlIOBase_pushed(aTHX_ f, mode, arg);
 }
 
-#undef PerlIO_importFILE
 PerlIO *
 PerlIO_importFILE(FILE *stdio, int fl)
 {
@@ -2517,9 +2451,8 @@ PerlIOStdio_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags)
 }
 
 IV
-PerlIOStdio_close(PerlIO *f)
+PerlIOStdio_close(pTHX_ PerlIO *f)
 {
-    dSYS;
 #ifdef SOCKS5_VERSION_NAME
     int optval;
     Sock_size_t optlen = sizeof(int);
@@ -2546,9 +2479,8 @@ PerlIOStdio_close(PerlIO *f)
 
 
 SSize_t
-PerlIOStdio_read(PerlIO *f, void *vbuf, Size_t count)
+PerlIOStdio_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
 {
-    dSYS;
     FILE *s = PerlIOSelf(f, PerlIOStdio)->stdio;
     SSize_t got = 0;
     if (count == 1) {
@@ -2569,9 +2501,8 @@ PerlIOStdio_read(PerlIO *f, void *vbuf, Size_t count)
 }
 
 SSize_t
-PerlIOStdio_unread(PerlIO *f, const void *vbuf, Size_t count)
+PerlIOStdio_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
 {
-    dSYS;
     FILE *s = PerlIOSelf(f, PerlIOStdio)->stdio;
     STDCHAR *buf = ((STDCHAR *) vbuf) + count - 1;
     SSize_t unread = 0;
@@ -2586,33 +2517,29 @@ PerlIOStdio_unread(PerlIO *f, const void *vbuf, Size_t count)
 }
 
 SSize_t
-PerlIOStdio_write(PerlIO *f, const void *vbuf, Size_t count)
+PerlIOStdio_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
 {
-    dSYS;
     return PerlSIO_fwrite(vbuf, 1, count,
                          PerlIOSelf(f, PerlIOStdio)->stdio);
 }
 
 IV
-PerlIOStdio_seek(PerlIO *f, Off_t offset, int whence)
+PerlIOStdio_seek(pTHX_ PerlIO *f, Off_t offset, int whence)
 {
-    dSYS;
     FILE *stdio = PerlIOSelf(f, PerlIOStdio)->stdio;
     return PerlSIO_fseek(stdio, offset, whence);
 }
 
 Off_t
-PerlIOStdio_tell(PerlIO *f)
+PerlIOStdio_tell(pTHX_ PerlIO *f)
 {
-    dSYS;
     FILE *stdio = PerlIOSelf(f, PerlIOStdio)->stdio;
     return PerlSIO_ftell(stdio);
 }
 
 IV
-PerlIOStdio_flush(PerlIO *f)
+PerlIOStdio_flush(pTHX_ PerlIO *f)
 {
-    dSYS;
     FILE *stdio = PerlIOSelf(f, PerlIOStdio)->stdio;
     if (PerlIOBase(f)->flags & PERLIO_F_CANWRITE) {
        return PerlSIO_fflush(stdio);
@@ -2637,9 +2564,8 @@ PerlIOStdio_flush(PerlIO *f)
 }
 
 IV
-PerlIOStdio_fill(PerlIO *f)
+PerlIOStdio_fill(pTHX_ PerlIO *f)
 {
-    dSYS;
     FILE *stdio = PerlIOSelf(f, PerlIOStdio)->stdio;
     int c;
     /*
@@ -2656,30 +2582,26 @@ PerlIOStdio_fill(PerlIO *f)
 }
 
 IV
-PerlIOStdio_eof(PerlIO *f)
+PerlIOStdio_eof(pTHX_ PerlIO *f)
 {
-    dSYS;
     return PerlSIO_feof(PerlIOSelf(f, PerlIOStdio)->stdio);
 }
 
 IV
-PerlIOStdio_error(PerlIO *f)
+PerlIOStdio_error(pTHX_ PerlIO *f)
 {
-    dSYS;
     return PerlSIO_ferror(PerlIOSelf(f, PerlIOStdio)->stdio);
 }
 
 void
-PerlIOStdio_clearerr(PerlIO *f)
+PerlIOStdio_clearerr(pTHX_ PerlIO *f)
 {
-    dSYS;
     PerlSIO_clearerr(PerlIOSelf(f, PerlIOStdio)->stdio);
 }
 
 void
-PerlIOStdio_setlinebuf(PerlIO *f)
+PerlIOStdio_setlinebuf(pTHX_ PerlIO *f)
 {
-    dSYS;
 #ifdef HAS_SETLINEBUF
     PerlSIO_setlinebuf(PerlIOSelf(f, PerlIOStdio)->stdio);
 #else
@@ -2689,17 +2611,15 @@ PerlIOStdio_setlinebuf(PerlIO *f)
 
 #ifdef FILE_base
 STDCHAR *
-PerlIOStdio_get_base(PerlIO *f)
+PerlIOStdio_get_base(pTHX_ PerlIO *f)
 {
-    dSYS;
     FILE *stdio = PerlIOSelf(f, PerlIOStdio)->stdio;
-    return PerlSIO_get_base(stdio);
+    return (STDCHAR*)PerlSIO_get_base(stdio);
 }
 
 Size_t
-PerlIOStdio_get_bufsiz(PerlIO *f)
+PerlIOStdio_get_bufsiz(pTHX_ PerlIO *f)
 {
-    dSYS;
     FILE *stdio = PerlIOSelf(f, PerlIOStdio)->stdio;
     return PerlSIO_get_bufsiz(stdio);
 }
@@ -2707,32 +2627,28 @@ PerlIOStdio_get_bufsiz(PerlIO *f)
 
 #ifdef USE_STDIO_PTR
 STDCHAR *
-PerlIOStdio_get_ptr(PerlIO *f)
+PerlIOStdio_get_ptr(pTHX_ PerlIO *f)
 {
-    dSYS;
     FILE *stdio = PerlIOSelf(f, PerlIOStdio)->stdio;
-    return PerlSIO_get_ptr(stdio);
+    return (STDCHAR*)PerlSIO_get_ptr(stdio);
 }
 
 SSize_t
-PerlIOStdio_get_cnt(PerlIO *f)
+PerlIOStdio_get_cnt(pTHX_ PerlIO *f)
 {
-    dSYS;
     FILE *stdio = PerlIOSelf(f, PerlIOStdio)->stdio;
     return PerlSIO_get_cnt(stdio);
 }
 
 void
-PerlIOStdio_set_ptrcnt(PerlIO *f, STDCHAR * ptr, SSize_t cnt)
+PerlIOStdio_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt)
 {
     FILE *stdio = PerlIOSelf(f, PerlIOStdio)->stdio;
-    dSYS;
     if (ptr != NULL) {
 #ifdef STDIO_PTR_LVALUE
-       PerlSIO_set_ptr(stdio, ptr);
+        PerlSIO_set_ptr(stdio, (void*)ptr); /* LHS STDCHAR* cast non-portable */
 #ifdef STDIO_PTR_LVAL_SETS_CNT
        if (PerlSIO_get_cnt(stdio) != (cnt)) {
-           dTHX;
            assert(PerlSIO_get_cnt(stdio) == (cnt));
        }
 #endif
@@ -2808,15 +2724,14 @@ PerlIO_funcs PerlIO_stdio = {
 #endif                         /* USE_STDIO_PTR */
 };
 
-#undef PerlIO_exportFILE
 FILE *
 PerlIO_exportFILE(PerlIO *f, int fl)
 {
+    dTHX;
     FILE *stdio;
     PerlIO_flush(f);
     stdio = fdopen(PerlIO_fileno(f), "r+");
     if (stdio) {
-       dTHX;
        PerlIOStdio *s =
            PerlIOSelf(PerlIO_push(aTHX_ f, &PerlIO_stdio, "r+", Nullsv),
                       PerlIOStdio);
@@ -2825,7 +2740,6 @@ PerlIO_exportFILE(PerlIO *f, int fl)
     return stdio;
 }
 
-#undef PerlIO_findFILE
 FILE *
 PerlIO_findFILE(PerlIO *f)
 {
@@ -2840,7 +2754,6 @@ PerlIO_findFILE(PerlIO *f)
     return PerlIO_exportFILE(f, 0);
 }
 
-#undef PerlIO_releaseFILE
 void
 PerlIO_releaseFILE(PerlIO *p, FILE *f)
 {
@@ -2852,9 +2765,8 @@ PerlIO_releaseFILE(PerlIO *p, FILE *f)
  */
 
 IV
-PerlIOBuf_pushed(PerlIO *f, const char *mode, SV *arg)
+PerlIOBuf_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg)
 {
-    dSYS;
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     int fd = PerlIO_fileno(f);
     Off_t posn;
@@ -2865,7 +2777,7 @@ PerlIOBuf_pushed(PerlIO *f, const char *mode, SV *arg)
     if (posn != (Off_t) - 1) {
        b->posn = posn;
     }
-    return PerlIOBase_pushed(f, mode, arg);
+    return PerlIOBase_pushed(aTHX_ f, mode, arg);
 }
 
 PerlIO *
@@ -2881,7 +2793,7 @@ PerlIOBuf_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
            (*tab->Open) (aTHX_ tab, layers, n - 1, mode, fd, imode, perm,
                          next, narg, args);
        if (!next
-           || (*PerlIOBase(f)->tab->Pushed) (f, mode, PerlIOArg) != 0) {
+           || (*PerlIOBase(f)->tab->Pushed) (aTHX_ f, mode, PerlIOArg) != 0) {
            return NULL;
        }
     }
@@ -2906,7 +2818,7 @@ PerlIOBuf_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
                return NULL;
            } else {
                fd = PerlIO_fileno(f);
-#ifdef PERLIO_CRLF
+#ifdef PERLIO_USING_CRLF
                /*
                 * do something about failing setmode()? --jhi
                 */
@@ -2929,7 +2841,7 @@ PerlIOBuf_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers,
  * read or write state
  */
 IV
-PerlIOBuf_flush(PerlIO *f)
+PerlIOBuf_flush(pTHX_ PerlIO *f)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     int code = 0;
@@ -2979,7 +2891,7 @@ PerlIOBuf_flush(PerlIO *f)
 }
 
 IV
-PerlIOBuf_fill(PerlIO *f)
+PerlIOBuf_fill(pTHX_ PerlIO *f)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     PerlIO *n = PerlIONext(f);
@@ -2993,7 +2905,7 @@ PerlIOBuf_fill(PerlIO *f)
     if (PerlIO_flush(f) != 0)
        return -1;
     if (PerlIOBase(f)->flags & PERLIO_F_TTY)
-       PerlIOBase_flush_linebuf();
+       PerlIOBase_flush_linebuf(aTHX);
 
     if (!b->buf)
        PerlIO_get_base(f);     /* allocate via vtable */
@@ -3041,19 +2953,19 @@ PerlIOBuf_fill(PerlIO *f)
 }
 
 SSize_t
-PerlIOBuf_read(PerlIO *f, void *vbuf, Size_t count)
+PerlIOBuf_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     if (f) {
        if (!b->ptr)
            PerlIO_get_base(f);
-       return PerlIOBase_read(f, vbuf, count);
+       return PerlIOBase_read(aTHX_ f, vbuf, count);
     }
     return 0;
 }
 
 SSize_t
-PerlIOBuf_unread(PerlIO *f, const void *vbuf, Size_t count)
+PerlIOBuf_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
 {
     const STDCHAR *buf = (const STDCHAR *) vbuf + count;
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
@@ -3110,7 +3022,7 @@ PerlIOBuf_unread(PerlIO *f, const void *vbuf, Size_t count)
 }
 
 SSize_t
-PerlIOBuf_write(PerlIO *f, const void *vbuf, Size_t count)
+PerlIOBuf_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     const STDCHAR *buf = (const STDCHAR *) vbuf;
@@ -3155,7 +3067,7 @@ PerlIOBuf_write(PerlIO *f, const void *vbuf, Size_t count)
 }
 
 IV
-PerlIOBuf_seek(PerlIO *f, Off_t offset, int whence)
+PerlIOBuf_seek(pTHX_ PerlIO *f, Off_t offset, int whence)
 {
     IV code;
     if ((code = PerlIO_flush(f)) == 0) {
@@ -3170,7 +3082,7 @@ PerlIOBuf_seek(PerlIO *f, Off_t offset, int whence)
 }
 
 Off_t
-PerlIOBuf_tell(PerlIO *f)
+PerlIOBuf_tell(pTHX_ PerlIO *f)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     /*
@@ -3187,9 +3099,9 @@ PerlIOBuf_tell(PerlIO *f)
 }
 
 IV
-PerlIOBuf_close(PerlIO *f)
+PerlIOBuf_close(pTHX_ PerlIO *f)
 {
-    IV code = PerlIOBase_close(f);
+    IV code = PerlIOBase_close(aTHX_ f);
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     if (b->buf && b->buf != (STDCHAR *) & b->oneword) {
        Safefree(b->buf);
@@ -3201,7 +3113,7 @@ PerlIOBuf_close(PerlIO *f)
 }
 
 STDCHAR *
-PerlIOBuf_get_ptr(PerlIO *f)
+PerlIOBuf_get_ptr(pTHX_ PerlIO *f)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     if (!b->buf)
@@ -3210,7 +3122,7 @@ PerlIOBuf_get_ptr(PerlIO *f)
 }
 
 SSize_t
-PerlIOBuf_get_cnt(PerlIO *f)
+PerlIOBuf_get_cnt(pTHX_ PerlIO *f)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     if (!b->buf)
@@ -3221,7 +3133,7 @@ PerlIOBuf_get_cnt(PerlIO *f)
 }
 
 STDCHAR *
-PerlIOBuf_get_base(PerlIO *f)
+PerlIOBuf_get_base(pTHX_ PerlIO *f)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     if (!b->buf) {
@@ -3240,7 +3152,7 @@ PerlIOBuf_get_base(PerlIO *f)
 }
 
 Size_t
-PerlIOBuf_bufsiz(PerlIO *f)
+PerlIOBuf_bufsiz(pTHX_ PerlIO *f)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     if (!b->buf)
@@ -3249,14 +3161,13 @@ PerlIOBuf_bufsiz(PerlIO *f)
 }
 
 void
-PerlIOBuf_set_ptrcnt(PerlIO *f, STDCHAR * ptr, SSize_t cnt)
+PerlIOBuf_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     if (!b->buf)
        PerlIO_get_base(f);
     b->ptr = ptr;
     if (PerlIO_get_cnt(f) != cnt || b->ptr < b->buf) {
-       dTHX;
        assert(PerlIO_get_cnt(f) == cnt);
        assert(b->ptr >= b->buf);
     }
@@ -3306,7 +3217,7 @@ PerlIO_funcs PerlIO_perlio = {
  */
 
 IV
-PerlIOPending_fill(PerlIO *f)
+PerlIOPending_fill(pTHX_ PerlIO *f)
 {
     /*
      * Should never happen
@@ -3316,7 +3227,7 @@ PerlIOPending_fill(PerlIO *f)
 }
 
 IV
-PerlIOPending_close(PerlIO *f)
+PerlIOPending_close(pTHX_ PerlIO *f)
 {
     /*
      * A tad tricky - flush pops us, then we close new top
@@ -3326,7 +3237,7 @@ PerlIOPending_close(PerlIO *f)
 }
 
 IV
-PerlIOPending_seek(PerlIO *f, Off_t offset, int whence)
+PerlIOPending_seek(pTHX_ PerlIO *f, Off_t offset, int whence)
 {
     /*
      * A tad tricky - flush pops us, then we seek new top
@@ -3337,9 +3248,8 @@ PerlIOPending_seek(PerlIO *f, Off_t offset, int whence)
 
 
 IV
-PerlIOPending_flush(PerlIO *f)
+PerlIOPending_flush(pTHX_ PerlIO *f)
 {
-    dTHX;
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     if (b->buf && b->buf != (STDCHAR *) & b->oneword) {
        Safefree(b->buf);
@@ -3350,20 +3260,20 @@ PerlIOPending_flush(PerlIO *f)
 }
 
 void
-PerlIOPending_set_ptrcnt(PerlIO *f, STDCHAR * ptr, SSize_t cnt)
+PerlIOPending_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt)
 {
     if (cnt <= 0) {
        PerlIO_flush(f);
     }
     else {
-       PerlIOBuf_set_ptrcnt(f, ptr, cnt);
+       PerlIOBuf_set_ptrcnt(aTHX_ f, ptr, cnt);
     }
 }
 
 IV
-PerlIOPending_pushed(PerlIO *f, const char *mode, SV *arg)
+PerlIOPending_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg)
 {
-    IV code = PerlIOBase_pushed(f, mode, arg);
+    IV code = PerlIOBase_pushed(aTHX_ f, mode, arg);
     PerlIOl *l = PerlIOBase(f);
     /*
      * Our PerlIO_fast_gets must match what we are pushed on, or sv_gets()
@@ -3376,14 +3286,14 @@ PerlIOPending_pushed(PerlIO *f, const char *mode, SV *arg)
 }
 
 SSize_t
-PerlIOPending_read(PerlIO *f, void *vbuf, Size_t count)
+PerlIOPending_read(pTHX_ PerlIO *f, void *vbuf, Size_t count)
 {
     SSize_t avail = PerlIO_get_cnt(f);
     SSize_t got = 0;
     if (count < avail)
        avail = count;
     if (avail > 0)
-       got = PerlIOBuf_read(f, vbuf, avail);
+       got = PerlIOBuf_read(aTHX_ f, vbuf, avail);
     if (got >= 0 && got < count) {
        SSize_t more =
            PerlIO_read(f, ((STDCHAR *) vbuf) + got, count - got);
@@ -3438,11 +3348,11 @@ typedef struct {
 } PerlIOCrlf;
 
 IV
-PerlIOCrlf_pushed(PerlIO *f, const char *mode, SV *arg)
+PerlIOCrlf_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg)
 {
     IV code;
     PerlIOBase(f)->flags |= PERLIO_F_CRLF;
-    code = PerlIOBuf_pushed(f, mode, arg);
+    code = PerlIOBuf_pushed(aTHX_ f, mode, arg);
 #if 0
     PerlIO_debug("PerlIOCrlf_pushed f=%p %s %s fl=%08" UVxf "\n",
                 f, PerlIOBase(f)->tab->name, (mode) ? mode : "(Null)",
@@ -3453,7 +3363,7 @@ PerlIOCrlf_pushed(PerlIO *f, const char *mode, SV *arg)
 
 
 SSize_t
-PerlIOCrlf_unread(PerlIO *f, const void *vbuf, Size_t count)
+PerlIOCrlf_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
 {
     PerlIOCrlf *c = PerlIOSelf(f, PerlIOCrlf);
     if (c->nl) {
@@ -3461,7 +3371,7 @@ PerlIOCrlf_unread(PerlIO *f, const void *vbuf, Size_t count)
        c->nl = NULL;
     }
     if (!(PerlIOBase(f)->flags & PERLIO_F_CRLF))
-       return PerlIOBuf_unread(f, vbuf, count);
+       return PerlIOBuf_unread(aTHX_ f, vbuf, count);
     else {
        const STDCHAR *buf = (const STDCHAR *) vbuf + count;
        PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
@@ -3502,7 +3412,7 @@ PerlIOCrlf_unread(PerlIO *f, const void *vbuf, Size_t count)
 }
 
 SSize_t
-PerlIOCrlf_get_cnt(PerlIO *f)
+PerlIOCrlf_get_cnt(pTHX_ PerlIO *f)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     if (!b->buf)
@@ -3533,11 +3443,13 @@ PerlIOCrlf_get_cnt(PerlIO *f)
                    /*
                     * Blast - found CR as last char in buffer
                     */
+
                    if (b->ptr < nl) {
                        /*
                         * They may not care, defer work as long as
                         * possible
                         */
+                       c->nl = nl;
                        return (nl - b->ptr);
                    }
                    else {
@@ -3558,6 +3470,7 @@ PerlIOCrlf_get_cnt(PerlIO *f)
                        /*
                         * CR at EOF - just fall through
                         */
+                       /* Should we clear EOF though ??? */
                    }
                }
            }
@@ -3568,7 +3481,7 @@ PerlIOCrlf_get_cnt(PerlIO *f)
 }
 
 void
-PerlIOCrlf_set_ptrcnt(PerlIO *f, STDCHAR * ptr, SSize_t cnt)
+PerlIOCrlf_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     PerlIOCrlf *c = PerlIOSelf(f, PerlIOCrlf);
@@ -3576,12 +3489,15 @@ PerlIOCrlf_set_ptrcnt(PerlIO *f, STDCHAR * ptr, SSize_t cnt)
     if (!b->buf)
        PerlIO_get_base(f);
     if (!ptr) {
-       if (c->nl)
+       if (c->nl) {
            ptr = c->nl + 1;
+            if (ptr == b->end && *c->nl == 0xd) {
+               /* Defered CR at end of buffer case - we lied about count */
+               ptr--;  
+            }
+        }
        else {
            ptr = b->end;
-           if ((flags & PERLIO_F_CRLF) && ptr > b->buf && ptr[-1] == 0xd)
-               ptr--;
        }
        ptr -= cnt;
     }
@@ -3589,19 +3505,15 @@ PerlIOCrlf_set_ptrcnt(PerlIO *f, STDCHAR * ptr, SSize_t cnt)
        /*
         * Test code - delete when it works ...
         */
-       STDCHAR *chk;
-       if (c->nl)
-           chk = c->nl + 1;
-       else {
-           chk = b->end;
-           if ((flags & PERLIO_F_CRLF) && chk > b->buf && chk[-1] == 0xd)
-               chk--;
-       }
+       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 */
+         chk--;
+        }
        chk -= cnt;
 
-       if (ptr != chk) {
-           dTHX;
-           Perl_croak(aTHX_ "ptr wrong %p != %p fl=%08" UVxf
+       if (ptr != chk ) {
+           Perl_warn(aTHX_ "ptr wrong %p != %p fl=%08" UVxf
                       " nl=%p e=%p for %d", ptr, chk, flags, c->nl,
                       b->end, cnt);
        }
@@ -3621,10 +3533,10 @@ PerlIOCrlf_set_ptrcnt(PerlIO *f, STDCHAR * ptr, SSize_t cnt)
 }
 
 SSize_t
-PerlIOCrlf_write(PerlIO *f, const void *vbuf, Size_t count)
+PerlIOCrlf_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
 {
     if (!(PerlIOBase(f)->flags & PERLIO_F_CRLF))
-       return PerlIOBuf_write(f, vbuf, count);
+       return PerlIOBuf_write(aTHX_ f, vbuf, count);
     else {
        PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
        const STDCHAR *buf = (const STDCHAR *) vbuf;
@@ -3672,14 +3584,14 @@ PerlIOCrlf_write(PerlIO *f, const void *vbuf, Size_t count)
 }
 
 IV
-PerlIOCrlf_flush(PerlIO *f)
+PerlIOCrlf_flush(pTHX_ PerlIO *f)
 {
     PerlIOCrlf *c = PerlIOSelf(f, PerlIOCrlf);
     if (c->nl) {
        *(c->nl) = 0xd;
        c->nl = NULL;
     }
-    return PerlIOBuf_flush(f);
+    return PerlIOBuf_flush(aTHX_ f);
 }
 
 PerlIO_funcs PerlIO_crlf = {
@@ -3728,9 +3640,8 @@ typedef struct {
 static size_t page_size = 0;
 
 IV
-PerlIOMmap_map(PerlIO *f)
+PerlIOMmap_map(pTHX_ PerlIO *f)
 {
-    dTHX;
     PerlIOMmap *m = PerlIOSelf(f, PerlIOMmap);
     IV flags = PerlIOBase(f)->flags;
     IV code = 0;
@@ -3823,7 +3734,7 @@ PerlIOMmap_map(PerlIO *f)
 }
 
 IV
-PerlIOMmap_unmap(PerlIO *f)
+PerlIOMmap_unmap(pTHX_ PerlIO *f)
 {
     PerlIOMmap *m = PerlIOSelf(f, PerlIOMmap);
     PerlIOBuf *b = &m->base;
@@ -3844,7 +3755,7 @@ PerlIOMmap_unmap(PerlIO *f)
 }
 
 STDCHAR *
-PerlIOMmap_get_base(PerlIO *f)
+PerlIOMmap_get_base(pTHX_ PerlIO *f)
 {
     PerlIOMmap *m = PerlIOSelf(f, PerlIOMmap);
     PerlIOBuf *b = &m->base;
@@ -3862,7 +3773,7 @@ PerlIOMmap_get_base(PerlIO *f)
        b->buf = NULL;          /* Clear to trigger below */
     }
     if (!b->buf) {
-       PerlIOMmap_map(f);      /* Try and map it */
+       PerlIOMmap_map(aTHX_ f);        /* Try and map it */
        if (!b->buf) {
            /*
             * Map did not work - recover PerlIOBuf buffer if we have one
@@ -3873,11 +3784,11 @@ PerlIOMmap_get_base(PerlIO *f)
     b->ptr = b->end = b->buf;
     if (b->buf)
        return b->buf;
-    return PerlIOBuf_get_base(f);
+    return PerlIOBuf_get_base(aTHX_ f);
 }
 
 SSize_t
-PerlIOMmap_unread(PerlIO *f, const void *vbuf, Size_t count)
+PerlIOMmap_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
 {
     PerlIOMmap *m = PerlIOSelf(f, PerlIOMmap);
     PerlIOBuf *b = &m->base;
@@ -3900,15 +3811,15 @@ PerlIOMmap_unread(PerlIO *f, const void *vbuf, Size_t count)
        if (!b->buf && m->bbuf)
            b->buf = m->bbuf;
        if (!b->buf) {
-           PerlIOBuf_get_base(f);
+           PerlIOBuf_get_base(aTHX_ f);
            m->bbuf = b->buf;
        }
     }
-    return PerlIOBuf_unread(f, vbuf, count);
+    return PerlIOBuf_unread(aTHX_ f, vbuf, count);
 }
 
 SSize_t
-PerlIOMmap_write(PerlIO *f, const void *vbuf, Size_t count)
+PerlIOMmap_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count)
 {
     PerlIOMmap *m = PerlIOSelf(f, PerlIOMmap);
     PerlIOBuf *b = &m->base;
@@ -3917,7 +3828,7 @@ PerlIOMmap_write(PerlIO *f, const void *vbuf, Size_t count)
         * No, or wrong sort of, buffer
         */
        if (m->len) {
-           if (PerlIOMmap_unmap(f) != 0)
+           if (PerlIOMmap_unmap(aTHX_ f) != 0)
                return 0;
        }
        /*
@@ -3926,19 +3837,19 @@ PerlIOMmap_write(PerlIO *f, const void *vbuf, Size_t count)
        if (!b->buf && m->bbuf)
            b->buf = m->bbuf;
        if (!b->buf) {
-           PerlIOBuf_get_base(f);
+           PerlIOBuf_get_base(aTHX_ f);
            m->bbuf = b->buf;
        }
     }
-    return PerlIOBuf_write(f, vbuf, count);
+    return PerlIOBuf_write(aTHX_ f, vbuf, count);
 }
 
 IV
-PerlIOMmap_flush(PerlIO *f)
+PerlIOMmap_flush(pTHX_ PerlIO *f)
 {
     PerlIOMmap *m = PerlIOSelf(f, PerlIOMmap);
     PerlIOBuf *b = &m->base;
-    IV code = PerlIOBuf_flush(f);
+    IV code = PerlIOBuf_flush(aTHX_ f);
     /*
      * Now we are "synced" at PerlIOBuf level
      */
@@ -3947,7 +3858,7 @@ PerlIOMmap_flush(PerlIO *f)
            /*
             * Unmap the buffer
             */
-           if (PerlIOMmap_unmap(f) != 0)
+           if (PerlIOMmap_unmap(aTHX_ f) != 0)
                code = -1;
        }
        else {
@@ -3962,21 +3873,21 @@ PerlIOMmap_flush(PerlIO *f)
 }
 
 IV
-PerlIOMmap_fill(PerlIO *f)
+PerlIOMmap_fill(pTHX_ PerlIO *f)
 {
     PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf);
     IV code = PerlIO_flush(f);
     if (code == 0 && !b->buf) {
-       code = PerlIOMmap_map(f);
+       code = PerlIOMmap_map(aTHX_ f);
     }
     if (code == 0 && !(PerlIOBase(f)->flags & PERLIO_F_RDBUF)) {
-       code = PerlIOBuf_fill(f);
+       code = PerlIOBuf_fill(aTHX_ f);
     }
     return code;
 }
 
 IV
-PerlIOMmap_close(PerlIO *f)
+PerlIOMmap_close(pTHX_ PerlIO *f)
 {
     PerlIOMmap *m = PerlIOSelf(f, PerlIOMmap);
     PerlIOBuf *b = &m->base;
@@ -3986,7 +3897,7 @@ PerlIOMmap_close(PerlIO *f)
        m->bbuf = NULL;
        b->ptr = b->end = b->buf;
     }
-    if (PerlIOBuf_close(f) != 0)
+    if (PerlIOBuf_close(aTHX_ f) != 0)
        code = -1;
     return code;
 }
@@ -4029,33 +3940,27 @@ PerlIO_funcs PerlIO_mmap = {
 
 #endif                         /* HAS_MMAP */
 
-#undef PerlIO_stdin
 PerlIO *
-PerlIO_stdin(void)
+Perl_PerlIO_stdin(pTHX)
 {
-    dTHX;
     if (!PL_perlio) {
        PerlIO_stdstreams(aTHX);
     }
     return &PL_perlio[1];
 }
 
-#undef PerlIO_stdout
 PerlIO *
-PerlIO_stdout(void)
+Perl_PerlIO_stdout(pTHX)
 {
-    dTHX;
     if (!PL_perlio) {
        PerlIO_stdstreams(aTHX);
     }
     return &PL_perlio[2];
 }
 
-#undef PerlIO_stderr
 PerlIO *
-PerlIO_stderr(void)
+Perl_PerlIO_stderr(pTHX)
 {
-    dTHX;
     if (!PL_perlio) {
        PerlIO_stdstreams(aTHX);
     }
@@ -4064,7 +3969,6 @@ PerlIO_stderr(void)
 
 /*--------------------------------------------------------------------------------------*/
 
-#undef PerlIO_getname
 char *
 PerlIO_getname(PerlIO *f, char *buf)
 {
@@ -4087,10 +3991,37 @@ PerlIO_getname(PerlIO *f, char *buf)
  * terms of above
  */
 
+#undef PerlIO_fdopen
+PerlIO *
+PerlIO_fdopen(int fd, const char *mode)
+{
+    dTHX;
+    return PerlIO_openn(aTHX_ Nullch, mode, fd, 0, 0, NULL, 0, NULL);
+}
+
+#undef PerlIO_open
+PerlIO *
+PerlIO_open(const char *path, const char *mode)
+{
+    dTHX;
+    SV *name = sv_2mortal(newSVpvn(path, strlen(path)));
+    return PerlIO_openn(aTHX_ Nullch, mode, -1, 0, 0, NULL, 1, &name);
+}
+
+#undef Perlio_reopen
+PerlIO *
+PerlIO_reopen(const char *path, const char *mode, PerlIO *f)
+{
+    dTHX;
+    SV *name = sv_2mortal(newSVpvn(path, strlen(path)));
+    return PerlIO_openn(aTHX_ Nullch, mode, -1, 0, 0, f, 1, &name);
+}
+
 #undef PerlIO_getc
 int
 PerlIO_getc(PerlIO *f)
 {
+    dTHX;
     STDCHAR buf[1];
     SSize_t count = PerlIO_read(f, buf, 1);
     if (count == 1) {
@@ -4103,6 +4034,7 @@ PerlIO_getc(PerlIO *f)
 int
 PerlIO_ungetc(PerlIO *f, int ch)
 {
+    dTHX;
     if (ch != EOF) {
        STDCHAR buf = ch;
        if (PerlIO_unread(f, &buf, 1) == 1)
@@ -4115,6 +4047,7 @@ PerlIO_ungetc(PerlIO *f, int ch)
 int
 PerlIO_putc(PerlIO *f, int ch)
 {
+    dTHX;
     STDCHAR buf = ch;
     return PerlIO_write(f, &buf, 1);
 }
@@ -4123,6 +4056,7 @@ PerlIO_putc(PerlIO *f, int ch)
 int
 PerlIO_puts(PerlIO *f, const char *s)
 {
+    dTHX;
     STRLEN len = strlen(s);
     return PerlIO_write(f, s, len);
 }
@@ -4131,6 +4065,7 @@ PerlIO_puts(PerlIO *f, const char *s)
 void
 PerlIO_rewind(PerlIO *f)
 {
+    dTHX;
     PerlIO_seek(f, (Off_t) 0, SEEK_SET);
     PerlIO_clearerr(f);
 }
@@ -4173,6 +4108,7 @@ PerlIO_printf(PerlIO *f, const char *fmt, ...)
 int
 PerlIO_stdoutf(const char *fmt, ...)
 {
+    dTHX;
     va_list ap;
     int result;
     va_start(ap, fmt);