This is a live mirror of the Perl 5 development currently hosted at
Eliminate VMS-specific code in PerlIOStdio_fill.
authorCraig A. Berry <>
Sun, 8 Jun 2014 23:14:57 +0000 (18:14 -0500)
committerCraig A. Berry <>
Mon, 9 Jun 2014 01:33:09 +0000 (20:33 -0500)
The same logic but with more safety checks is already defined for
PerlSIO_ungetc in iperlsys.h, so DRY says we should just use that.

Also, that definition in iperlsys.h really depends on the library
we are using, not the compiler.  And there is only one viable C
library on VMS and it ships with the OS, so it's really just an
OS dependency.

N.B.  While it may be something of a fool's errand to maintain the
stdio layer, deleting redundant code can only be a good thing,
possibly enabling further refactoring and clean-up.


index 003405f..9604ad4 100644 (file)
@@ -315,7 +315,7 @@ struct IPerlStdIOInfo
 #define PerlSIO_fputs(s,f)             fputs(s,f)
 #define PerlSIO_fflush(f)              Fflush(f)
 #define PerlSIO_fgets(s, n, f)         fgets(s,n,f)
-#if defined(VMS) && defined(__DECC)
+#if defined(__VMS)
      /* Unusual definition of ungetc() here to accommodate fast_sv_gets()'
       * belief that it can mix getc/ungetc with reads from stdio buffer */
      int decc$ungetc(int __c, FILE *__stream);
index 90622c1..d41c2f5 100644 (file)
--- a/perlio.c
+++ b/perlio.c
@@ -3624,20 +3624,12 @@ PerlIOStdio_fill(pTHX_ PerlIO *f)
-#if defined(VMS)
-    /* An ungetc()d char is handled separately from the regular
-     * buffer, so we stuff it in the buffer ourselves.
-     * Should never get called as should hit code above
-     */
-    *(--((*stdio)->_ptr)) = (unsigned char) c;
-    (*stdio)->_cnt++;
     /* If buffer snoop scheme above fails fall back to
        using ungetc().
     if (PerlSIO_ungetc(c, stdio) != c)
        return EOF;
     return 0;