Introduce Perl_utf8_length(). Use it.
[p5sagit/p5-mst-13.2.git] / pp_hot.c
index d6a7f04..b0d53bc 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -173,10 +173,8 @@ PP(pp_concat)
                olds = s = (U8*)savepvn((char*)s, len);
            }
            if (!SvOK(left) && SvTYPE(left) <= SVt_PVMG) {
-               if (SvREADONLY(left)) {
-                   left = sv_2mortal(newSVpvn("", 0));
-                   left_utf = FALSE;
-               }
+               if (SvREADONLY(left))
+                   left = sv_2mortal(newSVsv(left));
                else
                    sv_setpv(left, ""); /* Suppress warning. */
            }
@@ -1452,6 +1450,13 @@ Perl_do_readline(pTHX)
        offset = 0;
     }
 
+    /* This should not be marked tainted if the fp is marked clean */
+#define MAYBE_TAINT_LINE(io, sv) \
+    if (!(IoFLAGS(io) & IOf_UNTAINT)) { \
+       TAINT;                          \
+       SvTAINTED_on(sv);               \
+    }
+
 /* delay EOF state for a snarfed empty file */
 #define SNARF_EOF(gimme,rs,io,sv) \
     (gimme != G_SCALAR || SvCUR(sv)                                    \
@@ -1480,13 +1485,10 @@ Perl_do_readline(pTHX)
                (void)SvOK_off(TARG);
                PUSHTARG;
            }
+           MAYBE_TAINT_LINE(io, sv);
            RETURN;
        }
-       /* This should not be marked tainted if the fp is marked clean */
-       if (!(IoFLAGS(io) & IOf_UNTAINT)) {
-           TAINT;
-           SvTAINTED_on(sv);
-       }
+       MAYBE_TAINT_LINE(io, sv);
        IoLINES(io)++;
        IoFLAGS(io) |= IOf_NOLINE;
        SvSETMAGIC(sv);