Bring in #2102.
Jarkko Hietaniemi [Wed, 28 Oct 1998 08:25:09 +0000 (08:25 +0000)]
p4raw-id: //depot/cfgperl@2104

pp.c

diff --git a/pp.c b/pp.c
index 6a93287..9cd1c55 100644 (file)
--- 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);