This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
I'll finally get it right. (thanks to Sadahiro Tomoyuki)
[perl5.git] / doio.c
diff --git a/doio.c b/doio.c
index e6909cb..88afb1d 100644 (file)
--- a/doio.c
+++ b/doio.c
@@ -1225,9 +1225,14 @@ Perl_do_print(pTHX_ register SV *sv, PerlIO *fp)
        tmps = SvPV_const(sv, len);
        if (PerlIO_isutf8(fp)) {
            if (!SvUTF8(sv)) {
+               const STRLEN origlen = len;
                /* We don't modify the original scalar.  */
                tmpbuf = bytes_to_utf8((const U8*) tmps, &len);
                tmps = (char *) tmpbuf;
+               if (ckWARN(WARN_UTF8) && len != origlen) {
+                   Perl_warner(aTHX_ packWARN(WARN_UTF8),
+                               "Variable length character upgraded in print");
+               }
            }
        }
        else if (DO_UTF8(sv)) {
@@ -1288,7 +1293,12 @@ Perl_my_stat(pTHX)
                 return (PL_laststatval = PerlLIO_fstat(dirfd(IoDIRP(io)), &PL_statcache));
 #else
                 Perl_die(aTHX_ PL_no_func, "dirfd");
-                NORETURN_FUNCTION_END;
+               /* NOT REACHED */
+               return 0;
+               /* Can't use NORETURN_FUNCTION_END because Perl_die is not
+                *     __attribute__noreturn__
+                * Can't use DIE because that does not return an integer
+                */
 #endif
             } else {
                 if (ckWARN2(WARN_UNOPENED,WARN_CLOSED))
@@ -1447,11 +1457,13 @@ Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
     dVAR;
     register char **a;
     register char *s;
+    char *buf;
     char *cmd;
 
     /* Make a copy so we can change it */
     const Size_t cmdlen = strlen(incmd) + 1;
-    Newx(cmd, cmdlen, char);
+    Newx(buf, cmdlen, char);
+    cmd = buf;
     my_strlcpy(cmd, incmd, cmdlen);
 
     while (*cmd && isSPACE(*cmd))
@@ -1486,7 +1498,7 @@ Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
                  PERL_FPU_POST_EXEC
                  *s = '\'';
                  S_exec_failed(aTHX_ PL_cshname, fd, do_report);
-                 Safefree(cmd);
+                 Safefree(buf);
                  return FALSE;
              }
          }
@@ -1534,7 +1546,7 @@ Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
            PerlProc_execl(PL_sh_path, "sh", "-c", cmd, (char *)NULL);
            PERL_FPU_POST_EXEC
            S_exec_failed(aTHX_ PL_sh_path, fd, do_report);
-           Safefree(cmd);
+           Safefree(buf);
            return FALSE;
        }
     }
@@ -1564,7 +1576,7 @@ Perl_do_exec3(pTHX_ const char *incmd, int fd, int do_report)
        S_exec_failed(aTHX_ PL_Argv[0], fd, do_report);
     }
     do_execfree();
-    Safefree(cmd);
+    Safefree(buf);
     return FALSE;
 }