summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2007-12-29 19:32:52 +0000
committerNicholas Clark <nick@ccl4.org>2007-12-29 19:32:52 +0000
commit0d3c21b03f6bad2977f965669c308bd429cf00bf (patch)
treef603e93ca4645ee588a0d3e04436aefeb531a791
parent156d2b4303bd9581fb8f5aea70c69ed9320944c4 (diff)
downloadperl-0d3c21b03f6bad2977f965669c308bd429cf00bf.tar.gz
Move all code that relies on reading the to-be-thrown-away buffer ahead
of the call to sv_chop() that throws it away. p4raw-id: //depot/perl@32777
-rw-r--r--pp_hot.c4
-rw-r--r--sv.c4
2 files changed, 2 insertions, 6 deletions
diff --git a/pp_hot.c b/pp_hot.c
index f987357bf8..c6b5c5c097 100644
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -2197,10 +2197,8 @@ PP(pp_subst)
else if ((i = m - s)) { /* faster from front */
d -= clen;
m = d;
+ Move(s, d - i, i, char);
sv_chop(TARG, d-i);
- s += i;
- while (i--)
- *--d = *--s;
if (clen)
Copy(c, m, clen, char);
}
diff --git a/sv.c b/sv.c
index 913a5daf30..bb64eb9621 100644
--- a/sv.c
+++ b/sv.c
@@ -4994,10 +4994,8 @@ Perl_sv_insert(pTHX_ SV *bigstr, STRLEN offset, STRLEN len, const char *little,
else if ((i = mid - big)) { /* faster from front */
midend -= littlelen;
mid = midend;
+ Move(big, midend - i, i, char);
sv_chop(bigstr,midend-i);
- big += i;
- while (i--)
- *--midend = *--big;
if (littlelen)
Move(little, mid, littlelen,char);
}