This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Revert "t/porting/checkcase.t should skip directories"
[perl5.git] / doio.c
diff --git a/doio.c b/doio.c
index a7f8fbd..a430361 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -1219,8 +1219,8 @@ Perl_do_print(pTHX_ register SV *sv, PerlIO *fp)
        U8 *tmpbuf = NULL;
        bool happy = TRUE;
 
-       if (PerlIO_isutf8(fp)) {
-           if (!SvUTF8(sv)) {
+       if (PerlIO_isutf8(fp)) { /* If the stream is utf8 ... */
+           if (!SvUTF8(sv)) {  /* Convert to utf8 if necessary */
                /* We don't modify the original scalar.  */
                tmpbuf = bytes_to_utf8((const U8*) tmps, &len);
                tmps = (char *) tmpbuf;
@@ -1228,17 +1228,22 @@ Perl_do_print(pTHX_ register SV *sv, PerlIO *fp)
            else if (ckWARN4_d(WARN_UTF8, WARN_SURROGATE, WARN_NON_UNICODE, WARN_NONCHAR)) {
                (void) check_utf8_print((const U8*) tmps, len);
            }
-       }
-       else if (DO_UTF8(sv)) {
+       } /* else stream isn't utf8 */
+       else if (DO_UTF8(sv)) { /* But if is utf8 internally, attempt to
+                                  convert to bytes */
            STRLEN tmplen = len;
            bool utf8 = TRUE;
            U8 * const result = bytes_from_utf8((const U8*) tmps, &tmplen, &utf8);
            if (!utf8) {
+
+               /* Here, succeeded in downgrading from utf8.  Set up to below
+                * output the converted value */
                tmpbuf = result;
                tmps = (char *) tmpbuf;
                len = tmplen;
            }
-           else {
+           else {  /* Non-utf8 output stream, but string only representable in
+                      utf8 */
                assert((char *)result == tmps);
                Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8),
                                 "Wide character in %s",
@@ -1271,7 +1276,6 @@ Perl_my_stat_flags(pTHX_ const U32 flags)
     GV* gv;
 
     if (PL_op->op_flags & OPf_REF) {
-       EXTEND(SP,1);
        gv = cGVOP_gv;
       do_fstat:
         if (gv == PL_defgv)
@@ -1329,7 +1333,6 @@ Perl_my_lstat_flags(pTHX_ const U32 flags)
     dSP;
     const char *file;
     if (PL_op->op_flags & OPf_REF) {
-       EXTEND(SP,1);
        if (cGVOP_gv == PL_defgv) {
            if (PL_laststype != OP_LSTAT)
                Perl_croak(aTHX_ no_prev_lstat);
@@ -1559,6 +1562,10 @@ Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
 
 #endif /* OS2 || WIN32 */
 
+#ifdef VMS
+#include <starlet.h> /* for sys$delprc */
+#endif
+
 I32
 Perl_apply(pTHX_ I32 type, register SV **mark, register SV **sp)
 {
@@ -1695,7 +1702,6 @@ nothing in the core.
        /* kill() doesn't do process groups (job trees?) under VMS */
        if (val < 0) val = -val;
        if (val == SIGKILL) {
-#          include <starlet.h>
            /* Use native sys$delprc() to insure that target process is
             * deleted; supervisor-mode images don't pay attention to
             * CRTL's emulation of Unix-style signals and kill()