Don't warn on use of CCFLAGS
[p5sagit/p5-mst-13.2.git] / sv.c
diff --git a/sv.c b/sv.c
index 2ea1990..8f6bbe9 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -2624,6 +2624,9 @@ register SV *sv;
                sv_upgrade(&ref, SVt_RV);
                SvRV(&ref) = SvREFCNT_inc(sv);
                SvROK_on(&ref);
+               SvREFCNT(&ref) = 1;     /* Fake, but otherwise
+                                          creating+destructing a ref
+                                          leads to disaster. */
 
                EXTEND(SP, 2);
                PUSHMARK(SP);
@@ -2951,6 +2954,11 @@ sv_collxfrm(sv, nxp)
            Safefree(mg->mg_ptr);
        s = SvPV(sv, len);
        if ((xf = mem_collxfrm(s, len, &xlen))) {
+           if (SvREADONLY(sv)) {
+               SAVEFREEPV(xf);
+               *nxp = xlen;
+               return xf;
+           }
            if (! mg) {
                sv_magic(sv, 0, 'o', 0, 0);
                mg = mg_find(sv, 'o');
@@ -2960,8 +2968,10 @@ sv_collxfrm(sv, nxp)
            mg->mg_len = xlen;
        }
        else {
-           mg->mg_ptr = NULL;
-           mg->mg_len = -1;
+           if (mg) {
+               mg->mg_ptr = NULL;
+               mg->mg_len = -1;
+           }
        }
     }
     if (mg && mg->mg_ptr) {