summaryrefslogtreecommitdiff
path: root/pp.c
diff options
context:
space:
mode:
authorJarkko Hietaniemi <jhi@iki.fi>1998-10-28 08:25:09 +0000
committerJarkko Hietaniemi <jhi@iki.fi>1998-10-28 08:25:09 +0000
commit7205e44d3d0f3600c6e6dd74269cae8d4350c695 (patch)
treedc9570350799ee8350a5308c974aef1462876e59 /pp.c
parentb9416812b7330d57b47d469866c91cac87d6391b (diff)
downloadperl-7205e44d3d0f3600c6e6dd74269cae8d4350c695.tar.gz
Bring in #2102.
p4raw-id: //depot/cfgperl@2104
Diffstat (limited to 'pp.c')
-rw-r--r--pp.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/pp.c b/pp.c
index 6a93287fdf..9cd1c55f57 100644
--- a/pp.c
+++ b/pp.c
@@ -2444,11 +2444,31 @@ PP(pp_quotemeta)
(void)SvUPGRADE(TARG, SVt_PV);
SvGROW(TARG, (len * 2) + 1);
d = SvPVX(TARG);
- while (len--) {
- if (!isALNUM(*s))
- *d++ = '\\';
- *d++ = *s++;
+ if (IN_UTF8) {
+ while (len) {
+ if (*s & 0x80) {
+ STRLEN ulen = UTF8SKIP(s);
+ if (ulen > len)
+ ulen = len;
+ len -= ulen;
+ while (ulen--)
+ *d++ = *s++;
+ }
+ else {
+ if (!isALNUM(*s))
+ *d++ = '\\';
+ *d++ = *s++;
+ len--;
+ }
+ }
}
+ else {
+ while (len--) {
+ if (!isALNUM(*s))
+ *d++ = '\\';
+ *d++ = *s++;
+ }
+ }
*d = '\0';
SvCUR_set(TARG, d - SvPVX(TARG));
(void)SvPOK_only(TARG);