X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FByteLoader%2FByteLoader.xs;h=c9d7d16d06020b3002b4c70567a5e9f0eedd412f;hb=36d52296c16de220053927a47cf296e148a3a79d;hp=34002f12b2a84c5fe68d5bcbadb80e92b3d73033;hpb=4f63d0249796d635a70b03245ad972152a3eba76;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/ByteLoader/ByteLoader.xs b/ext/ByteLoader/ByteLoader.xs index 34002f1..c9d7d16 100644 --- a/ext/ByteLoader/ByteLoader.xs +++ b/ext/ByteLoader/ByteLoader.xs @@ -1,23 +1,28 @@ +#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "byterun.h" +#ifdef NEED_FGETC_PROTOTYPE +extern int fgetc(); +#endif +#ifdef NEED_FREAD_PROTOTYPE +extern int fread(); +#endif + static void freadpv(U32 len, void *data, XPV *pv) { + dTHX; New(666, pv->xpv_pv, len, char); - fread(pv->xpv_pv, 1, len, (FILE*)data); + PerlIO_read((PerlIO*)data, (void*)pv->xpv_pv, len); pv->xpv_len = len; pv->xpv_cur = len - 1; } static I32 -#ifdef PERL_OBJECT -byteloader_filter(CPerlObj *pPerl, int idx, SV *buf_sv, int maxlen) -#else -byteloader_filter(pTHX_ int idx, SV *buf_sv, int maxlen) -#endif +byteloader_filter(pTHXo_ int idx, SV *buf_sv, int maxlen) { dTHR; OP *saveroot = PL_main_root; @@ -29,7 +34,7 @@ byteloader_filter(pTHX_ int idx, SV *buf_sv, int maxlen) bs.pfread = (int(*) (char*,size_t,size_t,void*))fread; bs.pfreadpv = freadpv; - byterun(bs); + byterun(aTHXo_ bs); if (PL_in_eval) { OP *o;