summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorNick Ing-Simmons <nik@tiuk.ti.com>2002-04-28 08:22:07 +0000
committerNick Ing-Simmons <nik@tiuk.ti.com>2002-04-28 08:22:07 +0000
commit24f59afc531955e5c3768c6023fb2ac247d6939d (patch)
tree6507750ebdd0bf704c9354304483df01f10a903f /ext
parente80e6293390a61a8964f30fb88fd0d7e37c49e0e (diff)
downloadperl-24f59afc531955e5c3768c6023fb2ac247d6939d.tar.gz
Builds under -Uuseperlio
Uses PUSHSTACK/POPSTACK in :encoding and :Via p4raw-id: //depot/perlio@16244
Diffstat (limited to 'ext')
-rw-r--r--ext/PerlIO/Via/Via.xs3
-rw-r--r--ext/PerlIO/encoding/encoding.xs32
2 files changed, 30 insertions, 5 deletions
diff --git a/ext/PerlIO/Via/Via.xs b/ext/PerlIO/Via/Via.xs
index 494ddf9118..6835f5804d 100644
--- a/ext/PerlIO/Via/Via.xs
+++ b/ext/PerlIO/Via/Via.xs
@@ -76,7 +76,9 @@ PerlIOVia_method(pTHX_ PerlIO *f,char *method,CV **save,int flags,...)
IV count;
dSP;
SV *arg;
+ PUSHSTACKi(PERLSI_MAGIC);
ENTER;
+ SPAGAIN;
PUSHMARK(sp);
XPUSHs(s->obj);
while ((arg = va_arg(ap,SV *)))
@@ -113,6 +115,7 @@ PerlIOVia_method(pTHX_ PerlIO *f,char *method,CV **save,int flags,...)
result = &PL_sv_undef;
}
LEAVE;
+ POPSTACK;
}
va_end(ap);
return result;
diff --git a/ext/PerlIO/encoding/encoding.xs b/ext/PerlIO/encoding/encoding.xs
index dc9bac2638..0293ceef9c 100644
--- a/ext/PerlIO/encoding/encoding.xs
+++ b/ext/PerlIO/encoding/encoding.xs
@@ -58,6 +58,9 @@ PerlIOEncode_getarg(pTHX_ PerlIO * f, CLONE_PARAMS * param, int flags)
SV *sv = &PL_sv_undef;
if (e->enc) {
dSP;
+ /* Not 100% sure stack swap is right thing to do during dup ... */
+ PUSHSTACKi(PERLSI_MAGIC);
+ SPAGAIN;
ENTER;
SAVETMPS;
PUSHMARK(sp);
@@ -68,6 +71,9 @@ PerlIOEncode_getarg(pTHX_ PerlIO * f, CLONE_PARAMS * param, int flags)
sv = newSVsv(POPs);
PUTBACK;
}
+ FREETMPS;
+ LEAVE;
+ POPSTACK;
}
return sv;
}
@@ -80,6 +86,9 @@ PerlIOEncode_pushed(pTHX_ PerlIO * f, const char *mode, SV * arg)
IV code = PerlIOBuf_pushed(aTHX_ f, mode, Nullsv);
SV *result = Nullsv;
+ PUSHSTACKi(PERLSI_MAGIC);
+ SPAGAIN;
+
ENTER;
SAVETMPS;
@@ -140,6 +149,7 @@ PerlIOEncode_pushed(pTHX_ PerlIO * f, const char *mode, SV * arg)
FREETMPS;
LEAVE;
+ POPSTACK;
return code;
}
@@ -224,6 +234,8 @@ PerlIOEncode_fill(pTHX_ PerlIO * f)
Perl_die(aTHX_ "panic: cannot push :perlio for %p",f);
}
}
+ PUSHSTACKi(PERLSI_MAGIC);
+ SPAGAIN;
ENTER;
SAVETMPS;
retry:
@@ -363,18 +375,19 @@ PerlIOEncode_fill(pTHX_ PerlIO * f)
PerlIO_set_ptrcnt(n, ptr+use, (avail-use));
goto retry;
}
- FREETMPS;
- LEAVE;
- return code;
}
else {
end_of_file:
+ code = -1;
if (avail == 0)
PerlIOBase(f)->flags |= PERLIO_F_EOF;
else
PerlIOBase(f)->flags |= PERLIO_F_ERROR;
- return -1;
}
+ FREETMPS;
+ LEAVE;
+ POPSTACK;
+ return code;
}
IV
@@ -391,6 +404,8 @@ PerlIOEncode_flush(pTHX_ PerlIO * f)
SSize_t count = 0;
if (PerlIOBase(f)->flags & PERLIO_F_WRBUF) {
/* Write case encode the buffer and write() to layer below */
+ PUSHSTACKi(PERLSI_MAGIC);
+ SPAGAIN;
ENTER;
SAVETMPS;
PUSHMARK(sp);
@@ -413,6 +428,7 @@ PerlIOEncode_flush(pTHX_ PerlIO * f)
}
FREETMPS;
LEAVE;
+ POPSTACK;
if (PerlIO_flush(PerlIONext(f)) != 0) {
code = -1;
}
@@ -437,6 +453,8 @@ PerlIOEncode_flush(pTHX_ PerlIO * f)
/* Bother - have unread data.
re-encode and unread() to layer below
*/
+ PUSHSTACKi(PERLSI_MAGIC);
+ SPAGAIN;
ENTER;
SAVETMPS;
str = sv_newmortal();
@@ -464,6 +482,7 @@ PerlIOEncode_flush(pTHX_ PerlIO * f)
}
FREETMPS;
LEAVE;
+ POPSTACK;
}
}
e->base.ptr = e->base.end = e->base.buf;
@@ -594,6 +613,8 @@ BOOT:
* PerlIO/encoding.pm. This avoids SEGV when ":encoding()"
* is invoked without prior "use Encode". -- dankogai
*/
+ PUSHSTACKi(PERLSI_MAGIC);
+ SPAGAIN;
if (!gv_stashpvn("Encode", 6, FALSE)) {
#if 0
/* This would just be an irritant now loading works */
@@ -607,6 +628,7 @@ BOOT:
SPAGAIN;
LEAVE;
}
+#ifdef PERLIO_LAYERS
PUSHMARK(sp);
PUTBACK;
if (call_pv(OUR_DEFAULT_FB, G_SCALAR) != 1) {
@@ -616,7 +638,7 @@ BOOT:
SPAGAIN;
sv_setsv(chk, POPs);
PUTBACK;
-#ifdef PERLIO_LAYERS
PerlIO_define_layer(aTHX_ &PerlIO_encode);
#endif
+ POPSTACK;
}