[5.004_61 PATCH] Make incompatible changes to RE engine NOW
[p5sagit/p5-mst-13.2.git] / mg.c
diff --git a/mg.c b/mg.c
index 289dd3b..4f5f06f 100644 (file)
--- a/mg.c
+++ b/mg.c
@@ -1009,8 +1009,10 @@ magic_getpack(SV *sv, MAGIC *mg)
 
 int
 magic_setpack(SV *sv, MAGIC *mg)
-{
+{   
+    ENTER;
     magic_methcall(mg, "STORE", G_SCALAR|G_DISCARD, 3, sv);
+    LEAVE;
     return 0;
 }
 
@@ -1031,7 +1033,7 @@ magic_sizepack(SV *sv, MAGIC *mg)
     SAVETMPS;
     if (magic_methcall(mg, "FETCHSIZE", G_SCALAR, 2, NULL)) {
        sv = *stack_sp--;
-       retval = (U32) SvIV(sv);
+       retval = (U32) SvIV(sv)-1;
     }
     FREETMPS;
     LEAVE;
@@ -1045,9 +1047,9 @@ int magic_wipepack(SV *sv, MAGIC *mg)
     PUSHMARK(sp);
     XPUSHs(mg->mg_obj);
     PUTBACK;
-
+    ENTER;
     perl_call_method("CLEAR", G_SCALAR|G_DISCARD);
-
+    LEAVE;
     return 0;
 }
 
@@ -1545,7 +1547,7 @@ magic_set(SV *sv, MAGIC *mg)
            STATUS_POSIX_SET(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv));
        break;
     case '!':
-       SETERRNO(SvIOK(sv) ? SvIVX(sv) : sv_2iv(sv),
+       SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0,
                 (SvIV(sv) == EVMSERR) ? 4 : vaxc$errno);
        break;
     case '<':