Change 24725 by [EMAIL PROTECTED] on 2005/06/07 12:08:58

        The FBM compile code is mutable, because it's permissible to FBM
        compile a read-only value.

Affected files ...

... //depot/perl/util.c#459 edit

Differences ...

==== //depot/perl/util.c#459 (text) ====
Index: perl/util.c
--- perl/util.c#458~24717~      Tue Jun  7 01:18:59 2005
+++ perl/util.c Tue Jun  7 05:08:58 2005
@@ -366,7 +366,7 @@
 void
 Perl_fbm_compile(pTHX_ SV *sv, U32 flags)
 {
-    register U8 *s;
+    const register U8 *s;
     register U8 *table;
     register U32 i;
     STRLEN len;
@@ -379,20 +379,20 @@
        if (mg && mg->mg_len >= 0)
            mg->mg_len++;
     }
-    s = (U8*)SvPV_force(sv, len);
+    s = (U8*)SvPV_force_mutable(sv, len);
     SvUPGRADE(sv, SVt_PVBM);
     if (len == 0)              /* TAIL might be on a zero-length string. */
        return;
     if (len > 2) {
        U8 mlen;
-       unsigned char *sb;
+       const unsigned char *sb;
 
        if (len > 255)
            mlen = 255;
        else
            mlen = (U8)len;
        Sv_Grow(sv, len + 256 + FBM_TABLE_OFFSET);
-       table = (unsigned char*)(SvPVX(sv) + len + FBM_TABLE_OFFSET);
+       table = (unsigned char*)(SvPVX_mutable(sv) + len + FBM_TABLE_OFFSET);
        s = table - 1 - FBM_TABLE_OFFSET;       /* last char */
        memset((void*)table, mlen, 256);
        table[-1] = (U8)flags;
@@ -407,7 +407,7 @@
     sv_magic(sv, Nullsv, PERL_MAGIC_bm, Nullch, 0);    /* deep magic */
     SvVALID_on(sv);
 
-    s = (unsigned char*)(SvPVX(sv));           /* deeper magic */
+    s = (const unsigned char*)(SvPVX_const(sv));       /* deeper magic */
     for (i = 0; i < len; i++) {
        if (PL_freq[s[i]] < frequency) {
            rarest = i;
@@ -443,7 +443,8 @@
 {
     register unsigned char *s;
     STRLEN l;
-    register unsigned char *little = (unsigned char *)SvPV(littlestr,l);
+    register const unsigned char *little
+       = (const unsigned char *)SvPV_const(littlestr,l);
     register STRLEN littlelen = l;
     register const I32 multiline = flags & FBMrf_MULTILINE;
 
@@ -574,7 +575,7 @@
 
     {  /* Do actual FBM.  */
        register const unsigned char *table = little + littlelen + 
FBM_TABLE_OFFSET;
-       register unsigned char *oldlittle;
+       const register unsigned char *oldlittle;
 
        if (littlelen > (STRLEN)(bigend - big))
            return Nullch;
End of Patch.

Reply via email to